我正在开发一个使用一些Github信息的Web服务。我需要获取一个通过提交更改的文件列表。我找到了list of libraries。我尝试了所有3个Java库和github3.py
。所有这些库都返回一个提交信息,其中包含受影响文件的empy列表(或Java库的null
)。获取受影响文件列表的代码非常简单,所以我不知道它为什么会发生。
from github3 import login, repository
repo = repository('sigmavirus24', 'github3.py')
commits = repo.iter_commits()
for commit in commits:
print len(commit.files) #prints 0
UPD:如何获取特定提交更改的文件列表?
答案 0 :(得分:1)
当迭代资源(在这种情况下提交)时,GitHub API通常返回可用于该资源的一个实例的信息的子集。使用您的代码,让我们尝试一下
from github3 import repository
commits = repository('sigmavirus24', 'github3.py').iter_commits()
c = next(commits)
print(len(c.files)) # => 0
print(c.refresh()) # => <Repository Commit [0eec5f6]>
print(len(c.files)) # => 1
print(c.files)
# [{u'status': u'modified', u'deletions': 0, ... }]
github3.py提供了(在大多数对象上)refresh
方法,该方法将从API获取特定实例的完整数据。遗憾的是,这会产生比您想象的更多的API调用。一些人的常见模式是
r = repository('sigmavirus24', 'github3.py')
cs = r.iter_commits(50) # Limit it to 50 commits
commits = [c.refresh() for c in cs]
在这种情况下,您正在进行51次API调用,1次用于前50次提交的列表,50次用于从API获取每次提交的所有数据。
我不确定Java包装器是否提供任何类似功能