2015-11-12 1 views
0

En utilisant la librairie LibGit2Sharp, j'essaye de lister tous les auteurs de requêtes de tirage sur la branche master d'un repo. Je ne vois rien dans les docs, intellisense, ou par la recherche qui a un exemple de ceci. Des pointeurs? J'ai construit le code ci-dessous, mais je reçois le message d'erreur suivant An unhandled exception of type 'LibGit2Sharp.RepositoryNotFoundException' occurred in LibGit2Sharp.dll. En parcourant, il semble que les références que je trouve sont des repos clonés locaux et non des dépôts distants.LIbGit2Sharp: liste tous les auteurs de la requête de tirage

static void Main(string[] args) 
    { 

     var co = new CloneOptions(); 
     co.CredentialsProvider = (_url, _user, _cred) => new UsernamePasswordCredentials 
     { 
      Username = "username", 
      Password = "password" 
     }; 

     var clonedRepoPath = Repository.Clone(url, "path/to/clone", co); 

     using (var repo = new Repository(clonedRepoPath)) 
     { 
      foreach (Commit commit in repo.Commits) 
      { 

       Console.WriteLine(commit.Author.Name); 

      } 
      Console.WriteLine("Press any key to continue..."); 
      Console.ReadLine(); 
     }   



    } 
} 

}

+1

Voir la réponse (balle un point) @ http://stackoverflow.com/questions/20185412/how-to-connect-to-a-github-repo-using-libgit2 – SushiHangover

+0

@RobertN Merci. J'ai édité ma question pour refléter la bonne solution. Je voudrais obtenir un diplôme et énumérer toutes les demandes de traction sur la branche principale d'un repo. Je ne vois rien dans les docs, intellisense, ou par la recherche qui a un exemple de ceci. Des pointeurs? Merci encore!! – DBS

Répondre

1

... Liste toutes les demandes de traction ......

Tout d'abord, « pull requests » sont une méthode de workflow DVCS, et ne sont pas une caractéristique de git. La plupart des gens par nature, et à tort, pense que c'est une partie de git. Github.com (et autres) ont un système de workflow pull request qui inclut des éléments tels qu'un git merge, une discussion de sujet, des crochets d'intégration continue (CI), un référencement de question, des permissions utilisateur, etc. avec SEULEMENT le git merge étant réellement du git DVCS.

Cela dit, dans un dépôt git, les demandes de traction Github de style sont des fusions entre deux commit-ishs (fusion habituellement de branche sujet à une branche maîtresse, mais ce n'est pas une exigence) et ainsi la « demande de tirage » engagement ont deux parents.

Pour votre information: Pour les fusions qui ont trois (+) les parents, voir ce answer

Pour en revenir à votre question:

liste

les auteurs de toutes les demandes de traction sur la branche principale d'un repo

Cette déclaration devient les git cmd suivantes:

git log master --merges --pretty=format:"%an %s" devient:

En traduisant que pour libgit2sharp:

 // find the master branch in the repo 
     var masterBranch = repo.Branches.Single (branch => branch.FriendlyName == "master"); 

     // Filter the branch's commits to ones that are merges 
     var mergeList = masterBranch.Commits.Where (p => p.Parents.Count() >= 2); 

     // Display the merge commits (pull requests) 
     foreach (Commit commit in mergeList) 
     { 
      Console.WriteLine("{0}\t{1}", commit.Author.Name, commit.MessageShort); 
     } 

Exemple de sortie d'un repo github qui utilise tirer les demandes:

João Matos  Merge pull request #1966 from angeloc/master 
Zoltan Varga Merge pull request #1965 from akoeplinger/fix-flaky-test 
João Matos  Merge pull request #1963 from angeloc/patch-1 
Rodrigo Kumpera Merge pull request #1912 from ludovic-henry/threadpool-managed-asyncresult 
Zoltan Varga Merge pull request #1959 from alexrp/master 
Zoltan Varga Merge pull request #1958 from rolfbjarne/aot-error-reporting 
Marek Safar  Merge pull request #1955 from LogosBible/servicepoint_nre 
... 

Mise à jour:

Based sur le commentaire, libgit2sharp ne va pas donner à l'utilisateur ce qu'ils veulent, vous devez utiliser l'API Github.

Utiliser Api Github via la bibliothèque Octokit (. Vous pouvez directement faire le Github REST appelle ou utiliser un autre lib), vous pouvez demander à toutes les demandes de traction ouvertes assez facilement:

public static async Task getPullRequests() 
{ 
    var client = new GitHubClient (new ProductHeaderValue ("PlayScript")); 
    // Login Credentials if you need them for an enterprise acct/repo 
    // client.Credentials = GithubHelper.Credentials; 
    var connection = new Connection (new ProductHeaderValue ("PlayScript")); 
    var api = new ApiConnection (connection); 
    var pullrequests = new PullRequestsClient (api); 
    pulls = await pullrequests.GetAllForRepository ("PlayScriptRedux", "playscript"); 
} 
.... 

Task.WaitAll(getPullRequests()); 
foreach (var pullrequest in pulls) { 
    Console.WriteLine (pullrequest.IssueUrl); 
} 

qui dresserait une liste d'une ouverture Tirez une requête pour mon repérage PlayScript sous l'organisation PlayScriptRedux, c'est-à-diresortie de la console:

https://api.github.com/repos/PlayScriptRedux/playscript/issues/89 
+0

@RobertN ... Merci encore. Nous utilisions une bibliothèque Python qui vous permet de renvoyer toutes les demandes de pull 'open' soumises à un repo et j'essaye de répliquer ce comportement car nous avons maintenant besoin d'utiliser libgit2hsarp/C#. Je cherche essentiellement un moyen d'extraire les informations situées ici, https://developer.github.com/v3/pulls/#list-pull-requests, puis de créer un rapport basé sur les valeurs clés retournées. – DBS

+0

Ahh ... libgit2sharp ne va pas vous aider, vous devez utiliser l'API Github. Puisque vous utilisez C# /. Net, Octokit est le plus populaire et listé par Github ... voir ma mise à jour. – SushiHangover

+0

@DBS En plus de cette réponse étonnante, vous pouvez également jeter un oeil à http://stackoverflow.com/a/31490829/335418 Cela montre comment récupérer localement les commits de PullRequests hébergé sur GitHub et tirer parti de l'information de récupération . – nulltoken