【问题标题】:github3.py. Empty list of commited filesgithub3.py。已提交文件的空列表
【发布时间】:2014-09-13 01:15:07
【问题描述】:

我正在开发一个使用一些 Github 信息的网络服务。我需要获取随着提交而更改的文件列表。我找到了list of libraries。我尝试了所有 3 个 Java 库和 github3.py。所有这些库都会返回一个提交信息,其中包含受影响文件的空列表(或 null 用于 Java 库)。获取受影响文件列表的代码非常简单,所以我不知道为什么会这样。

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:如何获取特定提交更改的文件列表?

【问题讨论】:

  • 那么你的问题到底是什么?
  • @MattDMo 对不起。更新

标签: python github github-api github3.py


【解决方案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 包装器是否提供任何类似的功能

【讨论】:

    猜你喜欢
    • 2019-06-28
    • 1970-01-01
    • 2015-12-27
    • 2019-06-24
    • 2014-05-06
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多