public static Commit GetHeadOrDefault(string directory, ILogger log) { if (!GitCommand.TryRun("log --pretty=format:\"%H %P\"", directory, log, out var output)) { return(null); } var commits = new Dictionary <string, Commit>(); foreach (var shas in output .Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries) .Select(line => line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries))) { commits.GetOrAdd(shas[0], () => new Commit(shas[0])) .Parents.AddRange(shas.Skip(1).Select(parentSha => commits.GetOrAdd(parentSha, () => new Commit(parentSha)))); } return(commits.Values.FirstOrDefault()); }
public static bool IsWorkingDirectory(string directory, ILogger log) => GitCommand.TryRun("status --short", directory, log, out _);