Skip to content

Commit e2fe74b

Browse files
committed
Created NewNextVersionCalculator which is the new version calculation
1 parent 02e8059 commit e2fe74b

12 files changed

+157
-5
lines changed

GitVersionCore.Tests/GitVersionCore.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@
116116
<Compile Include="TestFileSystem.cs" />
117117
<Compile Include="VariableProviderTests.cs" />
118118
<Compile Include="VersionCalculation\BaseVersionCalculatorTests.cs" />
119+
<Compile Include="VersionCalculation\NewNextVersionCalculatorTests.cs" />
119120
<Compile Include="VersionCalculation\Strategies\ConfigNextVersionBaseVersionStrategyTests.cs" />
120121
<Compile Include="GitVersionContextBuilder.cs" />
121122
<Compile Include="VersionCalculation\Strategies\LastTagBaseVersionStrategyTests.cs" />

GitVersionCore.Tests/TestEffectiveConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public TestEffectiveConfiguration(
1010
string gitTagPrefix = "v",
1111
string tag = "",
1212
string nextVersion = null) :
13-
base(assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion)
13+
base(assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch)
1414
{
1515
}
1616
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
namespace GitVersionCore.Tests.VersionCalculation
2+
{
3+
using GitVersion;
4+
using GitVersion.VersionCalculation;
5+
using NUnit.Framework;
6+
using Shouldly;
7+
8+
public class NewNextVersionCalculatorTests
9+
{
10+
[Test]
11+
public void ShouldIncrementVersionBasedOnConfig()
12+
{
13+
var baseCalculator = new TestBaseVersionCalculator(true, new SemanticVersion(1));
14+
var sut = new NewNextVersionCalculator(baseCalculator);
15+
var config = new Config();
16+
config.Branches.Add("master", new BranchConfig
17+
{
18+
Increment = IncrementStrategy.Major
19+
});
20+
var context = new GitVersionContextBuilder().WithConfig(config).Build();
21+
22+
var version = sut.FindVersion(context);
23+
24+
version.ToString().ShouldBe("2.0.0");
25+
}
26+
27+
[Test]
28+
public void DoesNotIncrementWhenBaseVersionSaysNotTo()
29+
{
30+
var baseCalculator = new TestBaseVersionCalculator(false, new SemanticVersion(1));
31+
var sut = new NewNextVersionCalculator(baseCalculator);
32+
var config = new Config();
33+
config.Branches.Add("master", new BranchConfig
34+
{
35+
Increment = IncrementStrategy.Major
36+
});
37+
var context = new GitVersionContextBuilder().WithConfig(config).Build();
38+
39+
var version = sut.FindVersion(context);
40+
41+
version.ToString().ShouldBe("1.0.0");
42+
}
43+
}
44+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
namespace GitVersionCore.Tests.VersionCalculation
2+
{
3+
using GitVersion;
4+
using GitVersion.VersionCalculation;
5+
using GitVersion.VersionCalculation.BaseVersionCalculators;
6+
7+
public class TestBaseVersionCalculator : IBaseVersionCalculator
8+
{
9+
readonly SemanticVersion semanticVersion;
10+
bool shouldIncrement;
11+
12+
public TestBaseVersionCalculator(bool shouldIncrement, SemanticVersion semanticVersion)
13+
{
14+
this.semanticVersion = semanticVersion;
15+
this.shouldIncrement = shouldIncrement;
16+
}
17+
18+
public BaseVersion GetBaseVersion(GitVersionContext context)
19+
{
20+
return new BaseVersion(shouldIncrement, semanticVersion);
21+
}
22+
}
23+
}

GitVersionCore/Configuration/BranchConfig.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,8 @@ public class BranchConfig
99

1010
[YamlAlias("tag")]
1111
public string Tag { get; set; }
12+
13+
[YamlAlias("increment")]
14+
public IncrementStrategy? Increment { get; set; }
1215
}
1316
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace GitVersion
2+
{
3+
public enum IncrementStrategy
4+
{
5+
None,
6+
Major,
7+
Minor,
8+
Patch
9+
}
10+
}

GitVersionCore/EffectiveConfiguration.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
/// </summary>
66
public class EffectiveConfiguration
77
{
8-
public EffectiveConfiguration(AssemblyVersioningScheme assemblyVersioningScheme, VersioningMode versioningMode, string gitTagPrefix, string tag, string nextVersion)
8+
public EffectiveConfiguration(AssemblyVersioningScheme assemblyVersioningScheme, VersioningMode versioningMode, string gitTagPrefix, string tag, string nextVersion, IncrementStrategy increment)
99
{
1010
AssemblyVersioningScheme = assemblyVersioningScheme;
1111
VersioningMode = versioningMode;
1212
GitTagPrefix = gitTagPrefix;
1313
Tag = tag;
1414
NextVersion = nextVersion;
15+
Increment = increment;
1516
}
1617

1718
public VersioningMode VersioningMode { get; private set; }
@@ -29,5 +30,6 @@ public EffectiveConfiguration(AssemblyVersioningScheme assemblyVersioningScheme,
2930
public string Tag { get; private set; }
3031

3132
public string NextVersion { get; private set; }
33+
public IncrementStrategy Increment { get; private set; }
3234
}
3335
}

GitVersionCore/GitVersionContext.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,9 @@ void CalculateEffectiveConfiguration()
8888
var versioningMode = currentBranchConfig.VersioningMode ?? configuration.VersioningMode ?? VersioningMode.ContinuousDelivery;
8989
var tag = currentBranchConfig.Tag;
9090
var nextVersion = configuration.NextVersion;
91+
var incrementStrategy = currentBranchConfig.Increment ?? IncrementStrategy.Patch;
9192

92-
Configuration = new EffectiveConfiguration(configuration.AssemblyVersioningScheme, versioningMode, configuration.TagPrefix, tag, nextVersion);
93+
Configuration = new EffectiveConfiguration(configuration.AssemblyVersioningScheme, versioningMode, configuration.TagPrefix, tag, nextVersion, incrementStrategy);
9394
}
9495

9596
BranchConfig GetBranchConfiguration(KeyValuePair<string, BranchConfig>[] matchingBranches)

GitVersionCore/GitVersionCore.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
<Compile Include="Configuration\Config.cs" />
7575
<Compile Include="Configuration\ConfigReader.cs" />
7676
<Compile Include="Configuration\ConfigurationProvider.cs" />
77+
<Compile Include="Configuration\IncrementStrategy.cs" />
7778
<Compile Include="Configuration\LegacyConfig.cs" />
7879
<Compile Include="Configuration\LegacyConfigNotifier.cs" />
7980
<Compile Include="Configuration\OldConfigurationException.cs" />
@@ -93,6 +94,8 @@
9394
<Compile Include="VersionCalculation\BaseVersionCalculators\LastTagBaseVersionStrategy.cs" />
9495
<Compile Include="VersionCalculation\BaseVersionCalculators\MergeMessageBaseVersionStrategy.cs" />
9596
<Compile Include="VersionCalculation\BaseVersionStrategy.cs" />
97+
<Compile Include="VersionCalculation\IBaseVersionCalculator.cs" />
98+
<Compile Include="VersionCalculation\NewNextVersionCalculator.cs" />
9699
<Compile Include="VersioningModes\ContinuousDeliveryMode.cs" />
97100
<Compile Include="VersioningModes\ContinuousDeploymentMode.cs" />
98101
<Compile Include="VersioningModes\VersioningMode.cs" />

GitVersionCore/VersionCalculation/BaseVersionCalculator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
namespace GitVersion.VersionCalculation
22
{
33
using System.Linq;
4-
using GitVersion.VersionCalculation.BaseVersionCalculators;
4+
using BaseVersionCalculators;
55

6-
public class BaseVersionCalculator
6+
public class BaseVersionCalculator : IBaseVersionCalculator
77
{
88
readonly BaseVersionStrategy[] strategies;
99

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace GitVersion.VersionCalculation
2+
{
3+
using GitVersion.VersionCalculation.BaseVersionCalculators;
4+
5+
public interface IBaseVersionCalculator
6+
{
7+
BaseVersion GetBaseVersion(GitVersionContext context);
8+
}
9+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
namespace GitVersion.VersionCalculation
2+
{
3+
using System;
4+
using BaseVersionCalculators;
5+
6+
public class NewNextVersionCalculator
7+
{
8+
IBaseVersionCalculator baseVersionFinder;
9+
10+
public NewNextVersionCalculator(IBaseVersionCalculator baseVersionCalculator = null)
11+
{
12+
baseVersionFinder = baseVersionCalculator ??
13+
new BaseVersionCalculator(
14+
new ConfigNextVersionBaseVersionStrategy(),
15+
new LastTagBaseVersionStrategy(),
16+
new MergeMessageBaseVersionStrategy());
17+
}
18+
19+
public SemanticVersion FindVersion(GitVersionContext context)
20+
{
21+
var baseVersion = baseVersionFinder.GetBaseVersion(context);
22+
23+
if (baseVersion.ShouldIncrement) IncrementVersion(context, baseVersion);
24+
25+
return baseVersion.SemanticVersion;
26+
}
27+
28+
static void IncrementVersion(GitVersionContext context, BaseVersion baseVersion)
29+
{
30+
if (!baseVersion.SemanticVersion.PreReleaseTag.HasTag())
31+
{
32+
switch (context.Configuration.Increment)
33+
{
34+
case IncrementStrategy.None:
35+
break;
36+
case IncrementStrategy.Major:
37+
baseVersion.SemanticVersion.Major++;
38+
break;
39+
case IncrementStrategy.Minor:
40+
baseVersion.SemanticVersion.Minor++;
41+
break;
42+
case IncrementStrategy.Patch:
43+
baseVersion.SemanticVersion.Patch++;
44+
break;
45+
default:
46+
throw new ArgumentOutOfRangeException();
47+
}
48+
}
49+
else
50+
{
51+
baseVersion.SemanticVersion.PreReleaseTag.Number = baseVersion.SemanticVersion.PreReleaseTag.Number ?? 0;
52+
baseVersion.SemanticVersion.PreReleaseTag.Number++;
53+
}
54+
}
55+
}
56+
}

0 commit comments

Comments
 (0)