Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion global.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"sdk": {
"version": "7.0.103"
"version": "7.0.200"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ semantic-version-format: Strict
branches: {}
ignore:
sha: []
increment: None
Original file line number Diff line number Diff line change
Expand Up @@ -443,11 +443,11 @@ public void VerifyIncrementConfigIsHonoured()
.WithIncrement(IncrementStrategy.Minor)
.WithBranch("main", builder => builder
.WithVersioningMode(VersioningMode.Mainline)
.WithIncrement(null)
.WithIncrement(IncrementStrategy.Inherit)
)
.WithBranch("feature", builder => builder
.WithVersioningMode(VersioningMode.Mainline)
.WithIncrement(null)
.WithIncrement(IncrementStrategy.Inherit)
)
.Build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public void TakesVersionFromNameOfRemoteReleaseBranchInOrigin()
}

[Test]
public void DoesNotTakeVersionFromNameOfRemoteReleaseBranchInCustomRemote()
public void TakesVersionFromNameOfRemoteReleaseBranchInCustom()
{
using var fixture = new RemoteRepositoryFixture();
fixture.LocalRepositoryFixture.Repository.Network.Remotes.Rename("origin", "upstream");
Expand All @@ -62,6 +62,6 @@ public void DoesNotTakeVersionFromNameOfRemoteReleaseBranchInCustomRemote()

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

fixture.LocalRepositoryFixture.AssertFullSemver("0.0.0-beta.1+6");
fixture.LocalRepositoryFixture.AssertFullSemver("2.0.0-beta.1+1");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -200,28 +200,7 @@ public void UsesFirstBranchConfigWhenMultipleMatch(string branchName, IncrementS
}

[Test]
public void When_getting_configurations_of_an_orphaned_branch_Given_fallback_configuaration_without_increment_Then_result_should_be_empty()
{
// Arrange
var branchMock = GitToolsTestingExtensions.CreateMockBranch("develop", GitToolsTestingExtensions.CreateMockCommit());
var configuration = GitFlowConfigurationBuilder.New
.WithIncrement(null)
.WithBranch("develop", builder => builder.WithIncrement(IncrementStrategy.Inherit))
.Build();
var repositoryStoreMock = Substitute.For<IRepositoryStore>();
repositoryStoreMock.GetSourceBranches(branchMock, configuration, Arg.Any<HashSet<IBranch>>()).Returns(Enumerable.Empty<IBranch>());

var unitUnderTest = new EffectiveBranchConfigurationFinder(Substitute.For<ILog>(), repositoryStoreMock);

// Act
var actual = unitUnderTest.GetConfigurations(branchMock, configuration).ToArray();

// Assert
actual.ShouldBeEmpty();
}

[Test]
public void When_getting_configurations_of_an_orphaned_branch_Given_fallback_configuration_with_increment_inherit_Then_result_should_have_increment_none()
public void When_getting_configurations_of_an_orphaned_branch_Given_fallback_configuration_with_increment_inherit_Then_result_should_be_empty()
{
// Arrange
var branchMock = GitToolsTestingExtensions.CreateMockBranch("develop", GitToolsTestingExtensions.CreateMockCommit());
Expand All @@ -238,9 +217,7 @@ public void When_getting_configurations_of_an_orphaned_branch_Given_fallback_con
var actual = unitUnderTest.GetConfigurations(branchMock, configuration).ToArray();

// Assert
actual.ShouldHaveSingleItem();
actual[0].Branch.ShouldBe(branchMock);
actual[0].Value.Increment.ShouldBe(IncrementStrategy.None);
actual.ShouldBeEmpty();
}

[TestCase(IncrementStrategy.None)]
Expand Down Expand Up @@ -271,12 +248,13 @@ public void When_getting_configurations_of_an_orphaned_branch_Given_fallback_con
}

[Test]
public void When_getting_configurations_of_an_unknown_branch_Given_fallback_configuaration_without_increment_and_unknown_configuration_with_increment_inherit_Then_result_should_be_empty()
public void When_getting_configurations_of_an_unknown_branch_Given_fallback_and_unknown_configuration_with_increment_inherit_Then_result_should_be_empty()
{
// Arrange
var branchMock = GitToolsTestingExtensions.CreateMockBranch("unknown", GitToolsTestingExtensions.CreateMockCommit());
var configuration = GitFlowConfigurationBuilder.New
.WithIncrement(null)
.WithIncrement(IncrementStrategy.Inherit)
.WithBranch("unknown", builder => builder.WithIncrement(IncrementStrategy.Inherit))
.Build();
var repositoryStoreMock = Substitute.For<IRepositoryStore>();
repositoryStoreMock.GetSourceBranches(branchMock, configuration, Arg.Any<HashSet<IBranch>>()).Returns(Enumerable.Empty<IBranch>());
Expand All @@ -301,6 +279,7 @@ public void When_getting_configurations_of_an_unknown_branch_Given_fallback_conf
var branchMock = GitToolsTestingExtensions.CreateMockBranch("unknown", GitToolsTestingExtensions.CreateMockCommit());
var configuration = GitFlowConfigurationBuilder.New
.WithIncrement(fallbackIncrement)
.WithBranch("unknown", builder => builder.WithIncrement(IncrementStrategy.Inherit))
.Build();
var repositoryStoreMock = Substitute.For<IRepositoryStore>();
repositoryStoreMock.GetSourceBranches(branchMock, configuration, Arg.Any<HashSet<IBranch>>()).Returns(Enumerable.Empty<IBranch>());
Expand All @@ -318,13 +297,13 @@ public void When_getting_configurations_of_an_unknown_branch_Given_fallback_conf

[Theory]
public void When_getting_configurations_of_an_unknown_branch_Given_fallback_configuaration_with_increment_and_develop_branch_with_increment_Then_result_should_have_develop_increment(
IncrementStrategy fallbackIncrement, IncrementStrategy developBranchIncrement)
IncrementStrategy fallbackIncrement, IncrementStrategy developIncrement)
{
// Arrange
var unknownBranchMock = GitToolsTestingExtensions.CreateMockBranch("unknown", GitToolsTestingExtensions.CreateMockCommit());
var configuration = GitFlowConfigurationBuilder.New
.WithIncrement(fallbackIncrement)
.WithBranch("develop", builder => builder.WithIncrement(developBranchIncrement))
.WithBranch("develop", builder => builder.WithIncrement(developIncrement))
.Build();
var repositoryStoreMock = Substitute.For<IRepositoryStore>();
var developBranchMock = GitToolsTestingExtensions.CreateMockBranch("develop", GitToolsTestingExtensions.CreateMockCommit());
Expand All @@ -336,22 +315,24 @@ public void When_getting_configurations_of_an_unknown_branch_Given_fallback_conf
var actual = unitUnderTest.GetConfigurations(unknownBranchMock, configuration).ToArray();

// Assert
actual.ShouldHaveSingleItem();
actual[0].Branch.ShouldBe(developBranchMock);

if (developBranchIncrement == IncrementStrategy.Inherit)
if (fallbackIncrement == IncrementStrategy.Inherit && developIncrement == IncrementStrategy.Inherit)
{
if (fallbackIncrement == IncrementStrategy.Inherit)
{
fallbackIncrement = IncrementStrategy.None;
}
actual[0].Value.Increment.ShouldBe(fallbackIncrement);
actual.ShouldBeEmpty();
}
else
{
actual[0].Value.Increment.ShouldBe(developBranchIncrement);
}
actual.ShouldHaveSingleItem();
actual[0].Branch.ShouldBe(developBranchMock);

if (developIncrement == IncrementStrategy.Inherit)
{
actual[0].Value.Increment.ShouldBe(fallbackIncrement);
}
else
{
actual[0].Value.Increment.ShouldBe(developIncrement);
}
}
}

[Theory]
Expand All @@ -374,14 +355,16 @@ public void When_getting_configurations_of_an_unknown_branch_Given_fallback_conf
var actual = unitUnderTest.GetConfigurations(unknownBranchMock, configuration).ToArray();

// Assert
actual.ShouldHaveSingleItem();
actual[0].Branch.ShouldBe(developBranchMock);

if (fallbackIncrement == IncrementStrategy.Inherit)
{
fallbackIncrement = IncrementStrategy.None;
actual.ShouldBeEmpty();
}
else
{
actual.ShouldHaveSingleItem();
actual[0].Branch.ShouldBe(developBranchMock);
actual[0].Value.Increment.ShouldBe(fallbackIncrement);
}
actual[0].Value.Increment.ShouldBe(fallbackIncrement);
}

[TestCase(IncrementStrategy.None)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,14 @@ public void CanTakeVersionFromNameOfConfiguredReleaseBranch(string branchName, s
fixture.Repository.MakeACommit();
fixture.Repository.CreateBranch(branchName);

var configurationBuilder = GitFlowConfigurationBuilder.New
.WithBranch("support", builder => builder.WithIsReleaseBranch(true));
ConfigurationHelper configurationHelper = new(configurationBuilder.Build());
var configuration = GitFlowConfigurationBuilder.New
.WithBranch("support", builder => builder.WithIsReleaseBranch(true))
.Build();
ConfigurationHelper configurationHelper = new(configuration);

var gitRepository = fixture.Repository.ToGitRepository();
var strategy = GetVersionStrategy(fixture.RepositoryPath, gitRepository, branchName, configurationHelper.Dictionary);

var configuration = GitFlowConfigurationBuilder.New.Build();
var branchConfiguration = configuration.GetBranchConfiguration(branchName);
var effectiveConfiguration = new EffectiveConfiguration(configuration, branchConfiguration);

Expand Down
4 changes: 2 additions & 2 deletions src/GitVersion.Core/Configuration/BranchConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public BranchConfiguration(BranchConfiguration branchConfiguration)

[JsonPropertyName("increment")]
[JsonPropertyDescription("The increment strategy for this branch. Can be 'Inherit', 'Patch', 'Minor', 'Major', 'None'.")]
public IncrementStrategy? Increment { get; set; }
public IncrementStrategy Increment { get; set; }

[JsonPropertyName("prevent-increment-of-merged-branch-version")]
[JsonPropertyDescription("Prevent increment of merged branch version.")]
Expand Down Expand Up @@ -105,7 +105,7 @@ public BranchConfiguration Inherit(BranchConfiguration? parentConfig)

var result = new BranchConfiguration(this);

if (result.Increment is null || result.Increment == IncrementStrategy.Inherit)
if (result.Increment == IncrementStrategy.Inherit)
result.Increment = parentConfig.Increment;
result.VersioningMode ??= parentConfig.VersioningMode;
result.Label ??= parentConfig.Label;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public class BranchConfigurationBuilder
private string name;
private VersioningMode? versioningMode;
private string? label;
private IncrementStrategy? increment;
private IncrementStrategy increment;
private bool? preventIncrementOfMergedBranchVersion;
private string? labelNumberPattern;
private bool? trackMergeTarget;
Expand Down Expand Up @@ -45,7 +45,7 @@ public virtual BranchConfigurationBuilder WithLabel(string? value)
return this;
}

public virtual BranchConfigurationBuilder WithIncrement(IncrementStrategy? value)
public virtual BranchConfigurationBuilder WithIncrement(IncrementStrategy value)
{
this.increment = value;
return this;
Expand Down
4 changes: 2 additions & 2 deletions src/GitVersion.Core/Configuration/ConfigurationBuilderBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ internal abstract class ConfigurationBuilderBase<TConfigurationBuilder>
private readonly Dictionary<string, BranchConfigurationBuilder> branchConfigurationBuilders = new();
private VersioningMode? versioningMode;
private string? label;
private IncrementStrategy? increment;
private IncrementStrategy increment = IncrementStrategy.Inherit;
private bool? preventIncrementOfMergedBranchVersion;
private string? labelNumberPattern;
private bool? trackMergeTarget;
Expand Down Expand Up @@ -232,7 +232,7 @@ public virtual TConfigurationBuilder WithLabel(string? value)
return (TConfigurationBuilder)this;
}

public virtual TConfigurationBuilder WithIncrement(IncrementStrategy? value)
public virtual TConfigurationBuilder WithIncrement(IncrementStrategy value)
{
this.increment = value;
return (TConfigurationBuilder)this;
Expand Down
16 changes: 4 additions & 12 deletions src/GitVersion.Core/Configuration/ConfigurationExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@ namespace GitVersion.Configuration;
public static class ConfigurationExtensions
{
public static EffectiveConfiguration GetEffectiveConfiguration(this GitVersionConfiguration configuration, IBranch branch)
=> GetEffectiveConfiguration(configuration, branch.NotNull().Name.WithoutRemote);

public static EffectiveConfiguration GetEffectiveConfiguration(this GitVersionConfiguration configuration, string branchName)
{
var branchConfiguration = configuration.GetBranchConfiguration(branch);
BranchConfiguration branchConfiguration = configuration.GetBranchConfiguration(branchName);
return new EffectiveConfiguration(configuration, branchConfiguration);
}

Expand All @@ -25,16 +28,6 @@ public static BranchConfiguration GetBranchConfiguration(this GitVersionConfigur
Label = ConfigurationConstants.BranchNamePlaceholder,
Increment = IncrementStrategy.Inherit
};

if (branchConfiguration.Increment == IncrementStrategy.Inherit)
return branchConfiguration;

var fallbackBranchConfiguration = GetFallbackBranchConfiguration(configuration);
branchConfiguration.Increment ??= fallbackBranchConfiguration.Increment;
if (branchConfiguration.Increment != IncrementStrategy.Inherit)
{
branchConfiguration = branchConfiguration.Inherit(fallbackBranchConfiguration);
}
return branchConfiguration;
}

Expand All @@ -61,7 +54,6 @@ private static IEnumerable<BranchConfiguration> GetBranchConfigurations(GitVersi
public static BranchConfiguration GetFallbackBranchConfiguration(this GitVersionConfiguration configuration)
{
BranchConfiguration result = new(configuration);
if (result.Increment == IncrementStrategy.Inherit) result.Increment = IncrementStrategy.None;
return result;
}

Expand Down
44 changes: 22 additions & 22 deletions src/GitVersion.Core/Configuration/EffectiveConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,26 @@ namespace GitVersion.Configuration;
/// </summary>
public class EffectiveConfiguration
{
public EffectiveConfiguration(GitVersionConfiguration configuration, BranchConfiguration currentBranchConfig)
public EffectiveConfiguration(GitVersionConfiguration configuration, BranchConfiguration branchConfiguration)
{
configuration.NotNull();
currentBranchConfig.NotNull();
branchConfiguration.NotNull();

var name = currentBranchConfig.Name;
var fallbackBranchConfiguration = configuration.GetFallbackBranchConfiguration();
branchConfiguration = branchConfiguration.Inherit(fallbackBranchConfiguration);

if (!currentBranchConfig.VersioningMode.HasValue)
throw new Exception($"Configuration value for 'Versioning mode' for branch {name} has no value. (this should not happen, please report an issue)");
var name = branchConfiguration.Name;

if (!currentBranchConfig.Increment.HasValue)
throw new Exception($"Configuration value for 'Increment' for branch {name} has no value. (this should not happen, please report an issue)");
if (!branchConfiguration.VersioningMode.HasValue)
throw new Exception($"Configuration value for 'Versioning mode' for branch {name} has no value. (this should not happen, please report an issue)");

if (!configuration.AssemblyVersioningScheme.HasValue)
throw new Exception("Configuration value for 'AssemblyVersioningScheme' has no value. (this should not happen, please report an issue)");

if (!configuration.AssemblyFileVersioningScheme.HasValue)
throw new Exception("Configuration value for 'AssemblyFileVersioningScheme' has no value. (this should not happen, please report an issue)");

if (!currentBranchConfig.CommitMessageIncrementing.HasValue)
if (!branchConfiguration.CommitMessageIncrementing.HasValue)
throw new Exception("Configuration value for 'CommitMessageIncrementing' has no value. (this should not happen, please report an issue)");

if (!configuration.LabelPreReleaseWeight.HasValue)
Expand All @@ -39,29 +39,29 @@ public EffectiveConfiguration(GitVersionConfiguration configuration, BranchConfi
AssemblyInformationalFormat = configuration.AssemblyInformationalFormat;
AssemblyVersioningFormat = configuration.AssemblyVersioningFormat;
AssemblyFileVersioningFormat = configuration.AssemblyFileVersioningFormat;
VersioningMode = currentBranchConfig.VersioningMode.Value;
VersioningMode = branchConfiguration.VersioningMode.Value;
LabelPrefix = configuration.LabelPrefix;
Label = currentBranchConfig.Label ?? string.Empty;
Label = branchConfiguration.Label ?? string.Empty;
NextVersion = configuration.NextVersion;
Increment = currentBranchConfig.Increment.Value;
BranchPrefixToTrim = currentBranchConfig.Regex;
PreventIncrementOfMergedBranchVersion = currentBranchConfig.PreventIncrementOfMergedBranchVersion ?? false;
LabelNumberPattern = currentBranchConfig.LabelNumberPattern;
TrackMergeTarget = currentBranchConfig.TrackMergeTarget ?? false;
TrackMergeMessage = currentBranchConfig.TrackMergeMessage ?? true;
Increment = branchConfiguration.Increment;
BranchPrefixToTrim = branchConfiguration.Regex;
PreventIncrementOfMergedBranchVersion = branchConfiguration.PreventIncrementOfMergedBranchVersion ?? false;
LabelNumberPattern = branchConfiguration.LabelNumberPattern;
TrackMergeTarget = branchConfiguration.TrackMergeTarget ?? false;
TrackMergeMessage = branchConfiguration.TrackMergeMessage ?? true;
MajorVersionBumpMessage = configuration.MajorVersionBumpMessage;
MinorVersionBumpMessage = configuration.MinorVersionBumpMessage;
PatchVersionBumpMessage = configuration.PatchVersionBumpMessage;
NoBumpMessage = configuration.NoBumpMessage;
CommitMessageIncrementing = currentBranchConfig.CommitMessageIncrementing.Value;
CommitMessageIncrementing = branchConfiguration.CommitMessageIncrementing.Value;
VersionFilters = configuration.Ignore.ToFilters();
TracksReleaseBranches = currentBranchConfig.TracksReleaseBranches ?? false;
IsReleaseBranch = currentBranchConfig.IsReleaseBranch ?? false;
IsMainline = currentBranchConfig.IsMainline ?? false;
TracksReleaseBranches = branchConfiguration.TracksReleaseBranches ?? false;
IsReleaseBranch = branchConfiguration.IsReleaseBranch ?? false;
IsMainline = branchConfiguration.IsMainline ?? false;
CommitDateFormat = configuration.CommitDateFormat;
UpdateBuildNumber = configuration.UpdateBuildNumber;
SemanticVersionFormat = configuration.SemanticVersionFormat;
PreReleaseWeight = currentBranchConfig.PreReleaseWeight ?? 0;
PreReleaseWeight = branchConfiguration.PreReleaseWeight ?? 0;
LabelPreReleaseWeight = configuration.LabelPreReleaseWeight.Value;
}

Expand Down Expand Up @@ -174,7 +174,7 @@ protected EffectiveConfiguration(AssemblyVersioningScheme assemblyVersioningSche

public bool UpdateBuildNumber { get; }

public SemanticVersionFormat SemanticVersionFormat { get; set; } = SemanticVersionFormat.Strict;
public SemanticVersionFormat SemanticVersionFormat { get; set; }

public int PreReleaseWeight { get; }

Expand Down
Loading