Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
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