2017-08-09 6 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メソッドを呼び出す機能:

enter image description here

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);  
      } 

     } 
    } 
} 

私は、私は次のエラーを取得し、これを実行すると、

問題は、この変数commit.Filesが非同期呼び出しのためおそらくNullですが、解決方法がわかりません。助けてください?あなたは、それぞれがthisを見てみましょう

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

を使用して個別にコミット取得する必要がありますすべてのコミットのためのファイルのリストを取得する必要がある場合

答えて

1

私の推測ではあります。あなたの目標に到達するための別のアプローチを記述しました。まず、リポジトリ内のすべてのファイルのリストを取得し、各ファイルのコミットのリストを取得します。

+0

もう1つのクエリを実行するたびに必要なファイルを取得するには正しいですが、すべてのファイルをリストアしてすべてのバージョンを取得する方が良い方法です。ありがとう。 –

+0

また、テストした実際の例でコード例を編集しました。 –

関連する問題