private SemanticVersion AggregateMergeCommitIncrement(Commit commit, List <Commit> directCommits, SemanticVersion mainlineVersion, Branch mainline)
        {
            // Merge commit, process all merged commits as a batch
            var mergeCommit          = commit;
            var mergedHead           = GetMergedHead(mergeCommit);
            var findMergeBase        = repositoryMetadataProvider.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 master
            // 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.Sha} incremented base versions {findMessageIncrement}, now {mainlineVersion}");
            return(mainlineVersion);
        }
Exemple #2
0
        private IEnumerable <BaseVersion> GetReleaseVersion(GitVersionContext context, Branch releaseBranch)
        {
            var tagPrefixRegex = context.Configuration.GitTagPrefix;

            // Find the commit where the child branch was created.
            var baseSource = repositoryMetadataProvider.FindMergeBase(releaseBranch, context.CurrentBranch);

            if (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)));
        }