2015-11-12 6 views
0

Используя библиотеку LibGit2Sharp, я пытаюсь перечислить всех авторов запросов на тягу на главной ветке репо. Я ничего не вижу в документах, intellisense или через поиск, который имеет пример этого. Любые указатели? Я построил код ниже, но я получаю следующее сообщение об ошибке An unhandled exception of type 'LibGit2Sharp.RepositoryNotFoundException' occurred in LibGit2Sharp.dll. Просмотр вокруг, кажется, что ссылки, которые я нахожу, это локальные клонированные репозитории, а не удаленные репозитории.LIbGit2Sharp: список всех авторов запроса на вытягивание

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

Смотрите ответ (пуля пункт один) @ HTTP://stackoverflow.com/questions/20185412/how-to-connect-to-a-github-repo-using-libgit2 – SushiHangover

+0

@RobertN Спасибо. Я отредактировал свой вопрос, чтобы отразить правильное решение. Я хотел бы получить высшее образование и перечислить все запросы на тягу на главной ветке репо. Я ничего не вижу в документах, intellisense или через поиск, который имеет пример этого. Любые указатели? Еще раз спасибо!! – DBS

ответ

1

... список всех запросов тянуть ......

Прежде всего, «pull requests» представляют собой метод рабочего процесса DVCS, и не являются особенность git. Большинство людей по существу, и неправильно, думаю, что это часть git. Github.com (и другие) имеют систему рабочего процесса pull request, которая включает в себя такие элементы, как git merge, обсуждение темы, непрерывная интеграция (CI), пересылка ссылок, пользовательские разрешения и т. Д. С ТОЛЬКО git merge на самом деле от git DVCS.

Тем не менее, в хранилище Git, выдвижные запросы Github стиле и слияния между двумя commit-ishs (обычно слияние с темы филиала на мастер-отрасли, но это не является обязательным требованием) и таким образом «запроса тянуть» на обязательство иметь двух родителей.

FYI: Для слияний, которые имеют три (+) родителей, посмотреть answer

Итак, вернемся к вашему вопросу:

список авторов всех отрывных запросов на главной ветви Сделки рЕПО

Это утверждение становится следующим git ЦМД:

git log master --merges --pretty=format:"%an %s" становится:

При переводе, что 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); 
     } 

Пример вывода из GitHub репо, который использует тянуть запросы:

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 
... 

Update:

Based на комментарий, libgit2sharp не даст пользователю то, что он хочет, вам нужно использовать Github api.

Использование GitHub Апи через библиотеку Octokit (. Вы можете непосредственно сделать Github REST вызовы или использовать другую библиотеку), вы можете запросить все открытые запросы тянуть довольно легко:

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

Этот список будет один открытый вытащить запрос для моего playcript-репо в организации PlayScriptRedux, т.е.консольный вывод:

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

@RobertN ... Еще раз спасибо. Мы использовали библиотеку Python, которая позволяет вам возвращать все запросы 'open' pull, отправленные на репо, и я пытаюсь реплицировать это поведение, поскольку теперь у нас есть требование использовать libgit2hsarp/C#. Я в основном ищу способ найти информацию, расположенную здесь, https://developer.github.com/v3/pulls/#list-pull-requests, а затем создать отчет на основе возвращаемых значений ключа. – DBS

+0

Ahh ... libgit2sharp не поможет вам, вам нужно будет использовать Github api. Поскольку вы используете C# /. Net, Octokit является самым популярным и перечисляется Github ... см. Мой обновленный ответ. – SushiHangover

+0

@DBS Помимо этого удивительного ответа, вы также можете взглянуть на http://stackoverflow.com/a/31490829/335418 Это демонстрирует, как локально извлекать коммиты из PullRequests, размещенных на GitHub, и использовать информацию о получении , – nulltoken