我要做的是:提取在pull请求中修改过的类的名称。为此,我将执行以下操作:
从GitHub API:
1)我提取一个项目的所有请求
2)我提取每个pull请求的所有提交
3)对于每个拉请求,我只保留第一次提交和最后一次提交
因为此时,我不知道如何提取每个拉请求的这两个提交之间的修改类列表,所以我使用“git”包,如下所示:
我在D:\\projects\\gson
中克隆了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']))
这两种代码都有效。问题是,对于同一个项目,我从githubapi得到287个提交,但从git.Repo得到的提交只有86个。当我尝试匹配这些提交时,只有不到40个提交匹配
问题:
1)为什么我对同一个项目有不同的承诺
2)哪一个是正确的,我应该使用
3)有没有一种方法可以让我知道使用Git.Repo的pull请求的提交是什么
4)有没有办法在GitHub API的两次提交之间提取修改过的类
5)有人知道一种更好的方法来提取每个pull请求的修改类吗
我知道这是一个很长的帖子,但我试图在这里具体。如果您能回答这些问题,我们将不胜感激
目前没有回答
相关问题 更多 >
编程相关推荐