Libgit2sharp Повторять коммит от самого нового до самого старого

Я хочу перебрать все ревизии репозитория. Я хочу избежать сначала прочитать все коммиты в оперативной памяти, а затем итерировать затем

В настоящее время у меня есть этот метод

   foreach (LibGit2Sharp.Commit commit in repo.Commits)
   {
        return Transform(commit);
   }

Я знаю, что я мог сделать это:

foreach (LibGit2Sharp.Commit commit in repo.Commits.OrderByDescending(i=>i.Committer.When))

но тогда он читает все коммиты, затем linq переупорядочивает их потом.

Разве нет способа позволить libgit2sharp выполнять итерацию в порядке убывания?

1 ответ

Решение

Вы можете создать коммит Filter и использовать его для сортировки коммитов по:

  • Reverse
  • Time
  • Topological

Пример:

var repo = new LibGit2Sharp.Repository("/Users/sushi/code/sushi/Xamarin.PlayScript.Starling");
var filter = new CommitFilter()
{
    SortBy = CommitSortStrategies.Reverse 
};
IEnumerable<Commit> commits = repo.Commits.QueryBy(filter);
foreach (var commit in commits)
{
    Console.WriteLine(commit.Committer.When);
}
Другие вопросы по тегам