From 4a556540a2284f68c481b0c896e19bd9d82dee51 Mon Sep 17 00:00:00 2001 From: Hardy Hobeck Date: Mon, 6 Mar 2023 07:41:03 +0100 Subject: [PATCH] Fix no minor version detected on pull request that contains organization name --- .../ConfigurationExtensionsTests.cs | 4 +- .../Extensions/GitToolsTestingExtensions.cs | 2 +- .../MergeMessageTests.cs | 67 ++++++++++--------- .../MergeMessageBaseVersionStrategyTests.cs | 6 +- .../Configuration/ConfigurationExtensions.cs | 10 ++- .../Core/MainlineBranchFinder.cs | 2 +- src/GitVersion.Core/Core/MergeCommitFinder.cs | 2 +- src/GitVersion.Core/Core/RepositoryStore.cs | 4 +- .../Core/SourceBranchFinder.cs | 2 +- src/GitVersion.Core/Git/ReferenceName.cs | 14 ++-- src/GitVersion.Core/MergeMessage.cs | 23 ++++--- src/GitVersion.Core/PublicAPI.Unshipped.txt | 9 ++- .../MergeMessageVersionStrategy.cs | 2 +- .../VersionInBranchNameVersionStrategy.cs | 2 +- .../MainlineVersionCalculator.cs | 11 +-- 15 files changed, 87 insertions(+), 73 deletions(-) diff --git a/src/GitVersion.Core.Tests/Configuration/ConfigurationExtensionsTests.cs b/src/GitVersion.Core.Tests/Configuration/ConfigurationExtensionsTests.cs index e2d8d3f519..453e999a8b 100644 --- a/src/GitVersion.Core.Tests/Configuration/ConfigurationExtensionsTests.cs +++ b/src/GitVersion.Core.Tests/Configuration/ConfigurationExtensionsTests.cs @@ -40,7 +40,7 @@ public void GetReleaseBranchConfigReturnsAllReleaseBranches() [TestCase("refs/remotes/origin/release/2.0.0", "refs/remotes/origin/release/2.0.0", "origin/release/2.0.0", "release/2.0.0", false, false, true, false, true)] - public void EnsureIsReleaseBranchWithReferenceNameWorksAsExpected(string branchName, string expectedCanonical, string expectedFriendly, string expectedWithoutRemote, + public void EnsureIsReleaseBranchWithReferenceNameWorksAsExpected(string branchName, string expectedCanonical, string expectedFriendly, string expectedWithoutOrigin, bool expectedIsLocalBranch, bool expectedIsPullRequest, bool expectedIsRemoteBranch, bool expectedIsTag, bool expectedIsReleaseBranch) { var configuration = GitFlowConfigurationBuilder.New.Build(); @@ -50,7 +50,7 @@ public void EnsureIsReleaseBranchWithReferenceNameWorksAsExpected(string branchN actual.Canonical.ShouldBe(expectedCanonical); actual.Friendly.ShouldBe(expectedFriendly); - actual.WithoutRemote.ShouldBe(expectedWithoutRemote); + actual.WithoutOrigin.ShouldBe(expectedWithoutOrigin); actual.IsLocalBranch.ShouldBe(expectedIsLocalBranch); actual.IsPullRequest.ShouldBe(expectedIsPullRequest); actual.IsRemoteBranch.ShouldBe(expectedIsRemoteBranch); diff --git a/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs b/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs index a0748dbfea..633e95ac74 100644 --- a/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs +++ b/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs @@ -46,7 +46,7 @@ public static IBranch CreateMockBranch(string name, params ICommit[] commits) } public static IBranch FindBranch(this IGitRepository repository, string branchName) - => repository.Branches.FirstOrDefault(branch => branch.Name.WithoutRemote == branchName) + => repository.Branches.FirstOrDefault(branch => branch.Name.WithoutOrigin == branchName) ?? throw new GitVersionException($"Branch {branchName} not found"); public static void DumpGraph(this IGitRepository repository, Action? writer = null, int? maxCommits = null) => GitExtensions.DumpGraph(repository.Path, writer, maxCommits); diff --git a/src/GitVersion.Core.Tests/MergeMessageTests.cs b/src/GitVersion.Core.Tests/MergeMessageTests.cs index 77ab6326f6..87d6f2ff31 100644 --- a/src/GitVersion.Core.Tests/MergeMessageTests.cs +++ b/src/GitVersion.Core.Tests/MergeMessageTests.cs @@ -11,7 +11,7 @@ public class MergeMessageTests : TestBase [Test] public void NullMessageStringThrows() => // Act / Assert - Should.Throw(() => new MergeMessage(null, this.configuration)); + Should.Throw(() => new MergeMessage(null!, this.configuration)); [TestCase("")] [TestCase("\t\t ")] @@ -22,7 +22,7 @@ public void EmptyMessageString(string message) // Assert sut.TargetBranch.ShouldBeNull(); - sut.MergedBranch.ShouldBeEmpty(); + sut.MergedBranch.ShouldBeNull(); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBeNull(); @@ -42,7 +42,7 @@ public void EmptyTagPrefix(string prefix) // Assert sut.TargetBranch.ShouldBeNull(); - sut.MergedBranch.ShouldBeEmpty(); + sut.MergedBranch.ShouldBeNull(); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBeNull(); @@ -72,7 +72,8 @@ public void ParsesMergeMessage( // Assert sut.FormatName.ShouldBe("Default"); sut.TargetBranch.ShouldBe(expectedTargetBranch); - sut.MergedBranch.ShouldBe(expectedMergedBranch); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(expectedMergedBranch); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBe(expectedVersion); @@ -80,13 +81,11 @@ public void ParsesMergeMessage( private static readonly object?[] GitHubPullPullMergeMessages = { - new object?[] { "Merge pull request #1234 from feature/one", "feature/one", null, null, 1234 }, - new object?[] { "Merge pull request #1234 in feature/one", "feature/one", null, null, 1234 }, + new object?[] { "Merge pull request #1234 from organization/feature/one", "feature/one", null, null, 1234 }, + new object?[] { "Merge pull request #1234 in organization/feature/one", "feature/one", null, null, 1234 }, new object?[] { "Merge pull request #1234 in v4.0.0", "v4.0.0", null, new SemanticVersion(4), 1234 }, - new object?[] { "Merge pull request #1234 from origin/feature/one", "origin/feature/one", null, null, 1234 }, - new object?[] { "Merge pull request #1234 in feature/4.1.0/one", "feature/4.1.0/one", null, new SemanticVersion(4,1), 1234 }, - new object?[] { "Merge pull request #1234 in V://10.10.10.10", "V://10.10.10.10", null, null, 1234 }, - new object?[] { "Merge pull request #1234 from feature/one into dev", "feature/one", "dev", null, 1234 } + new object?[] { "Merge pull request #1234 in organization/feature/4.1.0/one", "feature/4.1.0/one", null, new SemanticVersion(4,1), 1234 }, + new object?[] { "Merge pull request #1234 from organization/feature/one into dev", "feature/one", "dev", null, 1234 } }; [TestCaseSource(nameof(GitHubPullPullMergeMessages))] @@ -103,7 +102,8 @@ public void ParsesGitHubPullMergeMessage( // Assert sut.FormatName.ShouldBe("GitHubPull"); sut.TargetBranch.ShouldBe(expectedTargetBranch); - sut.MergedBranch.ShouldBe(expectedMergedBranch); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(expectedMergedBranch); sut.IsMergedPullRequest.ShouldBeTrue(); sut.PullRequestNumber.ShouldBe(expectedPullRequestNumber); sut.Version.ShouldBe(expectedVersion); @@ -137,7 +137,8 @@ public void ParsesBitBucketPullMergeMessage( // Assert sut.FormatName.ShouldBe("BitBucketPull"); sut.TargetBranch.ShouldBe(expectedTargetBranch); - sut.MergedBranch.ShouldBe(expectedMergedBranch); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(expectedMergedBranch); sut.IsMergedPullRequest.ShouldBeTrue(); sut.PullRequestNumber.ShouldBe(expectedPullRequestNumber); sut.Version.ShouldBe(expectedVersion); @@ -166,7 +167,8 @@ public void ParsesBitBucketPullMergeMessage_v7( // Assert sut.FormatName.ShouldBe("BitBucketPullv7"); sut.TargetBranch.ShouldBe(expectedTargetBranch); - sut.MergedBranch.ShouldBe(expectedMergedBranch); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(expectedMergedBranch); sut.IsMergedPullRequest.ShouldBeTrue(); sut.PullRequestNumber.ShouldBe(expectedPullRequestNumber); sut.Version.ShouldBe(expectedVersion); @@ -196,7 +198,8 @@ public void ParsesSmartGitMergeMessage( // Assert sut.FormatName.ShouldBe("SmartGit"); sut.TargetBranch.ShouldBe(expectedTargetBranch); - sut.MergedBranch.ShouldBe(expectedMergedBranch); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(expectedMergedBranch); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBe(expectedVersion); @@ -226,7 +229,8 @@ public void ParsesRemoteTrackingMergeMessage( // Assert sut.FormatName.ShouldBe("RemoteTracking"); sut.TargetBranch.ShouldBe(expectedTargetBranch); - sut.MergedBranch.ShouldBe(expectedMergedBranch); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(expectedMergedBranch); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBe(expectedVersion); @@ -234,29 +238,24 @@ public void ParsesRemoteTrackingMergeMessage( private static readonly object?[] InvalidMergeMessages = { - new object?[] { "Merge pull request # from feature/one", "", null, null, null }, - new object?[] { $"Merge pull request # in feature/one from feature/two to {MainBranch}" , "", null, null, null }, - new object?[] { $"Zusammengeführter PR : feature/one mit {MainBranch} mergen", "", null, null, null } + new object?[] { "Merge pull request # from feature/one" }, + new object?[] { $"Merge pull request # in feature/one from feature/two to {MainBranch}" }, + new object?[] { $"Zusammengeführter PR : feature/one mit {MainBranch} mergen" } }; [TestCaseSource(nameof(InvalidMergeMessages))] - public void ParsesInvalidMergeMessage( - string message, - string expectedMergedBranch, - string expectedTargetBranch, - SemanticVersion expectedVersion, - int? expectedPullRequestNumber) + public void ParsesInvalidMergeMessage(string message) { // Act var sut = new MergeMessage(message, this.configuration); // Assert sut.FormatName.ShouldBeNull(); - sut.TargetBranch.ShouldBe(expectedTargetBranch); - sut.MergedBranch.ShouldBe(expectedMergedBranch); + sut.TargetBranch.ShouldBeNull(); + sut.MergedBranch.ShouldBeNull(); sut.IsMergedPullRequest.ShouldBeFalse(); - sut.PullRequestNumber.ShouldBe(expectedPullRequestNumber); - sut.Version.ShouldBe(expectedVersion); + sut.PullRequestNumber.ShouldBeNull(); + sut.Version.ShouldBeNull(); } [Test] @@ -276,7 +275,8 @@ public void MatchesSingleCustomMessage() // Assert sut.FormatName.ShouldBe(definition); sut.TargetBranch.ShouldBeNull(); - sut.MergedBranch.ShouldBeEmpty(); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBeEmpty(); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBeNull(); @@ -301,7 +301,8 @@ public void MatchesMultipleCustomMessages() // Assert sut.FormatName.ShouldBe(definition); sut.TargetBranch.ShouldBeNull(); - sut.MergedBranch.ShouldBeEmpty(); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBeEmpty(); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBeNull(); @@ -327,7 +328,8 @@ public void MatchesCaptureGroupsFromCustomMessages() // Assert sut.FormatName.ShouldBe(definition); sut.TargetBranch.ShouldBe(target); - sut.MergedBranch.ShouldBe(source); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(source); sut.IsMergedPullRequest.ShouldBeTrue(); sut.PullRequestNumber.ShouldBe(pr); sut.Version.ShouldBe(new SemanticVersion(2)); @@ -352,7 +354,8 @@ public void ReturnsAfterFirstMatchingPattern() // Assert sut.FormatName.ShouldBe(definition); sut.TargetBranch.ShouldBeNull(); - sut.MergedBranch.ShouldBe("this"); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe("this"); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBeNull(); diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs index 9fc2cb4a30..3daeee88c6 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs @@ -104,9 +104,9 @@ public void ShouldNotTakeVersionFromMergeOfNonReleaseBranch(string message, bool AssertMergeMessage(message + "\n ", null, parents); } - [TestCase("Merge pull request #165 from Particular/release-1.0.0", true)] - [TestCase("Merge pull request #165 in Particular/release-1.0.0", true)] - [TestCase("Merge pull request #500 in FOO/bar from Particular/release-1.0.0 to develop)", true)] + [TestCase("Merge pull request #165 from organization/Particular/release-1.0.0", true)] + [TestCase("Merge pull request #165 in organization/Particular/release-1.0.0", true)] + [TestCase("Merge pull request #500 in FOO/bar from organization/Particular/release-1.0.0 to develop)", true)] public void ShouldNotTakeVersionFromMergeOfReleaseBranchWithRemoteOtherThanOrigin(string message, bool isMergeCommit) { var parents = GetParents(isMergeCommit); diff --git a/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs b/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs index 6d34762799..dbabd6ecf2 100644 --- a/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs +++ b/src/GitVersion.Core/Configuration/ConfigurationExtensions.cs @@ -20,8 +20,14 @@ public static BranchConfiguration GetBranchConfiguration(this GitVersionConfigur public static BranchConfiguration GetBranchConfiguration(this GitVersionConfiguration configuration, ReferenceName branchName) { - var branchConfiguration = GetBranchConfigurations(configuration, branchName.WithoutRemote).FirstOrDefault(); - branchConfiguration ??= new() { Name = branchName.WithoutRemote, Regex = string.Empty, Label = ConfigurationConstants.BranchNamePlaceholder, Increment = IncrementStrategy.Inherit }; + var branchConfiguration = GetBranchConfigurations(configuration, branchName.WithoutOrigin).FirstOrDefault(); + branchConfiguration ??= new() + { + Name = branchName.WithoutOrigin, + Regex = string.Empty, + Label = ConfigurationConstants.BranchNamePlaceholder, + Increment = IncrementStrategy.Inherit + }; return branchConfiguration; } diff --git a/src/GitVersion.Core/Core/MainlineBranchFinder.cs b/src/GitVersion.Core/Core/MainlineBranchFinder.cs index 1b1ad3a835..778638d9f7 100644 --- a/src/GitVersion.Core/Core/MainlineBranchFinder.cs +++ b/src/GitVersion.Core/Core/MainlineBranchFinder.cs @@ -60,7 +60,7 @@ public bool IsMainline(BranchConfiguration value) return false; var mainlineRegex = value.Regex; - var branchName = this.branch.Name.WithoutRemote; + var branchName = this.branch.Name.WithoutOrigin; var match = Regex.IsMatch(branchName, mainlineRegex); this.log.Info($"'{mainlineRegex}' {(match ? "matches" : "does not match")} '{branchName}'."); return match; diff --git a/src/GitVersion.Core/Core/MergeCommitFinder.cs b/src/GitVersion.Core/Core/MergeCommitFinder.cs index 555541fa8e..d67043bd89 100644 --- a/src/GitVersion.Core/Core/MergeCommitFinder.cs +++ b/src/GitVersion.Core/Core/MergeCommitFinder.cs @@ -36,7 +36,7 @@ public IEnumerable FindMergeCommitsFor(IBranch branch) this.mergeBaseCommitsCache.Add(branch, branchMergeBases); - return branchMergeBases.Where(b => !branch.Name.EquivalentTo(b.Branch.Name.WithoutRemote)); + return branchMergeBases.Where(b => !branch.Name.EquivalentTo(b.Branch.Name.WithoutOrigin)); } private IEnumerable FindMergeBases(IBranch branch) diff --git a/src/GitVersion.Core/Core/RepositoryStore.cs b/src/GitVersion.Core/Core/RepositoryStore.cs index 25e6b3b6db..867d9d8071 100644 --- a/src/GitVersion.Core/Core/RepositoryStore.cs +++ b/src/GitVersion.Core/Core/RepositoryStore.cs @@ -113,7 +113,7 @@ public IBranch GetTargetBranch(string? targetBranchName) } return this.repository.Branches.FirstOrDefault(b => - Regex.IsMatch(b.Name.WithoutRemote, mainBranchRegex, RegexOptions.IgnoreCase)); + Regex.IsMatch(b.Name.WithoutOrigin, mainBranchRegex, RegexOptions.IgnoreCase)); } public IEnumerable FindMainlineBranches(GitVersionConfiguration configuration) @@ -134,7 +134,7 @@ public IEnumerable GetReleaseBranches(IEnumerable this.repository.Branches.Where(b => IsReleaseBranch(b, releaseBranchConfig)); private static bool IsReleaseBranch(INamedReference branch, IEnumerable> releaseBranchConfig) - => releaseBranchConfig.Any(c => c.Value.Regex != null && Regex.IsMatch(branch.Name.WithoutRemote, c.Value.Regex)); + => releaseBranchConfig.Any(c => c.Value.Regex != null && Regex.IsMatch(branch.Name.WithoutOrigin, c.Value.Regex)); public IEnumerable ExcludingBranches(IEnumerable branchesToExclude) => this.repository.Branches.ExcludeBranches(branchesToExclude); diff --git a/src/GitVersion.Core/Core/SourceBranchFinder.cs b/src/GitVersion.Core/Core/SourceBranchFinder.cs index 99adf8ecf1..7073299851 100644 --- a/src/GitVersion.Core/Core/SourceBranchFinder.cs +++ b/src/GitVersion.Core/Core/SourceBranchFinder.cs @@ -37,7 +37,7 @@ public bool IsSourceBranch(INamedReference sourceBranchCandidate) if (Equals(sourceBranchCandidate, this.branch)) return false; - var branchName = sourceBranchCandidate.Name.WithoutRemote; + var branchName = sourceBranchCandidate.Name.WithoutOrigin; return this.sourceBranchRegexes.Any(regex => Regex.IsMatch(branchName, regex)); } diff --git a/src/GitVersion.Core/Git/ReferenceName.cs b/src/GitVersion.Core/Git/ReferenceName.cs index 353d752d94..3f600f6b43 100644 --- a/src/GitVersion.Core/Git/ReferenceName.cs +++ b/src/GitVersion.Core/Git/ReferenceName.cs @@ -12,7 +12,7 @@ public class ReferenceName : IEquatable, IComparable Canonical.Equals(name, StringComparison.OrdinalIgnoreCase) || Friendly.Equals(name, StringComparison.OrdinalIgnoreCase) - || WithoutRemote.Equals(name, StringComparison.OrdinalIgnoreCase); + || WithoutOrigin.Equals(name, StringComparison.OrdinalIgnoreCase); private string Shorten() { @@ -95,11 +95,11 @@ private string Shorten() return Canonical; } - private string RemoveRemote() + private string RemoveOrigin() { - if (IsRemoteBranch && !IsPullRequest && Friendly.StartsWith(RemotePrefix, StringComparison.Ordinal)) + if (IsRemoteBranch && !IsPullRequest && Friendly.StartsWith(OriginPrefix, StringComparison.Ordinal)) { - return Friendly[RemotePrefix.Length..]; + return Friendly[OriginPrefix.Length..]; } return Friendly; } diff --git a/src/GitVersion.Core/MergeMessage.cs b/src/GitVersion.Core/MergeMessage.cs index 9a3f26dc61..b84b0fd84b 100644 --- a/src/GitVersion.Core/MergeMessage.cs +++ b/src/GitVersion.Core/MergeMessage.cs @@ -1,5 +1,6 @@ using System.Text.RegularExpressions; using GitVersion.Configuration; +using GitVersion.Extensions; namespace GitVersion; @@ -11,14 +12,15 @@ public class MergeMessage new("SmartGit", @"^Finish (?[^\s]*)(?: into (?[^\s]*))*"), new("BitBucketPull", @"^Merge pull request #(?\d+) (from|in) (?.*) from (?[^\s]*) to (?[^\s]*)"), new("BitBucketPullv7", @"^Pull request #(?\d+).*\r?\n\r?\nMerge in (?.*) from (?[^\s]*) to (?[^\s]*)"), - new("GitHubPull", @"^Merge pull request #(?\d+) (from|in) (?:(?[^\s]*))(?: into (?[^\s]*))*"), + new("GitHubPull", @"^Merge pull request #(?\d+) (from|in) (?:[^\s\/]+\/)?(?[^\s]*)(?: into (?[^\s]*))*"), new("RemoteTracking", @"^Merge remote-tracking branch '(?[^\s]*)'(?: into (?[^\s]*))*") }; - public MergeMessage(string? mergeMessage, GitVersionConfiguration configuration) + public MergeMessage(string mergeMessage, GitVersionConfiguration configuration) { - if (mergeMessage == null) - throw new NullReferenceException(); + mergeMessage.NotNull(); + + if (mergeMessage == string.Empty) return; // Concatenate configuration formats with the defaults. // Ensure configurations are processed first. @@ -33,7 +35,8 @@ public MergeMessage(string? mergeMessage, GitVersionConfiguration configuration) continue; FormatName = format.Name; - MergedBranch = match.Groups["SourceBranch"].Value; + var sourceBranch = match.Groups["SourceBranch"].Value; + MergedBranch = GetMergedBranchName(sourceBranch); if (match.Groups["TargetBranch"].Success) { @@ -53,17 +56,18 @@ public MergeMessage(string? mergeMessage, GitVersionConfiguration configuration) public string? FormatName { get; } public string? TargetBranch { get; } - public string MergedBranch { get; } = ""; + public ReferenceName? MergedBranch { get; } + public bool IsMergedPullRequest => PullRequestNumber != null; public int? PullRequestNumber { get; } public SemanticVersion? Version { get; } private SemanticVersion? ParseVersion(string? tagPrefix, SemanticVersionFormat versionFormat) { - if (tagPrefix is null) + if (tagPrefix is null || MergedBranch is null) return null; // Remove remotes and branch prefixes like release/ feature/ hotfix/ etc - var toMatch = Regex.Replace(MergedBranch, @"^(\w+[-/])*", "", RegexOptions.IgnoreCase); + var toMatch = Regex.Replace(MergedBranch.WithoutOrigin, @"^(\w+[-/])*", "", RegexOptions.IgnoreCase); toMatch = Regex.Replace(toMatch, $"^{tagPrefix}", ""); // We don't match if the version is likely an ip (i.e starts with http://) var versionMatch = new Regex(@"^(? GitVersion.Logging.Verbosity GitVersion.Logging.Verbosity.Verbose = 3 -> GitVersion.Logging.Verbosity GitVersion.MergeMessage GitVersion.MergeMessage.FormatName.get -> string? -GitVersion.MergeMessage.GetMergedBranchName() -> GitVersion.ReferenceName! GitVersion.MergeMessage.IsMergedPullRequest.get -> bool -GitVersion.MergeMessage.MergeMessage(string? mergeMessage, GitVersion.Configuration.GitVersionConfiguration! configuration) -> void -GitVersion.MergeMessage.MergedBranch.get -> string! +GitVersion.MergeMessage.MergeMessage(string! mergeMessage, GitVersion.Configuration.GitVersionConfiguration! configuration) -> void +GitVersion.MergeMessage.MergedBranch.get -> GitVersion.ReferenceName? GitVersion.MergeMessage.PullRequestNumber.get -> int? GitVersion.MergeMessage.TargetBranch.get -> string? GitVersion.MergeMessage.Version.get -> GitVersion.SemanticVersion? @@ -722,7 +721,7 @@ GitVersion.ReferenceName.IsPullRequest.get -> bool GitVersion.ReferenceName.IsRemoteBranch.get -> bool GitVersion.ReferenceName.IsTag.get -> bool GitVersion.ReferenceName.ReferenceName(string! canonical) -> void -GitVersion.ReferenceName.WithoutRemote.get -> string! +GitVersion.ReferenceName.WithoutOrigin.get -> string! GitVersion.RepositoryInfo GitVersion.RepositoryInfo.ClonePath -> string? GitVersion.RepositoryInfo.CommitId -> string? @@ -980,7 +979,7 @@ const GitVersion.Configuration.ConfigurationConstants.UnknownBranchRegex = ".*" const GitVersion.Configuration.ConfigurationFileLocator.DefaultAlternativeFileName = "GitVersion.yaml" -> string! const GitVersion.Configuration.ConfigurationFileLocator.DefaultFileName = "GitVersion.yml" -> string! const GitVersion.ReferenceName.LocalBranchPrefix = "refs/heads/" -> string! -const GitVersion.ReferenceName.RemotePrefix = "origin/" -> string! +const GitVersion.ReferenceName.OriginPrefix = "origin/" -> string! const GitVersion.ReferenceName.RemoteTrackingBranchPrefix = "refs/remotes/" -> string! const GitVersion.ReferenceName.TagPrefix = "refs/tags/" -> string! const GitVersion.VersionCalculation.IncrementStrategyFinder.DefaultMajorPattern = "\\+semver:\\s?(breaking|major)" -> string! diff --git a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/MergeMessageVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/MergeMessageVersionStrategy.cs index de980119f2..5c91568e19 100644 --- a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/MergeMessageVersionStrategy.cs +++ b/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/MergeMessageVersionStrategy.cs @@ -32,7 +32,7 @@ public override IEnumerable GetBaseVersions(EffectiveBranchConfigur .SelectMany(c => { if (TryParse(c, Context, out var mergeMessage) && mergeMessage.Version != null - && Context.Configuration.IsReleaseBranch(mergeMessage.GetMergedBranchName())) + && Context.Configuration.IsReleaseBranch(mergeMessage.MergedBranch!)) { this.log.Info($"Found commit [{Context.CurrentCommit}] matching merge message format: {mergeMessage.FormatName}"); var shouldIncrement = !configuration.Value.PreventIncrementOfMergedBranchVersion; diff --git a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionInBranchNameVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionInBranchNameVersionStrategy.cs index 86eb4f12a7..8013d1dd95 100644 --- a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionInBranchNameVersionStrategy.cs +++ b/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionInBranchNameVersionStrategy.cs @@ -36,7 +36,7 @@ public override IEnumerable GetBaseVersions(EffectiveBranchConfigur private static Tuple? GetVersionInBranch( ReferenceName branchName, string? tagPrefixRegex, SemanticVersionFormat versionFormat) { - var branchParts = branchName.WithoutRemote.Split('/', '-'); + var branchParts = branchName.WithoutOrigin.Split('/', '-'); foreach (var part in branchParts) { if (SemanticVersion.TryParse(part, tagPrefixRegex, out var semanticVersion, versionFormat)) diff --git a/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs index 9de837a605..ac94f12e50 100644 --- a/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs +++ b/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs @@ -297,11 +297,14 @@ private VersionField TryFindIncrementFromMergeMessage(ICommit? mergeCommit) if (mergeCommit != null) { var mergeMessage = new MergeMessage(mergeCommit.Message, Context.Configuration); - var branchName = mergeMessage.GetMergedBranchName(); - var configuration = Context.Configuration.GetBranchConfiguration(branchName); - if (configuration.Increment != IncrementStrategy.Inherit) + var branchName = mergeMessage.MergedBranch; + if (branchName != null) { - return configuration.Increment.ToVersionField(); + var configuration = Context.Configuration.GetBranchConfiguration(branchName); + if (configuration.Increment != IncrementStrategy.Inherit) + { + return configuration.Increment.ToVersionField(); + } } }