2017-03-15 3 views
0

Ich baue eine GitHub-Anwendung, um Commit-Informationen aus unseren internen Repos zu ziehen. Ich verwende den folgenden Code alle Commits iterieren:Empfohlene Möglichkeit, alle Repos/Commits für einen bestimmten Benutzer mit github3.py aufzulisten

gh = login(token=gc.ACCESS_TOKEN) 
for repo in gh.iter_repos(): 
    for commit in repo.iter_commits(): 
     print(commit.__dict__) 
     print(commit.additions) 
     print(commit.author) 
     print(commit.commit) 
     print(commit.committer) 
     print(commit.deletions) 
     print(commit.files) 
     print(commit.total) 

Die Zugänge/Löschungen/Gesamtwerte alle kommen zurück als 0 sind, und die Dateien-Attribut ist immer []. Wenn ich auf die URL klicke, kann ich sehen, dass dies nicht der Fall ist. Ich habe über curl Aufrufe verifiziert, dass die API tatsächlich über diese Attribute verfügt.

Lesen Sie mehr in der Dokumentation, es scheint, dass iter_commits ist veraltet zugunsten iter_user_commits. Könnte das der Fall sein, warum es nicht alle Informationen über die Commits zurückgibt? Allerdings ist diese Methode keine Endlager für mich zurück, wenn ich es wie folgt verwendet werden:

gh = login(token=gc.ACCESS_TOKEN) 
user = gh.user() 
for repo in gh.iter_user_repos(user): 

Kurz gesagt, ich frage mich, was die empfohlene Methode, alle Commits für alle Repositorys zu bekommen, ist ein Benutzer Zugriff hat .

Antwort

1

Es ist nichts falsch mit iter_repos mit einer eingeloggten GitHub Instanz.

Kurz gesagt, was passiert (dies wird in der Dokumentation von github3.py beschrieben): Beim Auflisten einer Ressource aus der GitHub-API werden nicht alle Attribute tatsächlich zurückgegeben. Wenn Sie alle Informationen benötigen, müssen Sie die Informationen für jedes Commit anfordern. Kurz gesagt sollte Ihr Code wie folgt aussehen:

gh = login(token=gc.ACCESS_TOKEN) 
for repo in gh.iter_repos(): 
    for commit in repo.iter_commits(): 
     commit.refresh() 
     print(commit.additions) 
     print(commit.deletions) 
     # etc. 
+0

Ah, verpasste die 'refresh' Methode. Vielen Dank! – flybonzai

Verwandte Themen