Skip to content

Commit 3beab1e

Browse files
committed
Insert option to considered the remote name when generating a semantic version on a remote branch.
1 parent e7f8903 commit 3beab1e

13 files changed

+70
-14
lines changed

docs/input/docs/reference/configuration.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ created. Modify this to suit your needs.
4040
The global configuration looks like this:
4141

4242
```yaml
43+
remote-name-in-git: origin
4344
assembly-versioning-scheme: MajorMinorPatch
4445
assembly-file-versioning-scheme: MajorMinorPatch
4546
label-prefix: '[vV]?'
@@ -160,7 +161,7 @@ ignore:
160161
sha: []
161162
mode: ContinuousDelivery
162163
label: '{BranchName}'
163-
increment: Inherit
164+
increment: Patch
164165
prevent-increment-of-merged-branch-version: false
165166
track-merge-target: false
166167
track-merge-message: true
@@ -173,6 +174,12 @@ is-mainline: false
173174
174175
The details of the available options are as follows:
175176
177+
### remote-name-in-git
178+
179+
The user can define the name of the remote (in moste cases it's `origin`) which
180+
will be considered when generating a semantic version on a remote branch. If the
181+
actual remote name doesn't match this pattern an error will be thrown.
182+
176183
### next-version
177184

178185
Allows you to bump the next version explicitly. Useful for bumping `main` or a

src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.CanWriteOutEffectiveConfiguration.approved.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
remote-name-in-git: origin
12
assembly-versioning-scheme: MajorMinorPatch
23
assembly-file-versioning-scheme: MajorMinorPatch
34
label-prefix: '[vV]?'

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ namespace GitVersion.Core.Tests.Helpers;
77
public class TestEffectiveConfiguration : EffectiveConfiguration
88
{
99
public TestEffectiveConfiguration(
10+
string remoteNameInGit = GitVersionConfiguration.DefaultRemoteNameInGit,
1011
AssemblyVersioningScheme assemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch,
1112
AssemblyFileVersioningScheme assemblyFileVersioningScheme = AssemblyFileVersioningScheme.MajorMinorPatch,
1213
string? assemblyVersioningFormat = null,
@@ -31,7 +32,8 @@ public TestEffectiveConfiguration(
3132
bool isMainline = false,
3233
string commitDateFormat = "yyyy-MM-dd",
3334
bool updateBuildNumber = false) :
34-
base(assemblyVersioningScheme,
35+
base(remoteNameInGit,
36+
assemblyVersioningScheme,
3537
assemblyFileVersioningScheme,
3638
assemblyInformationalFormat,
3739
assemblyVersioningFormat,

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,26 @@ public void TakesVersionFromNameOfBranchThatIsReleaseByConfig()
3838
fixture.AssertFullSemver("2.0.0+1", configuration);
3939
}
4040

41-
[Test]
42-
public void TakesVersionFromNameOfRemoteReleaseBranchInOrigin()
41+
[TestCase("origin")]
42+
[TestCase("upstream")]
43+
public void TakesVersionFromNameOfRemoteReleaseBranchInOrigin(string remoteNameInGit)
4344
{
45+
var configuration = GitFlowConfigurationBuilder.New
46+
.WithRemoteNameInGit(remoteNameInGit)
47+
.Build();
48+
4449
using var fixture = new RemoteRepositoryFixture();
50+
if (remoteNameInGit != "origin")
51+
{
52+
fixture.LocalRepositoryFixture.Repository.Network.Remotes.Rename("origin", remoteNameInGit);
53+
}
4554
fixture.BranchTo("release/2.0.0");
4655
fixture.MakeACommit();
4756
Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new FetchOptions(), null);
4857

49-
fixture.LocalRepositoryFixture.Checkout("origin/release/2.0.0");
58+
fixture.LocalRepositoryFixture.Checkout($"{remoteNameInGit}/release/2.0.0");
5059

51-
fixture.LocalRepositoryFixture.AssertFullSemver("2.0.0-beta.1+1");
60+
fixture.LocalRepositoryFixture.AssertFullSemver("2.0.0-beta.1+1", configuration);
5261
}
5362

5463
[Test]
@@ -61,7 +70,8 @@ public void DoesNotTakeVersionFromNameOfRemoteReleaseBranchInCustomRemote()
6170
Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty<string>(), new FetchOptions(), null);
6271

6372
fixture.LocalRepositoryFixture.Checkout("upstream/release/2.0.0");
73+
Action action = () => fixture.LocalRepositoryFixture.GetVersion();
6474

65-
fixture.LocalRepositoryFixture.AssertFullSemver("0.0.0-beta.1+6"); // This test fails with 2.0.0-beta.1+1
75+
action.ShouldThrow<InvalidOperationException>();
6676
}
6777
}

src/GitVersion.Core.Tests/VersionConverters/AssemblyInfoFileUpdaterTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ private void VerifyAssemblyInfoFile(
442442
this.fileSystem.ReadAllText(fileName).Returns(assemblyFileContent);
443443
});
444444

445-
var configuration = new TestEffectiveConfiguration(versioningScheme);
445+
var configuration = new TestEffectiveConfiguration(assemblyVersioningScheme: versioningScheme);
446446
var variables = this.variableProvider.GetVariablesFor(version, configuration, false);
447447

448448
verify?.Invoke(this.fileSystem, variables);

src/GitVersion.Core.Tests/VersionConverters/ProjectFileUpdaterTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ private void VerifyAssemblyInfoFile(
300300
this.fileSystem.ReadAllText(fileName).Returns(projectFileContent);
301301
});
302302

303-
var configuration = new TestEffectiveConfiguration(versioningScheme);
303+
var configuration = new TestEffectiveConfiguration(assemblyVersioningScheme: versioningScheme);
304304
var variables = this.variableProvider.GetVariablesFor(version, configuration, false);
305305

306306
verify?.Invoke(this.fileSystem, variables);

src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ namespace GitVersion.Configuration;
66
internal abstract class ConfigurationBuilderBase<TConfigurationBuilder>
77
where TConfigurationBuilder : ConfigurationBuilderBase<TConfigurationBuilder>
88
{
9+
private string? remoteNameInGit;
910
private AssemblyVersioningScheme? assemblyVersioningScheme;
1011
private AssemblyFileVersioningScheme? assemblyFileVersioningScheme;
1112
private string? assemblyInformationalFormat;
@@ -49,6 +50,13 @@ protected ConfigurationBuilderBase()
4950
}
5051
}
5152

53+
public virtual TConfigurationBuilder WithRemoteNameInGit(string? value)
54+
{
55+
this.remoteNameInGit = value;
56+
return (TConfigurationBuilder)this;
57+
}
58+
59+
5260
public virtual TConfigurationBuilder WithAssemblyVersioningScheme(AssemblyVersioningScheme? value)
5361
{
5462
this.assemblyVersioningScheme = value;
@@ -276,6 +284,7 @@ public virtual TConfigurationBuilder WithPreReleaseWeight(int? value)
276284

277285
public virtual TConfigurationBuilder WithConfiguration(GitVersionConfiguration value)
278286
{
287+
WithRemoteNameInGit(value.RemoteNameInGit);
279288
WithAssemblyVersioningScheme(value.AssemblyVersioningScheme);
280289
WithAssemblyFileVersioningScheme(value.AssemblyFileVersioningScheme);
281290
WithAssemblyInformationalFormat(value.AssemblyInformationalFormat);
@@ -328,6 +337,7 @@ public virtual GitVersionConfiguration Build()
328337
{
329338
GitVersionConfiguration configuration = new()
330339
{
340+
RemoteNameInGit = this.remoteNameInGit,
331341
AssemblyVersioningScheme = this.assemblyVersioningScheme,
332342
AssemblyFileVersioningScheme = this.assemblyFileVersioningScheme,
333343
AssemblyInformationalFormat = this.assemblyInformationalFormat,

src/GitVersion.Core/Configuration/EffectiveConfiguration.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public EffectiveConfiguration(GitVersionConfiguration configuration, BranchConfi
3737
if (!configuration.LabelPreReleaseWeight.HasValue)
3838
throw new Exception("Configuration value for 'LabelPreReleaseWeight' has no value. (this should not happen, please report an issue)");
3939

40+
RemoteNameInGit = configuration.RemoteNameInGit;
4041
AssemblyVersioningScheme = configuration.AssemblyVersioningScheme.Value;
4142
AssemblyFileVersioningScheme = configuration.AssemblyFileVersioningScheme.Value;
4243
AssemblyInformationalFormat = configuration.AssemblyInformationalFormat;
@@ -68,7 +69,8 @@ public EffectiveConfiguration(GitVersionConfiguration configuration, BranchConfi
6869
LabelPreReleaseWeight = configuration.LabelPreReleaseWeight.Value;
6970
}
7071

71-
protected EffectiveConfiguration(AssemblyVersioningScheme assemblyVersioningScheme,
72+
protected EffectiveConfiguration(string remoteNameInGit,
73+
AssemblyVersioningScheme assemblyVersioningScheme,
7274
AssemblyFileVersioningScheme assemblyFileVersioningScheme,
7375
string? assemblyInformationalFormat,
7476
string? assemblyVersioningFormat,
@@ -97,6 +99,7 @@ protected EffectiveConfiguration(AssemblyVersioningScheme assemblyVersioningSche
9799
int preReleaseWeight,
98100
int labelPreReleaseWeight)
99101
{
102+
RemoteNameInGit = remoteNameInGit;
100103
AssemblyVersioningScheme = assemblyVersioningScheme;
101104
AssemblyFileVersioningScheme = assemblyFileVersioningScheme;
102105
AssemblyInformationalFormat = assemblyInformationalFormat;
@@ -127,6 +130,7 @@ protected EffectiveConfiguration(AssemblyVersioningScheme assemblyVersioningSche
127130
LabelPreReleaseWeight = labelPreReleaseWeight;
128131
}
129132

133+
public string? RemoteNameInGit { get; }
130134
public bool TracksReleaseBranches { get; }
131135
public bool IsReleaseBranch { get; }
132136
public bool IsMainline { get; }

src/GitVersion.Core/Configuration/GitFlowConfigurationBuilder.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ private GitFlowConfigurationBuilder()
1111
{
1212
WithConfiguration(new()
1313
{
14+
RemoteNameInGit = GitVersionConfiguration.DefaultRemoteNameInGit,
1415
AssemblyFileVersioningScheme = AssemblyFileVersioningScheme.MajorMinorPatch,
1516
AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch,
1617
CommitDateFormat = "yyyy-MM-dd",

src/GitVersion.Core/Configuration/GitHubFlowConfigurationBuilder.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ private GitHubFlowConfigurationBuilder()
1111
{
1212
WithConfiguration(new()
1313
{
14+
RemoteNameInGit = GitVersionConfiguration.DefaultRemoteNameInGit,
1415
AssemblyFileVersioningScheme = AssemblyFileVersioningScheme.MajorMinorPatch,
1516
AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch,
1617
CommitDateFormat = "yyyy-MM-dd",

0 commit comments

Comments
 (0)