private SemanticVersion AggregateMergeCommitIncrement(ICommit commit, List<ICommit> directCommits, SemanticVersion mainlineVersion, IBranch mainline) { // Merge commit, process all merged commits as a batch var mergeCommit = commit; var mergedHead = GetMergedHead(mergeCommit); var findMergeBase = repositoryStore.FindMergeBase(mergeCommit.Parents.First(), mergedHead); var findMessageIncrement = FindMessageIncrement(mergeCommit, mergedHead, findMergeBase, directCommits); // If this collection is not empty there has been some direct commits against main // Treat each commit as it's own 'release', we need to do this before we increment the branch mainlineVersion = IncrementForEachCommit(directCommits, mainlineVersion, mainline); directCommits.Clear(); // Finally increment for the branch mainlineVersion = mainlineVersion.IncrementVersion(findMessageIncrement); log.Info($"Merge commit {mergeCommit} incremented base versions {findMessageIncrement}, now {mainlineVersion}"); return mainlineVersion; }
private IEnumerable <BaseVersion> GetReleaseVersion(GitVersionContext context, IBranch releaseBranch) { var tagPrefixRegex = context.Configuration.GitTagPrefix; // Find the commit where the child branch was created. var baseSource = repositoryStore.FindMergeBase(releaseBranch, context.CurrentBranch); if (Equals(baseSource, context.CurrentCommit)) { // Ignore the branch if it has no commits. return(new BaseVersion[0]); } return(releaseVersionStrategy .GetVersions(tagPrefixRegex, releaseBranch) .Select(b => new BaseVersion(b.Source, true, b.SemanticVersion, baseSource, b.BranchNameOverride))); }