Skip to content

Commit 4cc84d2

Browse files
committed
GitVersionContext refactoring
added IGitRepoMetadataProvider, IGitVersionContextFactory
1 parent 55378d6 commit 4cc84d2

25 files changed

+494
-329
lines changed

src/GitVersionCore.Tests/GitRepoMetadataProviderTests.cs

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System;
22
using GitTools.Testing;
33
using GitVersion;
4-
using GitVersion.Configuration;
54
using GitVersion.Extensions;
65
using GitVersion.Logging;
76
using GitVersionCore.Tests.Helpers;
@@ -16,21 +15,19 @@ namespace GitVersionCore.Tests
1615
public class GitRepoMetadataProviderTests : TestBase
1716
{
1817
private readonly ILog log;
19-
private readonly Config configuration;
2018

2119
public GitRepoMetadataProviderTests()
2220
{
2321
var sp = ConfigureServices();
2422
log = sp.GetService<ILog>();
25-
configuration = new Config();
2623
}
2724

2825
[Test]
2926
public void FindsCorrectMergeBaseForForwardMerge()
3027
{
3128
//*9dfb8b4 49 minutes ago(develop)
3229
//*54f21b2 53 minutes ago
33-
// |\
30+
// |\
3431
// | | *a219831 51 minutes ago(HEAD -> release-2.0.0)
3532
// | |/
3633
// | *4441531 54 minutes ago
@@ -61,16 +58,17 @@ public void FindsCorrectMergeBaseForForwardMerge()
6158
// Make new commit on develop
6259
fixture.Checkout("develop");
6360

64-
// Checkout to release (no new commits)
61+
// Checkout to release (no new commits)
6562
fixture.Checkout("release-2.0.0");
6663

6764
var develop = fixture.Repository.FindBranch("develop");
6865
var release = fixture.Repository.FindBranch("release-2.0.0");
69-
var releaseBranchMergeBase = new GitRepoMetadataProvider(fixture.Repository, log, configuration)
70-
.FindMergeBase(release, develop);
66+
var gitRepoMetadataProvider = new GitRepoMetadataProvider(log);
67+
gitRepoMetadataProvider.WithData(fixture.Repository);
7168

72-
var developMergeBase = new GitRepoMetadataProvider(fixture.Repository, log, configuration)
73-
.FindMergeBase(develop, release);
69+
var releaseBranchMergeBase = gitRepoMetadataProvider.FindMergeBase(release, develop);
70+
71+
var developMergeBase = gitRepoMetadataProvider.FindMergeBase(develop, release);
7472

7573
fixture.Repository.DumpGraph(Console.WriteLine);
7674

@@ -83,7 +81,7 @@ public void FindsCorrectMergeBaseForForwardMergeMovesOn()
8381
{
8482
//*9dfb8b4 49 minutes ago(develop)
8583
//*54f21b2 53 minutes ago
86-
// |\
84+
// |\
8785
// | | *a219831 51 minutes ago(HEAD -> release-2.0.0)
8886
// | |/
8987
// | *4441531 54 minutes ago
@@ -113,19 +111,20 @@ public void FindsCorrectMergeBaseForForwardMergeMovesOn()
113111

114112
// Make new commit on develop
115113
fixture.Checkout("develop");
116-
// Checkout to release (no new commits)
114+
// Checkout to release (no new commits)
117115
fixture.MakeACommit("develop after merge");
118116

119-
// Checkout to release (no new commits)
117+
// Checkout to release (no new commits)
120118
fixture.Checkout("release-2.0.0");
121119

122120
var develop = fixture.Repository.FindBranch("develop");
123121
var release = fixture.Repository.FindBranch("release-2.0.0");
124-
var releaseBranchMergeBase = new GitRepoMetadataProvider(fixture.Repository, log, configuration)
125-
.FindMergeBase(release, develop);
122+
var gitRepoMetadataProvider = new GitRepoMetadataProvider(log);
123+
gitRepoMetadataProvider.WithData(fixture.Repository);
124+
125+
var releaseBranchMergeBase = gitRepoMetadataProvider.FindMergeBase(release, develop);
126126

127-
var developMergeBase = new GitRepoMetadataProvider(fixture.Repository, log, configuration)
128-
.FindMergeBase(develop, release);
127+
var developMergeBase = gitRepoMetadataProvider.FindMergeBase(develop, release);
129128

130129
fixture.Repository.DumpGraph(Console.WriteLine);
131130

@@ -137,13 +136,13 @@ public void FindsCorrectMergeBaseForForwardMergeMovesOn()
137136
public void FindsCorrectMergeBaseForMultipleForwardMerges()
138137
{
139138
//*403b294 44 minutes ago(develop)
140-
//|\
139+
//|\
141140
//| *306b243 45 minutes ago(HEAD -> release-2.0.0)
142141
//| *4cf5969 47 minutes ago
143142
//| *4814083 51 minutes ago
144143
//* | cddd3cc 49 minutes ago
145144
//* | 2b2b52a 53 minutes ago
146-
//|\ \
145+
//|\ \
147146
//| |/
148147
//| *8113776 54 minutes ago
149148
//| *3c0235e 56 minutes ago
@@ -172,12 +171,12 @@ public void FindsCorrectMergeBaseForMultipleForwardMerges()
172171

173172
// Make new commit on develop
174173
fixture.Checkout("develop");
175-
// Checkout to release (no new commits)
174+
// Checkout to release (no new commits)
176175
fixture.Checkout("release-2.0.0");
177176
fixture.Checkout("develop");
178177
fixture.Repository.MakeACommit("develop after merge");
179178

180-
// Checkout to release (no new commits)
179+
// Checkout to release (no new commits)
181180
fixture.Checkout("release-2.0.0");
182181

183182
// Make some new commit on release
@@ -189,17 +188,18 @@ public void FindsCorrectMergeBaseForMultipleForwardMerges()
189188
fixture.Checkout("develop");
190189
fixture.MergeNoFF("release-2.0.0");
191190

192-
// Checkout to release (no new commits)
191+
// Checkout to release (no new commits)
193192
fixture.Checkout("release-2.0.0");
194193

195194
var develop = fixture.Repository.FindBranch("develop");
196195
var release = fixture.Repository.FindBranch("release-2.0.0");
197196

198-
var releaseBranchMergeBase = new GitRepoMetadataProvider(fixture.Repository, log, configuration)
199-
.FindMergeBase(release, develop);
197+
var gitRepoMetadataProvider = new GitRepoMetadataProvider(log);
198+
gitRepoMetadataProvider.WithData(fixture.Repository);
199+
200+
var releaseBranchMergeBase = gitRepoMetadataProvider.FindMergeBase(release, develop);
200201

201-
var developMergeBase = new GitRepoMetadataProvider(fixture.Repository, log, configuration)
202-
.FindMergeBase(develop, release);
202+
var developMergeBase = gitRepoMetadataProvider.FindMergeBase(develop, release);
203203

204204
fixture.Repository.DumpGraph(Console.WriteLine);
205205

src/GitVersionCore.Tests/GitToolsTestingExtensions.cs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using GitVersion;
44
using GitVersion.Configuration;
55
using GitVersion.Extensions;
6-
using GitVersion.Logging;
76
using GitVersion.OutputVariables;
87
using GitVersion.VersionCalculation;
98
using GitVersionCore.Tests.Helpers;
@@ -16,10 +15,6 @@ namespace GitVersionCore.Tests
1615
{
1716
public static class GitToolsTestingExtensions
1817
{
19-
private static readonly IServiceProvider sp;
20-
21-
static GitToolsTestingExtensions() => sp = ConfigureService();
22-
2318
public static VersionVariables GetVersion(this RepositoryFixtureBase fixture, Config configuration = null, IRepository repository = null, string commitId = null, bool onlyTrackedBranches = true, string branch = null)
2419
{
2520
if (configuration == null)
@@ -28,24 +23,33 @@ public static VersionVariables GetVersion(this RepositoryFixtureBase fixture, Co
2823
configuration.Reset();
2924
}
3025

31-
var log = sp.GetService<ILog>();
26+
var options = Options.Create(new Arguments { OverrideConfig = configuration });
27+
28+
var sp = ConfigureServices(services =>
29+
{
30+
services.AddSingleton(options);
31+
});
32+
3233
var variableProvider = sp.GetService<IVariableProvider>();
3334
var nextVersionCalculator = sp.GetService<INextVersionCalculator>();
35+
var gitVersionContextFactory = sp.GetService<IGitVersionContextFactory>();
3436

3537
repository ??= fixture.Repository;
3638
var targetBranch = repository.GetTargetBranch(branch);
37-
var gitVersionContext = new GitVersionContext(repository, log, targetBranch, configuration, onlyTrackedBranches, commitId);
39+
40+
var context = gitVersionContextFactory.Create(repository, targetBranch, commitId, onlyTrackedBranches);
41+
3842
try
3943
{
40-
var executeGitVersion = nextVersionCalculator.FindVersion(gitVersionContext);
41-
var variables = variableProvider.GetVariablesFor(executeGitVersion, gitVersionContext.Configuration, gitVersionContext.IsCurrentCommitTagged);
44+
var executeGitVersion = nextVersionCalculator.FindVersion(context);
45+
var variables = variableProvider.GetVariablesFor(executeGitVersion, context.Configuration, context.IsCurrentCommitTagged);
4246

4347
return variables;
4448
}
4549
catch (Exception)
4650
{
4751
Console.WriteLine("Test failing, dumping repository graph");
48-
gitVersionContext.Repository.DumpGraph();
52+
context.Repository.DumpGraph();
4953
throw;
5054
}
5155
}
@@ -88,7 +92,7 @@ public static void InitializeRepo(this RemoteRepositoryFixture fixture)
8892
};
8993
var options = Options.Create(arguments);
9094

91-
var serviceProvider = ConfigureService(services =>
95+
var serviceProvider = ConfigureServices(services =>
9296
{
9397
services.AddSingleton(options);
9498
});
@@ -97,7 +101,7 @@ public static void InitializeRepo(this RemoteRepositoryFixture fixture)
97101
gitPreparer?.PrepareInternal(true, null);
98102
}
99103

100-
private static IServiceProvider ConfigureService(Action<IServiceCollection> servicesOverrides = null)
104+
private static IServiceProvider ConfigureServices(Action<IServiceCollection> servicesOverrides = null)
101105
{
102106
var services = new ServiceCollection()
103107
.AddModule(new GitVersionCoreTestModule());

src/GitVersionCore.Tests/GitVersionContextBuilder.cs

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,38 @@
1+
using System;
12
using GitTools.Testing;
23
using GitVersion;
34
using GitVersion.Configuration;
4-
using GitVersion.Logging;
5+
using GitVersion.Extensions;
6+
using GitVersionCore.Tests.Helpers;
57
using GitVersionCore.Tests.Mocks;
68
using LibGit2Sharp;
9+
using Microsoft.Extensions.DependencyInjection;
10+
using Microsoft.Extensions.Options;
711

812
namespace GitVersionCore.Tests
913
{
1014
public class GitVersionContextBuilder
1115
{
1216
private IRepository repository;
13-
private Config config;
17+
private Config configuration;
18+
public IServiceProvider ServicesProvider;
19+
private Action<IServiceCollection> overrideServices;
1420

15-
public GitVersionContextBuilder WithRepository(IRepository repository)
21+
public GitVersionContextBuilder WithRepository(IRepository gitRepository)
1622
{
17-
this.repository = repository;
23+
repository = gitRepository;
1824
return this;
1925
}
2026

2127
public GitVersionContextBuilder WithConfig(Config config)
2228
{
23-
this.config = config;
29+
this.configuration = config;
30+
return this;
31+
}
32+
33+
public GitVersionContextBuilder OverrideServices(Action<IServiceCollection> overrideServices = null)
34+
{
35+
this.overrideServices = overrideServices;
2436
return this;
2537
}
2638

@@ -43,13 +55,13 @@ public GitVersionContextBuilder WithDevelopBranch()
4355
return WithBranch("develop");
4456
}
4557

46-
public GitVersionContextBuilder WithBranch(string branchName)
58+
private GitVersionContextBuilder WithBranch(string branchName)
4759
{
4860
repository = CreateRepository();
4961
return AddBranch(branchName);
5062
}
5163

52-
public GitVersionContextBuilder AddBranch(string branchName)
64+
private GitVersionContextBuilder AddBranch(string branchName)
5365
{
5466
var mockBranch = new MockBranch(branchName)
5567
{
@@ -62,13 +74,25 @@ public GitVersionContextBuilder AddBranch(string branchName)
6274

6375
public GitVersionContext Build()
6476
{
65-
var configuration = config ?? new Config();
66-
configuration.Reset();
6777
var repo = repository ?? CreateRepository();
68-
return new GitVersionContext(repo, new NullLog(), repo.Head, configuration);
78+
var config = configuration ?? new Config();
79+
80+
config.Reset();
81+
82+
var options = Options.Create(new Arguments { OverrideConfig = config });
83+
84+
ServicesProvider = ConfigureServices(services =>
85+
{
86+
services.AddSingleton(options);
87+
overrideServices?.Invoke(services);
88+
});
89+
90+
var gitVersionContextFactory = ServicesProvider.GetService<IGitVersionContextFactory>();
91+
92+
return gitVersionContextFactory.Create(repo, repo.Head);
6993
}
7094

71-
private IRepository CreateRepository()
95+
private static IRepository CreateRepository()
7296
{
7397
var mockBranch = new MockBranch("master") { new MockCommit { CommitterEx = Generate.SignatureNow() } };
7498
var mockRepository = new MockRepository
@@ -83,5 +107,15 @@ private IRepository CreateRepository()
83107

84108
return mockRepository;
85109
}
110+
111+
private static IServiceProvider ConfigureServices(Action<IServiceCollection> overrideServices = null)
112+
{
113+
var services = new ServiceCollection()
114+
.AddModule(new GitVersionCoreTestModule());
115+
116+
overrideServices?.Invoke(services);
117+
118+
return services.BuildServiceProvider();
119+
}
86120
}
87121
}

0 commit comments

Comments
 (0)