Как я могу получить последний коммит для папки, используя LibGit2Sharp? - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть большое количество проектов в одном репозитории.Я хочу определить изменчивость всех этих проектов, то есть когда в последний раз был зафиксирован коммит, который повлиял на каждый проект.У меня есть список всех путей проекта, и я пытаюсь найти последний коммит для каждого.Мой код выглядит следующим образом:

    public CommitInfo GetLastCommit(string path)
    {
        // resolve any \..\ and pathing weirdness
        path = Path.GetDirectoryName(Path.GetFullPath(path));

        var relativePath = path.Substring(BaseRepoPath.Length + 1).Replace("\\", "/");

        if (!CommitCache.TryGetValue(relativePath, out CommitInfo result))
        {
            var options = new RepositoryOptions()
            {
                WorkingDirectoryPath = BaseRepoPath
            };

            using (var repo = new Repository(BaseRepoPath, options))
            {
                var filter = new CommitFilter()
                {
                    IncludeReachableFrom = BranchName
                };

                var commit =  repo.Commits.QueryBy(relativePath, filter).First().Commit;

                result = new CommitInfo
                {
                    When = commit.Author.When.DateTime,
                    Who = commit.Author.Name,
                    Message = commit.Message,
                    Files = commit.Tree.Select(x => x.Name).ToList()
                };

                repo.Dispose();
            }

            CommitCache.Add(relativePath, result);
        }

        return result;
    }

Это работает , но строка, в которой фактически извлекается коммит:

var commit =  repo.Commits.QueryBy(relativePath, filter).First().Commit;

Может занять до восьми минут дополный.Насколько я могу судить, в этих папках нет ничего особенно сложного ... образец их показывает, может быть, двадцать коммитов.Я подозреваю, что делаю что-то не так, например, загружаю весь график репо, когда мне нужно что-то более конкретное, но я не смог придумать лучший способ.

Мысли?

1 Ответ

0 голосов
/ 13 декабря 2018

Ваше требование выдает следующую команду git через пакет lib2gitsharp.

$ git log -1 -C "lativePath "

Вы можете ограничить размер коммитов с помощьюс помощью расширения Take (numberOfCommits) в lib2gitsharp.Пожалуйста, попробуйте поставить Take (1) перед First (), как показано ниже:

var commit =  repo.Commits.QueryBy(relativePath, filter).Take(1).First().Commit;

Надеюсь, это поможет.

...