У меня есть большое количество проектов в одном репозитории.Я хочу определить изменчивость всех этих проектов, то есть когда в последний раз был зафиксирован коммит, который повлиял на каждый проект.У меня есть список всех путей проекта, и я пытаюсь найти последний коммит для каждого.Мой код выглядит следующим образом:
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;
Может занять до восьми минут дополный.Насколько я могу судить, в этих папках нет ничего особенно сложного ... образец их показывает, может быть, двадцать коммитов.Я подозреваю, что делаю что-то не так, например, загружаю весь график репо, когда мне нужно что-то более конкретное, но я не смог придумать лучший способ.
Мысли?