Skip to content

Commit bc08fbd

Browse files
committed
introduced ConfigFileLocatorFactory
1 parent 79aa7f8 commit bc08fbd

File tree

5 files changed

+46
-22
lines changed

5 files changed

+46
-22
lines changed

src/GitVersionCore.Tests/NamedConfigFileLocatorTests.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,16 @@ public class NamedConfigFileLocatorTests : TestBase
2222
private NamedConfigFileLocator configFileLocator;
2323
private ILog log;
2424
private IConfigInitStepFactory stepFactory;
25+
private IOptions<Arguments> options;
2526

2627
[SetUp]
2728
public void Setup()
2829
{
2930
fileSystem = new TestFileSystem();
3031
log = new NullLog();
31-
configFileLocator = new NamedConfigFileLocator("my-config.yaml", fileSystem, log);
32+
33+
options = Options.Create(new Arguments { ConfigFile = "my-config.yaml" });
34+
configFileLocator = new NamedConfigFileLocator(fileSystem, log, options);
3235
repoPath = DefaultRepoPath;
3336
workingPath = DefaultWorkingPath;
3437
stepFactory = new ConfigInitStepFactory();
@@ -59,7 +62,7 @@ public void NoWarnOnCustomYmlFile()
5962
var logAppender = new TestLogAppender(Action);
6063
log = new Log(logAppender);
6164

62-
configFileLocator = new NamedConfigFileLocator("my-config.yaml", fileSystem, log);
65+
configFileLocator = new NamedConfigFileLocator(fileSystem, log, options);
6366

6467
var gitPreparer = new GitPreparer(log, Options.Create(new Arguments { TargetPath = repoPath }));
6568
var configInitWizard = new ConfigInitWizard(new ConsoleAdapter(), stepFactory);
@@ -80,7 +83,7 @@ public void NoWarnOnCustomYmlFileOutsideRepoPath()
8083
var logAppender = new TestLogAppender(Action);
8184
log = new Log(logAppender);
8285

83-
configFileLocator = new NamedConfigFileLocator("my-config.yaml", fileSystem, log);
86+
configFileLocator = new NamedConfigFileLocator(fileSystem, log, options);
8487
var gitPreparer = new GitPreparer(log, Options.Create(new Arguments { TargetPath = repoPath }));
8588
var configInitWizard = new ConfigInitWizard(new ConsoleAdapter(), stepFactory);
8689
var configurationProvider = new ConfigurationProvider(fileSystem, log, configFileLocator, gitPreparer, configInitWizard);
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System;
2+
using GitVersion.Logging;
3+
using Microsoft.Extensions.Options;
4+
5+
namespace GitVersion.Configuration
6+
{
7+
public class ConfigFileLocatorFactory : IConfigFileLocatorFactory
8+
{
9+
private readonly IFileSystem fileSystem;
10+
private readonly ILog log;
11+
private readonly IOptions<Arguments> options;
12+
13+
public ConfigFileLocatorFactory(IFileSystem fileSystem, ILog log, IOptions<Arguments> options)
14+
{
15+
this.fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem));
16+
this.log = log ?? throw new ArgumentNullException(nameof(log));
17+
this.options = options ?? throw new ArgumentNullException(nameof(fileSystem));
18+
}
19+
20+
public IConfigFileLocator Create()
21+
{
22+
return string.IsNullOrWhiteSpace(options.Value.ConfigFile)
23+
? new DefaultConfigFileLocator(fileSystem, log) as IConfigFileLocator
24+
: new NamedConfigFileLocator(fileSystem, log, options);
25+
}
26+
}
27+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace GitVersion.Configuration
2+
{
3+
public interface IConfigFileLocatorFactory
4+
{
5+
IConfigFileLocator Create();
6+
}
7+
}

src/GitVersionCore/Configuration/NamedConfigFileLocator.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@
22
using System.IO;
33
using GitVersion.Exceptions;
44
using GitVersion.Logging;
5+
using Microsoft.Extensions.Options;
56

67
namespace GitVersion.Configuration
78
{
89
public class NamedConfigFileLocator : ConfigFileLocator
910
{
10-
public NamedConfigFileLocator(string filePath, IFileSystem fileSystem, ILog log) : base(fileSystem, log)
11+
public NamedConfigFileLocator(IFileSystem fileSystem, ILog log, IOptions<Arguments> options) : base(fileSystem, log)
1112
{
13+
var arguments = options.Value;
14+
var filePath = arguments.ConfigFile;
1215
if (string.IsNullOrEmpty(filePath)) throw new ArgumentNullException(nameof(filePath), "Empty file path provided!");
1316
FilePath = filePath;
1417
}

src/GitVersionCore/GitVersionCoreModule.cs

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System;
21
using GitVersion.BuildServers;
32
using GitVersion.Cache;
43
using Microsoft.Extensions.DependencyInjection;
@@ -7,7 +6,6 @@
76
using GitVersion.OutputVariables;
87
using GitVersion.VersionCalculation;
98
using GitVersion.VersionCalculation.BaseVersionCalculators;
10-
using Microsoft.Extensions.Options;
119
using GitVersion.Configuration.Init;
1210
using GitVersion.Extensions;
1311

@@ -35,8 +33,9 @@ public void RegisterTypes(IServiceCollection services)
3533

3634
services.AddSingleton<IBuildServerResolver, BuildServerResolver>();
3735
services.AddSingleton<IGitPreparer, GitPreparer>();
36+
services.AddSingleton<IConfigFileLocatorFactory, ConfigFileLocatorFactory>();
3837

39-
services.AddSingleton(GetConfigFileLocator);
38+
services.AddSingleton(sp => sp.GetService<IConfigFileLocatorFactory>().Create());
4039

4140
RegisterBuildServers(services);
4241

@@ -45,21 +44,6 @@ public void RegisterTypes(IServiceCollection services)
4544
services.AddModule(new GitVersionInitModule());
4645
}
4746

48-
private static IConfigFileLocator GetConfigFileLocator(IServiceProvider sp)
49-
{
50-
var fileSystem = sp.GetService<IFileSystem>();
51-
var log = sp.GetService<ILog>();
52-
var arguments = sp.GetService<IOptions<Arguments>>();
53-
54-
var configFile = arguments.Value.ConfigFile;
55-
56-
var configFileLocator = string.IsNullOrWhiteSpace(configFile)
57-
? new DefaultConfigFileLocator(fileSystem, log) as IConfigFileLocator
58-
: new NamedConfigFileLocator(configFile, fileSystem, log);
59-
60-
return configFileLocator;
61-
}
62-
6347
private static void RegisterBuildServers(IServiceCollection services)
6448
{
6549
services.AddSingleton<IBuildServer, ContinuaCi>();

0 commit comments

Comments
 (0)