Используйте Octokit, чтобы перечислить все коммиты во всех репозиториях на Github, используя Asp. net Core Razor - PullRequest
0 голосов
/ 14 февраля 2020

Я хочу показать все коммиты из своего профиля Github, мне удалось вывести список репо и коммитов одного репо, но не могу сделать это для всех.

Ошибка msg Ниже приведено мой код:

    public IReadOnlyList<Repository> Repositories { get; set; }

    public IReadOnlyList<GitHubCommit> Commits = new List<GitHubCommit>();

    public async Task OnGetAsync()
    {
        if (User.Identity.IsAuthenticated)
        {
            GitHubName = User.FindFirst(c => c.Type == ClaimTypes.Name)?.Value;
            GitHubLogin = User.FindFirst(c => c.Type == "urn:github:login")?.Value;
            GitHubUrl = User.FindFirst(c => c.Type == "urn:github:url")?.Value;
            GitHubAvatar = User.FindFirst(c => c.Type == "urn:github:avatar")?.Value;

            string accessToken = await HttpContext.GetTokenAsync("access_token");

            var github = new GitHubClient(new ProductHeaderValue("CommitView"), new InMemoryCredentialStore(new Credentials(accessToken)));

            Repositories = await github.Repository.GetAllForCurrent();

            foreach (var reppo in Repositories)
            {

                var repoCommits = await github.Repository.Commit.GetAll(reppo.Id);
                Commits.Append(repoCommits);

            }


        }
    }

1 Ответ

0 голосов
/ 15 февраля 2020

ctOctokit. net сопровождающий здесь.

IReadOnlyList<T>, возвращаемый от каждого основанного на коллекции API в Octokit. net - это интерфейс, который мы используем. NET Framework, который мы используем сигнализировать, что ответ, возвращаемый из API GitHub, не является изменяемым, и в нем отсутствуют изменяемые API, такие как Add или Append, поэтому ваш пример не компилируется.

В частности, именно эта строка :

public IReadOnlyList<GitHubCommit> Commits = new List<GitHubCommit>();

IReadOnlyList<T> можно перечислить, как и другие типы коллекций, поэтому самый быстрый способ получить пример работы - использовать вместо этого API List<T>, которые поддерживают добавление диапазона элементов:

public List<Repository> Repositories { get; set; }
public List<GitHubCommit> Commits = new List<GitHubCommit>();

public async Task OnGetAsync()
{
  if (User.Identity.IsAuthenticated)
  {
    GitHubName = User.FindFirst(c => c.Type == ClaimTypes.Name)?.Value;
    GitHubLogin = User.FindFirst(c => c.Type == "urn:github:login")?.Value;
    GitHubUrl = User.FindFirst(c => c.Type == "urn:github:url")?.Value;
    GitHubAvatar = User.FindFirst(c => c.Type == "urn:github:avatar")?.Value;

    string accessToken = await HttpContext.GetTokenAsync("access_token");

    var github = new GitHubClient(new ProductHeaderValue("CommitView"), new InMemoryCredentialStore(new Credentials(accessToken)));

    var repositories = await github.Repository.GetAllForCurrent();
    Repositories = new List<Repository>(repositories);

    foreach (var repo in Repositories)
    {
      var repoCommits = await github.Repository.Commit.GetAll(repo.Id);
      Commits.AddRange(repoCommits);
    }
  }
}
...