private void MockupGitOutput(string output, string encodedUrl = DummyUrlEncoded) { var gitArguments = new GitArgumentBuilder("ls-remote") { "--heads", encodedUrl }; _gitExecutable.GetOutput(gitArguments).Returns(_ => output); }
public static string GetBatchOutput( this IExecutable executable, ICollection <BatchArgumentItem> batchArguments, byte[]?input = null, Encoding?outputEncoding = null, CommandCache?cache = null, bool stripAnsiEscapeCodes = true) { var sb = new StringBuilder(); foreach (var batch in batchArguments) { sb.Append(executable.GetOutput(batch.Argument, input, outputEncoding, cache, stripAnsiEscapeCodes)); } return(sb.ToString()); }
/// <summary> /// Returns the branches of a remote repository as strings; ignores git errors and warnings. /// </summary> /// 'git ls-remotes --heads "URL"' is completely independent from a local repo clone. /// Hence there is no need for a GitModule. /// <param name="gitExecutable">the git executable.</param> /// <param name="url">the repo URL; can also be a local path.</param> private static IEnumerable <string> LoadRemoteRepoBranches(IExecutable gitExecutable, string url) { if (string.IsNullOrWhiteSpace(url)) { return(Array.Empty <string>()); } var gitArguments = new GitArgumentBuilder("ls-remote") { "--heads", url.ToPosixPath().Quote() }; var heads = gitExecutable.GetOutput(gitArguments); return(heads.LazySplit('\n', StringSplitOptions.RemoveEmptyEntries) .Select(head => { int branchIndex = head.IndexOf(GitRefName.RefsHeadsPrefix); return branchIndex == -1 ? null : head.Substring(branchIndex + GitRefName.RefsHeadsPrefix.Length); }) .WhereNotNull() .ToImmutableList()); }