Skip to content

Commit 0f7b723

Browse files
committed
added VersionStrategyBase
1 parent ed0cb7a commit 0f7b723

13 files changed

+86
-98
lines changed
Lines changed: 24 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
using System.Linq;
2+
using GitVersion;
23
using GitVersion.Configuration;
34
using GitVersion.VersionCalculation;
45
using GitVersionCore.Tests.Helpers;
6+
using Microsoft.Extensions.DependencyInjection;
57
using NUnit.Framework;
68
using Shouldly;
79

@@ -10,81 +12,44 @@ namespace GitVersionCore.Tests.VersionCalculation.Strategies
1012
[TestFixture]
1113
public class ConfigNextVersionBaseVersionStrategyTests : TestBase
1214
{
13-
private IVersionStrategy strategy;
14-
private GitVersionContextBuilder contextBuilder;
15-
16-
[SetUp]
17-
public void SetUp()
18-
{
19-
strategy = new ConfigNextVersionVersionStrategy();
20-
contextBuilder = new GitVersionContextBuilder();
21-
}
22-
23-
[Test]
24-
public void ShouldNotBeIncremented()
25-
{
26-
var gitVersionContext = contextBuilder
27-
.WithConfig(new Config
28-
{
29-
NextVersion = "1.0.0"
30-
}).Build();
31-
32-
var baseVersion = strategy.GetVersions(gitVersionContext).Single();
33-
34-
baseVersion.ShouldIncrement.ShouldBe(false);
35-
baseVersion.SemanticVersion.ToString().ShouldBe("1.0.0");
36-
}
37-
3815
[Test]
3916
public void ReturnsNullWhenNoNextVersionIsInConfig()
4017
{
41-
var gitVersionContext = contextBuilder.Build();
42-
43-
var baseVersion = strategy.GetVersions(gitVersionContext).SingleOrDefault();
18+
var baseVersion = GetBaseVersion();
4419

4520
baseVersion.ShouldBe(null);
4621
}
4722

48-
[Test]
49-
public void NextVersionCanBeInteger()
23+
[TestCase("1.0.0", "1.0.0")]
24+
[TestCase("2", "2.0.0")]
25+
[TestCase("2.118998723", "2.118998723.0")]
26+
[TestCase("2.12.654651698", "2.12.654651698")]
27+
public void ConfigNextVersionTest(string nextVersion, string expectedVersion)
5028
{
51-
var gitVersionContext = contextBuilder
52-
.WithConfig(new Config
53-
{
54-
NextVersion = "2"
55-
}).Build();
29+
var baseVersion = GetBaseVersion(new Config
30+
{
31+
NextVersion = nextVersion
32+
});
5633

57-
var baseVersion = strategy.GetVersions(gitVersionContext).Single();
58-
59-
baseVersion.SemanticVersion.ToString().ShouldBe("2.0.0");
34+
baseVersion.ShouldIncrement.ShouldBe(false);
35+
baseVersion.SemanticVersion.ToString().ShouldBe(expectedVersion);
6036
}
6137

62-
[Test]
63-
public void NextVersionCanHaveEnormousMinorVersion()
38+
private static BaseVersion GetBaseVersion(Config config = null)
6439
{
65-
var gitVersionContext = contextBuilder
66-
.WithConfig(new Config
67-
{
68-
NextVersion = "2.118998723"
69-
}).Build();
40+
var contextBuilder = new GitVersionContextBuilder();
7041

71-
var baseVersion = strategy.GetVersions(gitVersionContext).Single();
42+
if (config != null)
43+
{
44+
contextBuilder = contextBuilder.WithConfig(config);
45+
}
7246

73-
baseVersion.SemanticVersion.ToString().ShouldBe("2.118998723.0");
74-
}
75-
76-
[Test]
77-
public void NextVersionCanHavePatch()
78-
{
79-
var gitVersionContext = contextBuilder
80-
.WithConfig(new Config
81-
{
82-
NextVersion = "2.12.654651698"
83-
}).Build();
47+
var gitVersionContext = contextBuilder.Build();
8448

85-
var baseVersion = strategy.GetVersions(gitVersionContext).Single();
49+
var contextFactory = contextBuilder.ServicesProvider.GetService<IGitVersionContextFactory>();
50+
var strategy = new ConfigNextVersionVersionStrategy(contextFactory);
8651

87-
baseVersion.SemanticVersion.ToString().ShouldBe("2.12.654651698");
52+
return strategy.GetVersions(gitVersionContext).SingleOrDefault();
8853
}
8954
}
9055
}

src/GitVersionCore.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections.Generic;
22
using System.Linq;
3+
using GitVersion;
34
using GitVersion.Configuration;
45
using GitVersion.Logging;
56
using GitVersion.VersionCalculation;
@@ -15,28 +16,24 @@ namespace GitVersionCore.Tests.VersionCalculation.Strategies
1516
[TestFixture]
1617
public class MergeMessageBaseVersionStrategyTests : TestBase
1718
{
18-
private readonly ILog log;
19-
20-
public MergeMessageBaseVersionStrategyTests()
21-
{
22-
var sp = ConfigureServices();
23-
log = sp.GetService<ILog>();
24-
}
25-
2619
[Test]
2720
public void ShouldNotAllowIncrementOfVersion()
2821
{
2922
// When a branch is merged in you want to start building stable packages of that version
3023
// So we shouldn't bump the version
31-
var context = new GitVersionContextBuilder().WithRepository(new MockRepository
24+
var contextBuilder = new GitVersionContextBuilder().WithRepository(new MockRepository
3225
{
3326
Head = new MockBranch("master") { new MockCommit
3427
{
3528
MessageEx = "Merge branch 'release-0.1.5'",
3629
ParentsEx = GetParents(true)
3730
} }
38-
}).Build();
39-
var strategy = new MergeMessageVersionStrategy(log);
31+
});
32+
var context = contextBuilder.Build();
33+
34+
var log = contextBuilder.ServicesProvider.GetService<ILog>();
35+
var contextFactory = contextBuilder.ServicesProvider.GetService<IGitVersionContextFactory>();
36+
var strategy = new MergeMessageVersionStrategy(log, contextFactory);
4037

4138
var baseVersion = strategy.GetVersions(context).Single();
4239

@@ -162,7 +159,7 @@ private void AssertMergeMessage(string message, string expectedVersion, IList<Co
162159
ParentsEx = parents
163160
};
164161

165-
var context = new GitVersionContextBuilder()
162+
var contextBuilder = new GitVersionContextBuilder()
166163
.WithConfig(config ?? new Config())
167164
.WithRepository(new MockRepository
168165
{
@@ -171,9 +168,12 @@ private void AssertMergeMessage(string message, string expectedVersion, IList<Co
171168
commit,
172169
new MockCommit()
173170
}
174-
})
175-
.Build();
176-
var strategy = new MergeMessageVersionStrategy(log);
171+
});
172+
var context = contextBuilder.Build();
173+
174+
var log = contextBuilder.ServicesProvider.GetService<ILog>();
175+
var contextFactory = contextBuilder.ServicesProvider.GetService<IGitVersionContextFactory>();
176+
var strategy = new MergeMessageVersionStrategy(log, contextFactory);
177177

178178
var baseVersion = strategy.GetVersions(context).SingleOrDefault();
179179

src/GitVersionCore.Tests/VersionCalculation/Strategies/VersionInBranchNameBaseVersionStrategyTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ private IGitVersionContextFactory GetGitVersionContextFactory(Config config = nu
100100

101101
var sp = ConfigureServices(services => { services.AddSingleton(options); });
102102
var gitRepoMetadataProvider = sp.GetService<IGitRepoMetadataProvider>();
103-
strategy = new VersionInBranchNameVersionStrategy(gitRepoMetadataProvider);
103+
var gitVersionContextFactory = sp.GetService<IGitVersionContextFactory>();
104+
strategy = new VersionInBranchNameVersionStrategy(gitRepoMetadataProvider, gitVersionContextFactory);
104105
return sp.GetService<IGitVersionContextFactory>();
105106
}
106107
}

src/GitVersionCore/VersionCalculation/BaseVersionCalculator.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,7 @@ public BaseVersion GetBaseVersion()
8787
}
8888
}
8989

90-
private static void FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted(
91-
GitVersionContext context, IEnumerable<Versions> baseVersions)
90+
private static void FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted(GitVersionContext context, IEnumerable<Versions> baseVersions)
9291
{
9392
if (!ReleaseBranchExistsInRepo(context))
9493
{

src/GitVersionCore/VersionCalculation/BaseVersionCalculators/ConfigNextVersionVersionStrategy.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,13 @@ namespace GitVersion.VersionCalculation
77
/// BaseVersionSource is null.
88
/// Does not increment.
99
/// </summary>
10-
public class ConfigNextVersionVersionStrategy : IVersionStrategy
10+
public class ConfigNextVersionVersionStrategy : VersionStrategyBase
1111
{
12-
public virtual IEnumerable<BaseVersion> GetVersions(GitVersionContext context)
12+
public ConfigNextVersionVersionStrategy(IGitVersionContextFactory gitVersionContextFactory) : base(gitVersionContextFactory)
13+
{
14+
}
15+
16+
public override IEnumerable<BaseVersion> GetVersions(GitVersionContext context)
1317
{
1418
if (string.IsNullOrEmpty(context.Configuration.NextVersion) || context.IsCurrentCommitTagged)
1519
yield break;

src/GitVersionCore/VersionCalculation/BaseVersionCalculators/FallbackVersionStrategy.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@ namespace GitVersion.VersionCalculation
99
/// BaseVersionSource is the "root" commit reachable from the current commit.
1010
/// Does not increment.
1111
/// </summary>
12-
public class FallbackVersionStrategy : IVersionStrategy
12+
public class FallbackVersionStrategy : VersionStrategyBase
1313
{
14-
public virtual IEnumerable<BaseVersion> GetVersions(GitVersionContext context)
14+
public FallbackVersionStrategy(IGitVersionContextFactory gitVersionContextFactory) : base(gitVersionContextFactory)
15+
{
16+
}
17+
public override IEnumerable<BaseVersion> GetVersions(GitVersionContext context)
1518
{
1619
Commit baseVersionSource;
1720
var currentBranchTip = context.CurrentBranch.Tip;

src/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageVersionStrategy.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@ namespace GitVersion.VersionCalculation
1414
/// BaseVersionSource is the commit where the message was found.
1515
/// Increments if PreventIncrementForMergedBranchVersion (from the branch config) is false.
1616
/// </summary>
17-
public class MergeMessageVersionStrategy : IVersionStrategy
17+
public class MergeMessageVersionStrategy : VersionStrategyBase
1818
{
1919
private readonly ILog log;
2020

21-
public MergeMessageVersionStrategy(ILog log)
21+
public MergeMessageVersionStrategy(ILog log, IGitVersionContextFactory gitVersionContextFactory) : base(gitVersionContextFactory)
2222
{
2323
this.log = log ?? throw new ArgumentNullException(nameof(log));
2424
}
2525

26-
public virtual IEnumerable<BaseVersion> GetVersions(GitVersionContext context)
26+
public override IEnumerable<BaseVersion> GetVersions(GitVersionContext context)
2727
{
2828
var commitsPriorToThan = context.CurrentBranch
2929
.CommitsPriorToThan(context.CurrentCommit.When());

src/GitVersionCore/VersionCalculation/BaseVersionCalculators/TaggedCommitVersionStrategy.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ namespace GitVersion.VersionCalculation
1212
/// BaseVersionSource is the tag's commit.
1313
/// Increments if the tag is not the current commit.
1414
/// </summary>
15-
public class TaggedCommitVersionStrategy : IVersionStrategy
15+
public class TaggedCommitVersionStrategy : VersionStrategyBase
1616
{
1717
private readonly IGitRepoMetadataProvider gitRepoMetadataProvider;
1818

19-
public TaggedCommitVersionStrategy(IGitRepoMetadataProvider gitRepoMetadataProvider)
19+
public TaggedCommitVersionStrategy(IGitRepoMetadataProvider gitRepoMetadataProvider, IGitVersionContextFactory gitVersionContextFactory) : base(gitVersionContextFactory)
2020
{
2121
this.gitRepoMetadataProvider = gitRepoMetadataProvider ?? throw new ArgumentNullException(nameof(gitRepoMetadataProvider));
2222
}
2323

24-
public virtual IEnumerable<BaseVersion> GetVersions(GitVersionContext context)
24+
public override IEnumerable<BaseVersion> GetVersions(GitVersionContext context)
2525
{
2626
return GetTaggedVersions(context, context.CurrentBranch, context.CurrentCommit.When());
2727
}

src/GitVersionCore/VersionCalculation/BaseVersionCalculators/TrackReleaseBranchesVersionStrategy.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,21 @@ namespace GitVersion.VersionCalculation
2424
/// Increments if the tag is not the current commit (same as base strategy).
2525
/// </para>
2626
/// </summary>
27-
public class TrackReleaseBranchesVersionStrategy : IVersionStrategy
27+
public class TrackReleaseBranchesVersionStrategy : VersionStrategyBase
2828
{
2929
private readonly IGitRepoMetadataProvider gitRepoMetadataProvider;
3030
private readonly VersionInBranchNameVersionStrategy releaseVersionStrategy;
3131
private readonly TaggedCommitVersionStrategy taggedCommitVersionStrategy;
3232

33-
public TrackReleaseBranchesVersionStrategy(IGitRepoMetadataProvider gitRepoMetadataProvider)
33+
public TrackReleaseBranchesVersionStrategy(IGitRepoMetadataProvider gitRepoMetadataProvider, IGitVersionContextFactory gitVersionContextFactory) : base(gitVersionContextFactory)
3434
{
3535
this.gitRepoMetadataProvider = gitRepoMetadataProvider ?? throw new ArgumentNullException(nameof(gitRepoMetadataProvider));
3636

37-
releaseVersionStrategy = new VersionInBranchNameVersionStrategy(gitRepoMetadataProvider);
38-
taggedCommitVersionStrategy = new TaggedCommitVersionStrategy(gitRepoMetadataProvider);
37+
releaseVersionStrategy = new VersionInBranchNameVersionStrategy(gitRepoMetadataProvider, gitVersionContextFactory);
38+
taggedCommitVersionStrategy = new TaggedCommitVersionStrategy(gitRepoMetadataProvider, gitVersionContextFactory);
3939
}
4040

41-
public virtual IEnumerable<BaseVersion> GetVersions(GitVersionContext context)
41+
public override IEnumerable<BaseVersion> GetVersions(GitVersionContext context)
4242
{
4343
if (context.Configuration.TracksReleaseBranches)
4444
{

src/GitVersionCore/VersionCalculation/BaseVersionCalculators/VersionInBranchNameVersionStrategy.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ namespace GitVersion.VersionCalculation
1212
/// BaseVersionSource is the commit where the branch was branched from its parent.
1313
/// Does not increment.
1414
/// </summary>
15-
public class VersionInBranchNameVersionStrategy : IVersionStrategy
15+
public class VersionInBranchNameVersionStrategy : VersionStrategyBase
1616
{
1717
private IGitRepoMetadataProvider gitRepoMetadataProvider;
1818

19-
public VersionInBranchNameVersionStrategy(IGitRepoMetadataProvider gitRepoMetadataProvider)
19+
public VersionInBranchNameVersionStrategy(IGitRepoMetadataProvider gitRepoMetadataProvider, IGitVersionContextFactory gitVersionContextFactory) : base(gitVersionContextFactory)
2020
{
2121
this.gitRepoMetadataProvider = gitRepoMetadataProvider ?? throw new ArgumentNullException(nameof(gitRepoMetadataProvider));
2222
}
2323

24-
public virtual IEnumerable<BaseVersion> GetVersions(GitVersionContext context)
24+
public override IEnumerable<BaseVersion> GetVersions(GitVersionContext context)
2525
{
2626
var currentBranch = context.CurrentBranch;
2727
var tagPrefixRegex = context.Configuration.GitTagPrefix;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace GitVersion.VersionCalculation
5+
{
6+
public class VersionStrategyBase : IVersionStrategy
7+
{
8+
protected readonly IGitVersionContextFactory ContextFactory;
9+
10+
public VersionStrategyBase(IGitVersionContextFactory gitVersionContextFactory)
11+
{
12+
this.ContextFactory = gitVersionContextFactory ?? throw new ArgumentNullException(nameof(gitVersionContextFactory));
13+
}
14+
public virtual IEnumerable<BaseVersion> GetVersions(GitVersionContext context) => throw new NotImplementedException();
15+
}
16+
}

src/GitVersionCore/VersionCalculation/BaseVersionCalculators/VersionStrategyModule.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Linq;
12
using System.Reflection;
23
using Microsoft.Extensions.DependencyInjection;
34

@@ -7,7 +8,7 @@ public class VersionStrategyModule : GitVersionModule
78
{
89
public override void RegisterTypes(IServiceCollection services)
910
{
10-
var versionStrategies = FindAllDerivedTypes<IVersionStrategy>(Assembly.GetAssembly(GetType()));
11+
var versionStrategies = FindAllDerivedTypes<IVersionStrategy>(Assembly.GetAssembly(GetType())).Where(x => x != typeof(VersionStrategyBase));
1112

1213
foreach (var versionStrategy in versionStrategies)
1314
{

src/GitVersionCore/VersionCalculation/MainlineVersionCalculator.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,8 +243,7 @@ private SemanticVersion IncrementForEachCommit(GitVersionContext context, List<C
243243
return mainlineVersion;
244244
}
245245

246-
private static VersionField FindMessageIncrement(
247-
GitVersionContext context, Commit mergeCommit, Commit mergedHead, Commit findMergeBase, List<Commit> commitLog)
246+
private static VersionField FindMessageIncrement(GitVersionContext context, Commit mergeCommit, Commit mergedHead, Commit findMergeBase, List<Commit> commitLog)
248247
{
249248
var commits = context.Repository.GetMergeBaseCommits(mergeCommit, mergedHead, findMergeBase);
250249
commitLog.RemoveAll(c => commits.Any(c1 => c1.Sha == c.Sha));

0 commit comments

Comments
 (0)