private async Task <string> ExtractLogParameter(GitBranch branch, int skip, int limit, GitLogOptions logOptions, string revisionRange, CancellationToken token) { StringBuilder arguments = new StringBuilder(); arguments.Append($"{revisionRange} "); if (branch != null) { arguments.Append($"--branches={branch.FriendlyName} "); } if (skip > 0) { arguments.Append($" --skip={skip}"); } if (limit > 0) { arguments.Append($" --max-count={limit}"); } arguments.Append(" --full-history"); if (logOptions.HasFlag(GitLogOptions.TopologicalOrder)) { arguments.Append(" --topo-order"); } if (!logOptions.HasFlag(GitLogOptions.IncludeMerges)) { arguments.Append(" --no-merges --first-parent"); } GenerateFormat(arguments); if (logOptions.HasFlag(GitLogOptions.BranchOnlyAndParent)) { StringBuilder ignoreBranches = new StringBuilder("--not "); var branches = await this.GetLocalBranches(token); foreach (var testBranch in branches) { if (testBranch != branch) { ignoreBranches.Append($"{testBranch.FriendlyName} "); } } arguments.Append($" {ignoreBranches} -- "); } return(arguments.ToString()); }
/// <inheritdoc /> public async Task <IList <GitCommit> > GetCommitsForBranch(GitBranch branch, int skip, int limit, GitLogOptions logOptions, CancellationToken token) { string arguments = await this.ExtractLogParameter(branch, skip, limit, logOptions, "HEAD", token); var result = await this.gitProcessManager.RunGit("log " + arguments, token); if (result.Success == false) { return(new List <GitCommit>()); } string[] lines = result.ProcessOutput.Trim('\r', '\n').Split(new[] { '\u001e' }, StringSplitOptions.RemoveEmptyEntries); IList <GitCommit> results = ConvertStringToGitCommits(lines).ToList(); if (logOptions.HasFlag(GitLogOptions.BranchOnlyAndParent) && results.Last().Parents.Any()) { await this.GetSingleCommitLog(token, results); } return(results); }
/// <inheritdoc /> public async Task <GitBranch> GetRemoteBranch(GitBranch branch, CancellationToken token) { if (branch.IsRemote) { return(branch); } var result = await this.gitProcessManager.RunGit("branch -lvv", token); if (result.Success == false) { return(null); } string[] lines = result.ProcessOutput.ToArrayOfLines(); foreach (string line in lines) { var matches = Regex.Matches(line, @"^[* ][* ]([a-ZA-Z0-9/]*)[ ]*[a-zA-Z0-9]+ \[([a-zA-Z0-9/]*)\]"); if (matches.Count != 2) { continue; } var branchName = matches[0].Value; if (branchName.Equals(branch.FriendlyName, StringComparison.InvariantCultureIgnoreCase) == false) { continue; } return(new GitBranch(matches[1].Value, true)); } return(null); }