Skip to content

Commit c7e1ca9

Browse files
authored
Merge pull request #3415 from HHobeck/feature/3337_tracks-release-branches_wont-track_remote_release_branches
tracks-release-branches won't track remote release branches without regex mod
2 parents 126cb5c + 7ccd4ac commit c7e1ca9

27 files changed

+261
-147
lines changed

src/GitVersion.App.Tests/PullRequestInBuildAgentTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ private static async Task VerifyPullRequestVersionIsCalculatedProperly(string pu
163163
remoteRepository.Refs.Add(pullRequestRef, new ObjectId(mergeCommitSha));
164164

165165
// Checkout PR commit
166-
Commands.Fetch((Repository)fixture.Repository, "origin", Array.Empty<string>(), new FetchOptions(), null);
166+
Commands.Fetch(fixture.Repository, "origin", Array.Empty<string>(), new FetchOptions(), null);
167167
Commands.Checkout(fixture.Repository, mergeCommitSha);
168168
}
169169

@@ -199,7 +199,7 @@ public void VerifyPullRequestInput(string pullRequestRef, string friendly, bool
199199
var refName = new ReferenceName(pullRequestRef);
200200

201201
Assert.AreEqual(friendly, refName.Friendly);
202-
Assert.AreEqual(isBranch, refName.IsBranch);
202+
Assert.AreEqual(isBranch, refName.IsLocalBranch);
203203
Assert.AreEqual(isPullRequest, refName.IsPullRequest);
204204
Assert.AreEqual(isRemote, refName.IsRemoteBranch);
205205
}

src/GitVersion.App.Tests/TagCheckoutInBuildAgentTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ private static async Task VerifyTagCheckoutVersionIsCalculatedProperly(Dictionar
5151
remoteRepository.MergeNoFF("release/0.2.0", Generate.SignatureNow());
5252
remoteRepository.MakeATaggedCommit("0.2.0");
5353

54-
Commands.Fetch((Repository)fixture.Repository, "origin", Array.Empty<string>(), new FetchOptions(), null);
54+
Commands.Fetch(fixture.Repository, "origin", Array.Empty<string>(), new FetchOptions(), null);
5555
Commands.Checkout(fixture.Repository, "0.2.0");
5656
}
5757

src/GitVersion.Core.Tests/Configuration/ConfigurationExtensionsTests.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,37 @@ public void GetReleaseBranchConfigReturnsAllReleaseBranches()
2424
result.Count.ShouldBe(2);
2525
result.ShouldNotContain(b => b.Key == "foo");
2626
}
27+
28+
[TestCase("release/2.0.0",
29+
"refs/heads/release/2.0.0", "release/2.0.0", "release/2.0.0",
30+
true, false, false, false, true)]
31+
[TestCase("upstream/release/2.0.0",
32+
"refs/heads/upstream/release/2.0.0", "upstream/release/2.0.0", "upstream/release/2.0.0",
33+
true, false, false, false, false)]
34+
[TestCase("origin/release/2.0.0",
35+
"refs/heads/origin/release/2.0.0", "origin/release/2.0.0", "origin/release/2.0.0",
36+
true, false, false, false, false)]
37+
[TestCase("refs/remotes/upstream/release/2.0.0",
38+
"refs/remotes/upstream/release/2.0.0", "upstream/release/2.0.0", "upstream/release/2.0.0",
39+
false, false, true, false, false)]
40+
[TestCase("refs/remotes/origin/release/2.0.0",
41+
"refs/remotes/origin/release/2.0.0", "origin/release/2.0.0", "release/2.0.0",
42+
false, false, true, false, true)]
43+
public void EnsureIsReleaseBranchWithReferenceNameWorksAsExpected(string branchName, string expectedCanonical, string expectedFriendly, string expectedWithoutRemote,
44+
bool expectedIsLocalBranch, bool expectedIsPullRequest, bool expectedIsRemoteBranch, bool expectedIsTag, bool expectedIsReleaseBranch)
45+
{
46+
var configuration = GitFlowConfigurationBuilder.New.Build();
47+
48+
var actual = ReferenceName.FromBranchName(branchName);
49+
var isReleaseBranch = configuration.IsReleaseBranch(actual);
50+
51+
actual.Canonical.ShouldBe(expectedCanonical);
52+
actual.Friendly.ShouldBe(expectedFriendly);
53+
actual.WithoutRemote.ShouldBe(expectedWithoutRemote);
54+
actual.IsLocalBranch.ShouldBe(expectedIsLocalBranch);
55+
actual.IsPullRequest.ShouldBe(expectedIsPullRequest);
56+
actual.IsRemoteBranch.ShouldBe(expectedIsRemoteBranch);
57+
actual.IsTag.ShouldBe(expectedIsTag);
58+
isReleaseBranch.ShouldBe(expectedIsReleaseBranch);
59+
}
2760
}

src/GitVersion.Core.Tests/Core/RepositoryStoreTests.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,9 +225,12 @@ public void FindCommitBranchWasBranchedFromShouldReturnNullIfTheRemoteIsTheOnlyS
225225

226226
var branch = localRepository.FindBranch("main");
227227
branch.ShouldNotBeNull();
228-
var branchedCommit = gitRepoMetadataProvider.FindCommitBranchWasBranchedFrom(branch, new GitVersionConfiguration(), Array.Empty<IBranch>());
229228

230-
Assert.IsNull(branchedCommit.Branch);
231-
Assert.IsNull(branchedCommit.Commit);
229+
var configuration = GitFlowConfigurationBuilder.New.Build();
230+
var branchedCommit = gitRepoMetadataProvider.FindCommitBranchWasBranchedFrom(branch, configuration, Array.Empty<IBranch>());
231+
branchedCommit.ShouldBe(BranchCommit.Empty);
232+
233+
var branchedCommits = gitRepoMetadataProvider.FindCommitBranchesWasBranchedFrom(branch, configuration).ToArray();
234+
branchedCommits.ShouldBeEmpty();
232235
}
233236
}

src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ public static IBranch CreateMockBranch(string name, params ICommit[] commits)
4545
return branch;
4646
}
4747

48-
public static IBranch FindBranch(this IGitRepository repository, string branchName) => repository.Branches.First(x => x.Name.WithoutRemote == branchName) ?? throw new GitVersionException($"Branch {branchName} not found");
48+
public static IBranch FindBranch(this IGitRepository repository, string branchName)
49+
=> repository.Branches.FirstOrDefault(branch => branch.Name.WithoutRemote == branchName)
50+
?? throw new GitVersionException($"Branch {branchName} not found");
4951

5052
public static void DumpGraph(this IGitRepository repository, Action<string>? writer = null, int? maxCommits = null) => GitExtensions.DumpGraph(repository.Path, writer, maxCommits);
5153

src/GitVersion.Core.Tests/Helpers/TestBase.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@ protected static IServiceProvider ConfigureServices(Action<IServiceCollection>?
1818
return services.BuildServiceProvider();
1919
}
2020

21-
protected static IServiceProvider BuildServiceProvider(string workingDirectory, IGitRepository repository, string branch, IReadOnlyDictionary<object, object?>? configuration = null)
21+
protected static IServiceProvider BuildServiceProvider(IGitRepository repository,
22+
string? targetBranch = null, IReadOnlyDictionary<object, object?>? configuration = null)
2223
{
2324
var options = Options.Create(new GitVersionOptions
2425
{
25-
WorkingDirectory = workingDirectory,
26+
WorkingDirectory = repository.Path,
2627
ConfigurationInfo = { OverrideConfiguration = configuration },
27-
RepositoryInfo = { TargetBranch = branch }
28+
RepositoryInfo = { TargetBranch = targetBranch }
2829
});
2930

3031
var sp = ConfigureServices(services =>

src/GitVersion.Core.Tests/IntegrationTests/OtherScenarios.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public void DoNotBlowUpWhenMainAndDevelopPointAtSameCommit()
2121
fixture.MakeACommit();
2222
fixture.Repository.CreateBranch("develop");
2323

24-
Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new FetchOptions(), null);
24+
Commands.Fetch(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new FetchOptions(), null);
2525
Commands.Checkout(fixture.LocalRepositoryFixture.Repository, fixture.Repository.Head.Tip);
2626
fixture.LocalRepositoryFixture.Repository.Branches.Remove(MainBranch);
2727
fixture.InitializeRepo();
@@ -87,7 +87,7 @@ public void DoNotBlowUpWhenDevelopAndFeatureBranchPointAtSameCommit()
8787
fixture.MakeACommit();
8888
fixture.Repository.CreateBranch("feature/someFeature");
8989

90-
Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new FetchOptions(), null);
90+
Commands.Fetch(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new FetchOptions(), null);
9191
Commands.Checkout(fixture.LocalRepositoryFixture.Repository, fixture.Repository.Head.Tip);
9292
fixture.LocalRepositoryFixture.Repository.Branches.Remove(MainBranch);
9393
fixture.InitializeRepo();

src/GitVersion.Core.Tests/IntegrationTests/RemoteRepositoryScenarios.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public void GivenARemoteGitRepositoryAheadOfLocalRepositoryThenChangesShouldPull
7979
fixture.AssertFullSemver("0.0.1+6");
8080
fixture.AssertFullSemver("0.0.1+5", repository: fixture.LocalRepositoryFixture.Repository);
8181
var buildSignature = fixture.LocalRepositoryFixture.Repository.Config.BuildSignature(new DateTimeOffset(DateTime.Now));
82-
Commands.Pull((Repository)fixture.LocalRepositoryFixture.Repository, buildSignature, new PullOptions());
82+
Commands.Pull(fixture.LocalRepositoryFixture.Repository, buildSignature, new PullOptions());
8383
fixture.AssertFullSemver("0.0.1+6", repository: fixture.LocalRepositoryFixture.Repository);
8484
}
8585

@@ -135,4 +135,22 @@ private static void CopyRemoteBranchesToHeads(IRepository repository)
135135
}
136136
}
137137
}
138+
139+
[TestCase("origin", "release-2.0.0", "2.1.0-alpha.0")]
140+
[TestCase("custom", "release-2.0.0", "0.1.0-alpha.5")]
141+
[TestCase("origin", "release/3.0.0", "3.1.0-alpha.0")]
142+
[TestCase("custom", "release/3.0.0", "0.1.0-alpha.5")]
143+
public void EnsureRemoteReleaseBranchesAreTracked(string origin, string branchName, string expectedVersion)
144+
{
145+
using var fixture = new RemoteRepositoryFixture("develop");
146+
147+
fixture.CreateBranch(branchName);
148+
fixture.MakeACommit();
149+
150+
if (origin != "origin") fixture.LocalRepositoryFixture.Repository.Network.Remotes.Rename("origin", origin);
151+
fixture.LocalRepositoryFixture.Fetch(origin);
152+
fixture.LocalRepositoryFixture.Checkout("develop");
153+
154+
fixture.LocalRepositoryFixture.AssertFullSemver(expectedVersion);
155+
}
138156
}

src/GitVersion.Core.Tests/IntegrationTests/VersionInCurrentBranchNameScenarios.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,24 +44,24 @@ public void TakesVersionFromNameOfRemoteReleaseBranchInOrigin()
4444
using var fixture = new RemoteRepositoryFixture();
4545
fixture.BranchTo("release/2.0.0");
4646
fixture.MakeACommit();
47-
Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new FetchOptions(), null);
47+
Commands.Fetch(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new FetchOptions(), null);
4848

4949
fixture.LocalRepositoryFixture.Checkout("origin/release/2.0.0");
5050

5151
fixture.LocalRepositoryFixture.AssertFullSemver("2.0.0-beta.1+1");
5252
}
5353

5454
[Test]
55-
public void TakesVersionFromNameOfRemoteReleaseBranchInCustom()
55+
public void DoesNotTakeVersionFromNameOfRemoteReleaseBranchInCustomRemote()
5656
{
5757
using var fixture = new RemoteRepositoryFixture();
5858
fixture.LocalRepositoryFixture.Repository.Network.Remotes.Rename("origin", "upstream");
5959
fixture.BranchTo("release/2.0.0");
6060
fixture.MakeACommit();
61-
Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new FetchOptions(), null);
61+
Commands.Fetch(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new FetchOptions(), null);
6262

6363
fixture.LocalRepositoryFixture.Checkout("upstream/release/2.0.0");
6464

65-
fixture.LocalRepositoryFixture.AssertFullSemver("2.0.0-beta.1+1");
65+
fixture.LocalRepositoryFixture.AssertFullSemver("0.0.1-upstream-release-2-0-0.1+6");
6666
}
6767
}

src/GitVersion.Core.Tests/IntegrationTests/VersionInMergedBranchNameScenarios.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void TakesVersionFromNameOfRemoteReleaseBranchInOrigin()
4545
using var fixture = new RemoteRepositoryFixture();
4646
fixture.BranchTo("release/2.0.0");
4747
fixture.MakeACommit();
48-
Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new FetchOptions(), null);
48+
Commands.Fetch(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new FetchOptions(), null);
4949

5050
fixture.LocalRepositoryFixture.MergeNoFF("origin/release/2.0.0");
5151

@@ -59,7 +59,7 @@ public void DoesNotTakeVersionFromNameOfRemoteReleaseBranchInCustomRemote()
5959
fixture.LocalRepositoryFixture.Repository.Network.Remotes.Rename("origin", "upstream");
6060
fixture.BranchTo("release/2.0.0");
6161
fixture.MakeACommit();
62-
Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new FetchOptions(), null);
62+
fixture.LocalRepositoryFixture.Fetch("upstream");
6363

6464
fixture.LocalRepositoryFixture.MergeNoFF("upstream/release/2.0.0");
6565

0 commit comments

Comments
 (0)