Skip to content

Commit cc1f5b0

Browse files
committed
register IRepository as service & inject
1 parent 2dcb928 commit cc1f5b0

24 files changed

+89
-92
lines changed

src/GitVersionCore.Tests/GitRepoMetadataProviderTests.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@ public void FindsCorrectMergeBaseForForwardMerge()
6363

6464
var develop = fixture.Repository.FindBranch("develop");
6565
var release = fixture.Repository.FindBranch("release-2.0.0");
66-
var gitRepoMetadataProvider = new GitRepoMetadataProvider(log);
67-
gitRepoMetadataProvider.WithData(fixture.Repository);
66+
var gitRepoMetadataProvider = new GitRepoMetadataProvider(log, fixture.Repository);
6867

6968
var releaseBranchMergeBase = gitRepoMetadataProvider.FindMergeBase(release, develop);
7069

@@ -119,8 +118,7 @@ public void FindsCorrectMergeBaseForForwardMergeMovesOn()
119118

120119
var develop = fixture.Repository.FindBranch("develop");
121120
var release = fixture.Repository.FindBranch("release-2.0.0");
122-
var gitRepoMetadataProvider = new GitRepoMetadataProvider(log);
123-
gitRepoMetadataProvider.WithData(fixture.Repository);
121+
var gitRepoMetadataProvider = new GitRepoMetadataProvider(log, fixture.Repository);
124122

125123
var releaseBranchMergeBase = gitRepoMetadataProvider.FindMergeBase(release, develop);
126124

@@ -194,8 +192,7 @@ public void FindsCorrectMergeBaseForMultipleForwardMerges()
194192
var develop = fixture.Repository.FindBranch("develop");
195193
var release = fixture.Repository.FindBranch("release-2.0.0");
196194

197-
var gitRepoMetadataProvider = new GitRepoMetadataProvider(log);
198-
gitRepoMetadataProvider.WithData(fixture.Repository);
195+
var gitRepoMetadataProvider = new GitRepoMetadataProvider(log, fixture.Repository);
199196

200197
var releaseBranchMergeBase = gitRepoMetadataProvider.FindMergeBase(release, develop);
201198

src/GitVersionCore.Tests/GitToolsTestingExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public static VersionVariables GetVersion(this RepositoryFixtureBase fixture, Co
4848
catch (Exception)
4949
{
5050
Console.WriteLine("Test failing, dumping repository graph");
51-
context.Repository.DumpGraph();
51+
repository.DumpGraph();
5252
throw;
5353
}
5454
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using GitVersion.Configuration;
44
using GitVersion.VersionCalculation;
55
using GitVersionCore.Tests.Helpers;
6+
using LibGit2Sharp;
67
using Microsoft.Extensions.DependencyInjection;
78
using Microsoft.Extensions.Options;
89
using NUnit.Framework;
@@ -47,7 +48,8 @@ private static BaseVersion GetBaseVersion(Config config = null)
4748

4849
contextBuilder.Build();
4950
var options = contextBuilder.ServicesProvider.GetService<IOptions<GitVersionContext>>();
50-
var strategy = new ConfigNextVersionVersionStrategy(options);
51+
var repository = contextBuilder.ServicesProvider.GetService<IRepository>();
52+
var strategy = new ConfigNextVersionVersionStrategy(repository, options);
5153

5254
return strategy.GetVersions().SingleOrDefault();
5355
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public void ShouldNotAllowIncrementOfVersion()
3333
contextBuilder.Build();
3434
var log = contextBuilder.ServicesProvider.GetService<ILog>();
3535
var options = contextBuilder.ServicesProvider.GetService<IOptions<GitVersionContext>>();
36-
var strategy = new MergeMessageVersionStrategy(log, options);
36+
var repository = contextBuilder.ServicesProvider.GetService<IRepository>();
37+
var strategy = new MergeMessageVersionStrategy(log, repository, options);
3738

3839
var baseVersion = strategy.GetVersions().Single();
3940

@@ -172,7 +173,8 @@ private void AssertMergeMessage(string message, string expectedVersion, IList<Co
172173
contextBuilder.Build();
173174
var log = contextBuilder.ServicesProvider.GetService<ILog>();
174175
var options = contextBuilder.ServicesProvider.GetService<IOptions<GitVersionContext>>();
175-
var strategy = new MergeMessageVersionStrategy(log, options);
176+
var repository = contextBuilder.ServicesProvider.GetService<IRepository>();
177+
var strategy = new MergeMessageVersionStrategy(log, repository, options);
176178

177179
var baseVersion = strategy.GetVersions().SingleOrDefault();
178180

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ private IGitVersionContextFactory GetGitVersionContextFactory(Config config = nu
9797
var sp = ConfigureServices(services => { services.AddSingleton(options); });
9898
var gitRepoMetadataProvider = sp.GetService<IGitRepoMetadataProvider>();
9999
var contextOptions = sp.GetService<IOptions<GitVersionContext>>();
100-
strategy = new VersionInBranchNameVersionStrategy(gitRepoMetadataProvider, contextOptions);
100+
var repository = sp.GetService<IRepository>();
101+
strategy = new VersionInBranchNameVersionStrategy(gitRepoMetadataProvider, repository, contextOptions);
101102
return sp.GetService<IGitVersionContextFactory>();
102103
}
103104
}

src/GitVersionCore/Common/IGitRepoMetadataProvider.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,5 @@ public interface IGitRepoMetadataProvider
2121
/// If there are multiple such commits and branches, tries to guess based on commit histories.
2222
/// </summary>
2323
BranchCommit FindCommitBranchWasBranchedFrom(Branch branch, Config configuration, params Branch[] excludedBranches);
24-
25-
void WithData(IRepository repo);
2624
}
2725
}

src/GitVersionCore/Common/IGitVersionContextFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ namespace GitVersion
55
public interface IGitVersionContextFactory
66
{
77
GitVersionContext Init(IRepository repository, Branch currentBranch, string commitId = null, bool onlyTrackedBranches = false);
8-
GitVersionContext Create(Arguments arguments);
8+
GitVersionContext Create(Arguments arguments, IRepository repository);
99
}
1010
}

src/GitVersionCore/Configuration/BranchConfigurationCalculator.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,10 @@ private BranchConfig InheritBranchConfiguration(IRepository repository, Branch t
9292
}
9393
else
9494
{
95-
var branches = repoMetadataProvider
96-
.GetBranchesContainingCommit(branchPoint.Commit, branchesToEvaluate, false).ToList();
95+
var branches = repoMetadataProvider.GetBranchesContainingCommit(branchPoint.Commit, branchesToEvaluate, false).ToList();
9796
if (branches.Count > 1)
9897
{
99-
var currentTipBranches = repoMetadataProvider
100-
.GetBranchesContainingCommit(currentCommit, branchesToEvaluate, false).ToList();
98+
var currentTipBranches = repoMetadataProvider.GetBranchesContainingCommit(currentCommit, branchesToEvaluate, false).ToList();
10199
possibleParents = branches.Except(currentTipBranches).ToList();
102100
}
103101
else

src/GitVersionCore/Core/GitRepoMetadataProvider.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,10 @@ public class GitRepoMetadataProvider : IGitRepoMetadataProvider
2020
private readonly ILog log;
2121
private IRepository repository;
2222

23-
public GitRepoMetadataProvider(ILog log)
23+
public GitRepoMetadataProvider(ILog log, IRepository repository)
2424
{
25-
this.log = log;
26-
}
27-
28-
public void WithData(IRepository repo)
29-
{
30-
repository = repo;
25+
this.log = log ?? throw new ArgumentNullException(nameof(log));
26+
this.repository = repository ?? throw new ArgumentNullException(nameof(log));
3127
}
3228

3329
public IEnumerable<Tuple<Tag, SemanticVersion>> GetValidVersionTags(string tagPrefixRegex, DateTimeOffset? olderThan = null)

src/GitVersionCore/Core/GitVersionContextFactory.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,8 @@ public GitVersionContextFactory(ILog log, IConfigProvider configProvider, IGitRe
2626
this.options = options ?? throw new ArgumentNullException(nameof(options));
2727
}
2828

29-
public GitVersionContext Create(Arguments arguments)
29+
public GitVersionContext Create(Arguments arguments, IRepository repository)
3030
{
31-
using var repository = new Repository(arguments.DotGitDirectory);
3231
var targetBranch = repository.GetTargetBranch(arguments.TargetBranch);
3332
return Init(repository, targetBranch, arguments.CommitId);
3433
}
@@ -39,7 +38,6 @@ public GitVersionContext Init(IRepository repository, Branch currentBranch, stri
3938
throw new InvalidOperationException("Need a branch to operate on");
4039

4140
var configuration = configProvider.Provide(overrideConfig: options.Value.OverrideConfig);
42-
gitRepoMetadataProvider.WithData(repository);
4341

4442
var currentCommit = repository.GetCurrentCommit(log, currentBranch, commitId);
4543

src/GitVersionCore/GitVersionCoreModule.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using GitVersion.Logging;
77
using GitVersion.VersionCalculation;
88
using GitVersion.VersionCalculation.Cache;
9+
using LibGit2Sharp;
910
using Microsoft.Extensions.DependencyInjection;
1011
using Microsoft.Extensions.Options;
1112

@@ -40,11 +41,18 @@ public void RegisterTypes(IServiceCollection services)
4041

4142
services.AddSingleton(sp => sp.GetService<IConfigFileLocatorFactory>().Create());
4243

44+
services.AddSingleton<IRepository>(sp =>
45+
{
46+
var options = sp.GetService<IOptions<Arguments>>();
47+
return new Repository(options.Value.DotGitDirectory);
48+
});
49+
4350
services.AddSingleton(sp =>
4451
{
4552
var options = sp.GetService<IOptions<Arguments>>();
53+
var repository = sp.GetService<IRepository>();
4654
var contextFactory = sp.GetService<IGitVersionContextFactory>();
47-
return Options.Create(contextFactory.Create(options.Value));
55+
return Options.Create(contextFactory.Create(options.Value, repository));
4856
});
4957

5058
services.AddModule(new BuildServerModule());

src/GitVersionCore/Model/GitVersionContext.cs

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,15 @@ namespace GitVersion
99
/// </summary>
1010
public class GitVersionContext
1111
{
12-
public IRepository Repository { get; private set; }
13-
1412
/// <summary>
1513
/// Contains the raw configuration, use Configuration for specific config based on the current GitVersion context.
1614
/// </summary>
17-
public Config FullConfiguration { get; private set; }
15+
public Config FullConfiguration { get; }
1816

19-
public SemanticVersion CurrentCommitTaggedVersion { get; private set; }
20-
public EffectiveConfiguration Configuration { get; private set; }
21-
public Branch CurrentBranch { get; private set; }
22-
public Commit CurrentCommit { get; private set; }
17+
public SemanticVersion CurrentCommitTaggedVersion { get; }
18+
public EffectiveConfiguration Configuration { get; }
19+
public Branch CurrentBranch { get; }
20+
public Commit CurrentCommit { get; }
2321
public bool IsCurrentCommitTagged => CurrentCommitTaggedVersion != null;
2422

2523
public GitVersionContext()
@@ -28,7 +26,6 @@ public GitVersionContext()
2826

2927
public GitVersionContext(IRepository repository, Branch currentBranch, Commit currentCommit, BranchConfig currentBranchConfig, Config configuration)
3028
{
31-
Repository = repository;
3229
CurrentCommit = currentCommit;
3330
CurrentBranch = currentBranch;
3431

@@ -37,17 +34,5 @@ public GitVersionContext(IRepository repository, Branch currentBranch, Commit cu
3734

3835
CurrentCommitTaggedVersion = repository.GetCurrentCommitTaggedVersion(currentCommit, Configuration);
3936
}
40-
41-
/*public void Update(IRepository repository, Branch currentBranch, Commit currentCommit, BranchConfig currentBranchConfig, Config configuration)
42-
{
43-
Repository = repository;
44-
CurrentCommit = currentCommit;
45-
CurrentBranch = currentBranch;
46-
47-
FullConfiguration = configuration;
48-
Configuration = configuration.CalculateEffectiveConfiguration(currentBranchConfig);
49-
50-
CurrentCommitTaggedVersion = repository.GetCurrentCommitTaggedVersion(currentCommit, Configuration);
51-
}*/
5237
}
5338
}

src/GitVersionCore/VersionCalculation/BaseVersionCalculator.cs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,22 @@
33
using System.Linq;
44
using System.Text.RegularExpressions;
55
using GitVersion.Logging;
6+
using LibGit2Sharp;
67
using Microsoft.Extensions.Options;
78

89
namespace GitVersion.VersionCalculation
910
{
1011
public class BaseVersionCalculator : IBaseVersionCalculator
1112
{
1213
private readonly ILog log;
14+
private readonly IRepository repository;
1315
private readonly GitVersionContext context;
1416
private readonly IVersionStrategy[] strategies;
1517

16-
public BaseVersionCalculator(ILog log, IOptions<GitVersionContext> versionContext, IEnumerable<IVersionStrategy> strategies)
18+
public BaseVersionCalculator(ILog log, IRepository repository, IOptions<GitVersionContext> versionContext, IEnumerable<IVersionStrategy> strategies)
1719
{
1820
this.log = log ?? throw new ArgumentNullException(nameof(log));
21+
this.repository = repository ?? throw new ArgumentNullException(nameof(repository));
1922
this.strategies = strategies?.ToArray() ?? Array.Empty<IVersionStrategy>();
2023
context = versionContext.Value;
2124
}
@@ -45,13 +48,12 @@ public BaseVersion GetBaseVersion()
4548
})
4649
.Select(v => new Versions
4750
{
48-
IncrementedVersion = v.MaybeIncrement(context),
51+
IncrementedVersion = v.MaybeIncrement(repository, context),
4952
Version = v
5053
})
5154
.ToList();
5255

53-
FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted
54-
(context, baseVersions);
56+
FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted(repository, context, baseVersions);
5557
var maxVersion = baseVersions.Aggregate((v1, v2) => v1.IncrementedVersion > v2.IncrementedVersion ? v1 : v2);
5658
var matchingVersionsOnceIncremented = baseVersions
5759
.Where(b => b.Version.BaseVersionSource != null && b.IncrementedVersion == maxVersion.IncrementedVersion)
@@ -87,9 +89,9 @@ public BaseVersion GetBaseVersion()
8789
}
8890
}
8991

90-
private static void FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted(GitVersionContext context, IEnumerable<Versions> baseVersions)
92+
private static void FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted(IRepository repository, GitVersionContext context, IEnumerable<Versions> baseVersions)
9193
{
92-
if (!ReleaseBranchExistsInRepo(context))
94+
if (!ReleaseBranchExistsInRepo(repository, context))
9395
{
9496
foreach (var baseVersion in baseVersions)
9597
{
@@ -103,19 +105,19 @@ private static void FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranch
103105
baseVersion.Version.Source,
104106
baseVersion.Version.ShouldIncrement,
105107
baseVersion.Version.SemanticVersion,
106-
context.Repository.ObjectDatabase.FindMergeBase(parents[0], parents[1]),
108+
repository.ObjectDatabase.FindMergeBase(parents[0], parents[1]),
107109
baseVersion.Version.BranchNameOverride);
108110
}
109111
}
110112
}
111113
}
112114

113-
private static bool ReleaseBranchExistsInRepo(GitVersionContext context)
115+
private static bool ReleaseBranchExistsInRepo(IRepository repository, GitVersionContext context)
114116
{
115117
var releaseBranchConfig = context.FullConfiguration.Branches
116118
.Where(b => b.Value.IsReleaseBranch == true)
117119
.ToList();
118-
var releaseBranches = context.Repository.Branches
120+
var releaseBranches = repository.Branches
119121
.Where(b => releaseBranchConfig.Any(c => Regex.IsMatch(b.FriendlyName, c.Value.Regex)));
120122
return releaseBranches.Any();
121123
}

src/GitVersionCore/VersionCalculation/BaseVersionCalculators/BaseVersion.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ public BaseVersion(string source, bool shouldIncrement, SemanticVersion semantic
2323

2424
public string BranchNameOverride { get; }
2525

26-
public SemanticVersion MaybeIncrement(GitVersionContext context)
26+
public SemanticVersion MaybeIncrement(IRepository repository, GitVersionContext context)
2727
{
28-
var increment = IncrementStrategyFinder.DetermineIncrementedField(context, this);
28+
var increment = IncrementStrategyFinder.DetermineIncrementedField(repository, context, this);
2929
return increment != null ? SemanticVersion.IncrementVersion(increment.Value) : SemanticVersion;
3030
}
3131

src/GitVersionCore/VersionCalculation/BaseVersionCalculators/ConfigNextVersionVersionStrategy.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using LibGit2Sharp;
23
using Microsoft.Extensions.Options;
34

45
namespace GitVersion.VersionCalculation
@@ -10,7 +11,7 @@ namespace GitVersion.VersionCalculation
1011
/// </summary>
1112
public class ConfigNextVersionVersionStrategy : VersionStrategyBase
1213
{
13-
public ConfigNextVersionVersionStrategy(IOptions<GitVersionContext> versionContext) : base(versionContext)
14+
public ConfigNextVersionVersionStrategy(IRepository repository, IOptions<GitVersionContext> versionContext) : base(repository, versionContext)
1415
{
1516
}
1617

src/GitVersionCore/VersionCalculation/BaseVersionCalculators/FallbackVersionStrategy.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace GitVersion.VersionCalculation
1212
/// </summary>
1313
public class FallbackVersionStrategy : VersionStrategyBase
1414
{
15-
public FallbackVersionStrategy(IOptions<GitVersionContext> versionContext) : base(versionContext)
15+
public FallbackVersionStrategy(IRepository repository, IOptions<GitVersionContext> versionContext) : base(repository, versionContext)
1616
{
1717
}
1818
public override IEnumerable<BaseVersion> GetVersions()
@@ -22,8 +22,7 @@ public override IEnumerable<BaseVersion> GetVersions()
2222

2323
try
2424
{
25-
var contextRepository = Context.Repository;
26-
baseVersionSource = contextRepository.GetBaseVersionSource(currentBranchTip);
25+
baseVersionSource = Repository.GetBaseVersionSource(currentBranchTip);
2726
}
2827
catch (NotFoundException exception)
2928
{

src/GitVersionCore/VersionCalculation/BaseVersionCalculators/MergeMessageVersionStrategy.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class MergeMessageVersionStrategy : VersionStrategyBase
1919
{
2020
private readonly ILog log;
2121

22-
public MergeMessageVersionStrategy(ILog log, IOptions<GitVersionContext> versionContext) : base(versionContext)
22+
public MergeMessageVersionStrategy(ILog log, IRepository repository, IOptions<GitVersionContext> versionContext) : base(repository, versionContext)
2323
{
2424
this.log = log ?? throw new ArgumentNullException(nameof(log));
2525
}

src/GitVersionCore/VersionCalculation/BaseVersionCalculators/TaggedCommitVersionStrategy.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class TaggedCommitVersionStrategy : VersionStrategyBase
1717
{
1818
private readonly IGitRepoMetadataProvider gitRepoMetadataProvider;
1919

20-
public TaggedCommitVersionStrategy(IGitRepoMetadataProvider gitRepoMetadataProvider, IOptions<GitVersionContext> versionContext) : base(versionContext)
20+
public TaggedCommitVersionStrategy(IGitRepoMetadataProvider gitRepoMetadataProvider, IRepository repository, IOptions<GitVersionContext> versionContext) : base(repository, versionContext)
2121
{
2222
this.gitRepoMetadataProvider = gitRepoMetadataProvider ?? throw new ArgumentNullException(nameof(gitRepoMetadataProvider));
2323
}

0 commit comments

Comments
 (0)