python - 从 GitHub API 提取的提交与我从 git.Repo 获得的相同项目的提交不同
问题描述
我想要做的是:我想提取在拉取请求中已修改的类的名称。为此,我执行以下操作:
来自 GitHub API:
1)我提取了一个项目的所有拉取请求
2)我提取每个拉取请求的所有提交
3)我只保留每个拉取请求的第一次提交和最后一次提交。
由于此时,我不知道如何提取每个拉取请求的这两个提交之间的修改类列表,所以我使用“git”包,如下所示:
我克隆gson
了存储库D:\\projects\\gson
import git
repo = git.Repo("D:\\projects\\gson")
commits_list = list(repo.iter_commits())
temp = []
for x in commits_list[0].diff(commits_list[-1]):
if (x.a_path == x.b_path):
if x.a_path.endswith('.java'):
temp.append(x.a_path)
else:
if x.b_path.endswith('.java'):
temp.append(x.b_path)
以下是我从 GitHub API 提取提交的方法:
projects = [ {'owner':'google', 'repo':'gson', 'pull_requests': []}]
def get(url):
global nb
PARAMS = {
'client_id': '----my_client_id---',
'client_secret': '---my_client_secret---',
'per_page': 100,
'state': 'all' #open, closed, all
}
result = requests.get(url = url, params=PARAMS)
nb+=1
if(not (result.status_code in [200, 304])):
raise Exception('request error', url, result, result.headers)
data = result.json()
while 'next' in result.links.keys():
result = requests.get(url = result.links['next']['url'],
params=PARAMS)
data.extend(result.json())
nb+=1
return data
def get_pull_requests(repo):
url = 'https://api.github.com/repos/{}/pulls'.format(repo)
result = get(url)
return result
def get_commits(url):
result = get(url)
return result
for i,project in enumerate(projects):
project['pull_requests'] =
get_pull_requests('{}/{}'.format(project['owner'],project['repo']))
for p in project['pull_requests']:
p['commits'] = get_commits(p['commits_url'])
print('{}/{}'.format(project['owner'],project['repo']), ':',
len(project['pull_requests']))
这两个代码中的每一个都有效。问题是,我从 GitHub API 获得了 287 次提交,但同一项目只有 86 次来自 git.Repo 的提交。当我尝试匹配这些提交时,少于 40 个提交匹配。
问题:
1)为什么我会为同一个项目获得不同的提交?
2)哪一个是正确的,我应该使用?
3) 有没有办法让我知道使用 Git.Repo 的拉取请求的提交是什么?
4) 有没有办法可以提取 GitHub API 中两次提交之间的修改类?
5) 有人知道每个拉取请求提取修改类的更好方法吗?
我知道这是一篇很长的文章,但我试图在这里具体说明一下。任何这些问题的答案将非常感激。
解决方案
推荐阅读
- sql-server - 不使用游标填充表的 ID 列
- python-3.x - python性能提升
- qt - Qt3D“qt.glx:qglx_findConfig:找不到匹配的FBConfig”警告
- c# - 列表中选择器中的项目 - Xamarin Code behind
- python-3.x - 使用 Redis 作为 Celery 结果后端和消息代理 - 任务到期(对于存储在 redis 中的密钥)
- ios - 即使满足条件也不会出现警报控制器(值为空)
- reporting-services - SSRS 表中列中特定十进制值的计数
- tfs - TFS 将变量与字符串组合
- python - Python Pandas:在附加到新数据帧时引用来自不同循环级别的变量
- vagrant - 我的厨师厨房的 Vagrant 机器无法访问互联网