2017-08-09 61 views
0

我有一類GitHub的一個方法,它應該返回所有的名單將提交對特定的用戶名和回購在GitHub上:如何獲得文件的列表,每有octokit和C#提交

using System; 
using Octokit; 
using System.Threading.Tasks; 
using System.Collections.Generic; 

namespace ReadRepo 
{ 
    public class GitHub 
    { 
     public GitHub() 
     { 
     } 

     public async Task<List<GitHubCommit>> getAllCommits() 
     {    
      string username = "lukalopusina"; 
      string repo = "flask-microservices-main"; 

      var github = new GitHubClient(new ProductHeaderValue("MyAmazingApp")); 
      var repository = await github.Repository.Get(username, repo); 
      var commits = await github.Repository.Commit.GetAll(repository.Id); 

      List<GitHubCommit> commitList = new List<GitHubCommit>(); 

      foreach(GitHubCommit commit in commits) { 
       commitList.Add(commit); 
      } 

      return commitList; 
     } 

    } 
} 

而且我有主其中呼籲getAllCommits方法函數:

using System; 
using Octokit; 
using System.Threading.Tasks; 
using System.Collections.Generic; 

namespace ReadRepo 
{ 
    class MainClass 
    { 

     public static void Main(string[] args) 
     {    

      GitHub github = new GitHub(); 

      Task<List<GitHubCommit>> commits = github.getAllCommits(); 
      commits.Wait(10000); 

      foreach(GitHubCommit commit in commits.Result) {     
       foreach (GitHubCommitFile file in commit.Files) 
        Console.WriteLine(file.Filename);  
      } 

     } 
    } 
} 

當我運行此我得到以下錯誤:

enter image description here

問題是因爲這個變量commit.Files是空的,可能是因爲異步調用,但我不知道如何解決它。請幫忙嗎?

回答

1

我的猜測是,如果你需要得到的文件列表供您將需要得到每個單獨的提交使用

foreach(GitHubCommit commit in commits) 
{ 
    var commitDetails = github.Repository.Commit.Get(commit.Sha); 
    var files = commitDetails.Files; 
} 

看看this所有提交。還有另外一種方法可以實現你的目標 - 首先獲取存儲庫中所有文件的列表,然後獲取每個文件的提交列表。

+0

爲了獲得每次提交需要的文件以執行一次更多查詢,您是對的,而且您認爲更好的策略是獲取文件列表,然後爲每個文件配置所有版本。謝謝。 –

+0

我還編輯了您的代碼示例與我測試的工作示例。 –

相關問題