/// <summary> /// Gets a value indicating whether a branch with name <paramref name="branch"/> (like 'master', 'dev') contains the commit with specified <paramref name="commitId"/>. /// Just like the <code>git branch --contains</code> it doesn't take possible reversions into account. /// </summary> public static Boolean BranchContains(this GitHttpClient git, String project, String repositoryId, String branch, String commitId) { var commitToFind = git.TryGetCommit(project: project, repositoryId: repositoryId, commitId: commitId); if (commitToFind == null) { return(false); } var committedDate = commitToFind.Committer.Date; // TODO: It will usually be the same as the author's, but I have failed to check what date TFS actually uses in date queries. var criteria = new GitQueryCommitsCriteria { ItemVersion = new GitVersionDescriptor { Version = branch, VersionType = GitVersionType.Branch }, FromDate = DateToString(committedDate.AddSeconds(-1)), // Zero length interval seems to work, but just in case ToDate = DateToString(committedDate.AddSeconds(1)), }; var commitIds = git .GetAllCommits( project: project, repositoryId: repositoryId, searchCriteria: criteria) .Select(c => c.CommitId) .ToHashSet(StringComparer.InvariantCultureIgnoreCase); return(commitIds.Contains(commitId)); }
/// <summary>Tries to retrieve git commit with specified <paramref name="commitId"/> for a project.</summary> public static GitCommitRef TryGetCommit(this GitHttpClient git, String project, String repositoryId, String commitId) { return(git .GetAllCommits( project: project, repositoryId: repositoryId, searchCriteria: new GitQueryCommitsCriteria { Ids = new List <String> { commitId } }) .SingleOrDefault()); }