Skip to content

Commit 151b38b

Browse files
committed
made GitversionTask DI aware
1 parent 23566f6 commit 151b38b

File tree

5 files changed

+53
-56
lines changed

5 files changed

+53
-56
lines changed

src/GitVersionCore/GitVersionCalculator.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,10 @@ public VersionVariables CalculateVersionVariables(Arguments arguments)
6161
return GetCachedGitVersionInfo(arguments.TargetBranch, arguments.CommitId, arguments.OverrideConfig, arguments.NoCache, gitPreparer);
6262
}
6363

64-
public bool TryCalculateVersionVariables(string directory, bool noFetch, out VersionVariables versionVariables)
64+
public bool TryCalculateVersionVariables(Arguments arguments, out VersionVariables versionVariables)
6565
{
6666
try
6767
{
68-
var arguments = new Arguments
69-
{
70-
NoFetch = noFetch,
71-
TargetPath = directory
72-
};
7368
versionVariables = CalculateVersionVariables(arguments);
7469
return true;
7570
}

src/GitVersionCore/IGitVersionCalculator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ namespace GitVersion
55
public interface IGitVersionCalculator
66
{
77
VersionVariables CalculateVersionVariables(Arguments arguments);
8-
bool TryCalculateVersionVariables(string directory, bool noFetch, out VersionVariables versionVariables);
8+
bool TryCalculateVersionVariables(Arguments arguments, out VersionVariables versionVariables);
99
}
1010
}

src/GitVersionTask/GitVersionTask.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
</PropertyGroup>
1818
<ItemGroup>
1919
<PackageReference Include="LibGit2Sharp" Version="$(PackageVersion_LibGit2Sharp)" />
20+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.0.0" />
2021
</ItemGroup>
2122

2223
<ItemGroup>

src/GitVersionTask/GitVersionTask.nuspec

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,20 @@
2525
<file src="netcoreapp2.1\publish\runtimes\win-x86\native\*.dll" target="tools\netstandard2.0\runtimes\win-x86\native" />
2626
<file src="netcoreapp2.1\publish\runtimes\win-x64\native\*.dll" target="tools\netstandard2.0\runtimes\win-x64\native" />
2727

28-
<file src="netcoreapp2.1\publish\LibGit2Sharp.dll" target="tools\netstandard2.0" />
29-
<file src="netcoreapp2.1\publish\Newtonsoft.Json.dll" target="tools\netstandard2.0" />
30-
<file src="netcoreapp2.1\publish\YamlDotNet.dll" target="tools\netstandard2.0" />
31-
<file src="netcoreapp2.1\publish\GitVersion*" target="tools\netstandard2.0" />
28+
<file src="netcoreapp2.1\publish\GitVersion*" target="tools\netstandard2.0" />
29+
<file src="netcoreapp2.1\publish\LibGit2Sharp.dll" target="tools\netstandard2.0" />
30+
<file src="netcoreapp2.1\publish\Newtonsoft.Json.dll" target="tools\netstandard2.0" />
31+
<file src="netcoreapp2.1\publish\YamlDotNet.dll" target="tools\netstandard2.0" />
32+
<file src="netcoreapp2.1\publish\Microsoft.Extensions*" target="tools\netstandard2.0" />
3233

33-
<file src="net472\GitVersion*" target="tools\net472" />
34-
<file src="net472\LibGit2Sharp.*" target="tools\net472" />
35-
<file src="net472\YamlDotNet.*" target="tools\net472" />
34+
<file src="net472\GitVersion*" target="tools\net472" />
35+
<file src="net472\LibGit2Sharp.*" target="tools\net472" />
36+
<file src="net472\YamlDotNet.*" target="tools\net472" />
37+
<file src="net472\Microsoft.Extensions.*" target="tools\net472" />
3638

37-
<file src="net472\lib\linux-x64\*.so" target="tools\net472\lib\linux-x64" />
38-
<file src="net472\lib\osx\*.dylib" target="tools\net472\lib\osx" />
39-
<file src="net472\lib\win32\**\*.dll" target="tools\net472\lib\win32" />
39+
<file src="net472\lib\linux-x64\*.so" target="tools\net472\lib\linux-x64" />
40+
<file src="net472\lib\osx\*.dylib" target="tools\net472\lib\osx" />
41+
<file src="net472\lib\win32\**\*.dll" target="tools\net472\lib\win32" />
4042

4143
<file src="..\..\build\*.*" target="build" />
4244
<file src="..\..\buildMultiTargeting\*.*" target="buildMultiTargeting" />

src/GitVersionTask/GitVersionTasks.cs

Lines changed: 38 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,45 @@
11
using System;
22
using System.IO;
33
using GitVersion;
4-
using GitVersion.Cache;
5-
using GitVersion.Configuration;
64
using GitVersion.Exceptions;
5+
using GitVersion.Extensions;
76
using GitVersion.OutputFormatters;
87
using GitVersion.OutputVariables;
98
using GitVersion.Extensions.GitVersionInformationResources;
109
using GitVersion.Extensions.VersionAssemblyInfoResources;
1110
using GitVersion.Logging;
12-
using GitVersion.VersionCalculation;
1311
using GitVersionTask.MsBuild;
1412
using GitVersionTask.MsBuild.Tasks;
13+
using Microsoft.Extensions.DependencyInjection;
14+
using Microsoft.Extensions.Options;
1515

1616
namespace GitVersionTask
1717
{
1818
public static class GitVersionTasks
1919
{
20-
private static readonly ILog log;
21-
private static readonly IFileSystem fileSystem;
22-
private static readonly IBuildServerResolver buildServerResolver;
23-
24-
static GitVersionTasks()
25-
{
26-
log = new Log();
27-
fileSystem = new FileSystem();
28-
buildServerResolver = new BuildServerResolver(null, log);
29-
}
30-
3120
public static bool GetVersion(GetVersion task)
3221
{
33-
return ExecuteGitVersionTask(task, t =>
22+
return ExecuteGitVersionTask(task, (t, sp) =>
3423
{
35-
if (!GetVersionVariables(t, out var versionVariables)) return;
24+
if (!GetVersionVariables(sp, out var versionVariables)) return;
3625

3726
var outputType = typeof(GetVersion);
3827
foreach (var variable in versionVariables)
3928
{
40-
outputType.GetProperty(variable.Key)?.SetValue(task, variable.Value, null);
29+
outputType.GetProperty(variable.Key)?.SetValue(t, variable.Value, null);
4130
}
4231
});
4332
}
4433

4534
public static bool UpdateAssemblyInfo(UpdateAssemblyInfo task)
4635
{
47-
return ExecuteGitVersionTask(task, t =>
36+
return ExecuteGitVersionTask(task, (t, sp) =>
4837
{
38+
var log = sp.GetService<ILog>();
4939
FileHelper.DeleteTempFiles();
5040
FileHelper.CheckForInvalidFiles(t.CompileFiles, t.ProjectFile);
5141

52-
if (!GetVersionVariables(t, out var versionVariables)) return;
42+
if (!GetVersionVariables(sp, out var versionVariables)) return;
5343

5444
var fileWriteInfo = t.IntermediateOutputPath.GetFileWriteInfo(t.Language, t.ProjectFile, "AssemblyInfo");
5545

@@ -63,9 +53,9 @@ public static bool UpdateAssemblyInfo(UpdateAssemblyInfo task)
6353

6454
public static bool GenerateGitVersionInformation(GenerateGitVersionInformation task)
6555
{
66-
return ExecuteGitVersionTask(task, t =>
56+
return ExecuteGitVersionTask(task, (t, sp) =>
6757
{
68-
if (!GetVersionVariables(t, out var versionVariables)) return;
58+
if (!GetVersionVariables(sp, out var versionVariables)) return;
6959

7060
var fileWriteInfo = t.IntermediateOutputPath.GetFileWriteInfo(t.Language, t.ProjectFile, "GitVersionInformation");
7161

@@ -77,12 +67,13 @@ public static bool GenerateGitVersionInformation(GenerateGitVersionInformation t
7767

7868
public static bool WriteVersionInfoToBuildLog(WriteVersionInfoToBuildLog task)
7969
{
80-
return ExecuteGitVersionTask(task, t =>
70+
return ExecuteGitVersionTask(task, (t, sp) =>
8171
{
82-
if (!GetVersionVariables(task, out var versionVariables)) return;
72+
if (!GetVersionVariables(sp, out var versionVariables)) return;
8373

8474
var logger = t.Log;
8575

76+
var buildServerResolver = sp.GetService<IBuildServerResolver>();
8677
var buildServer = buildServerResolver.Resolve();
8778
if (buildServer != null)
8879
{
@@ -97,13 +88,14 @@ public static bool WriteVersionInfoToBuildLog(WriteVersionInfoToBuildLog task)
9788
});
9889
}
9990

100-
private static bool ExecuteGitVersionTask<T>(T task, Action<T> action)
91+
private static bool ExecuteGitVersionTask<T>(T task, Action<T, IServiceProvider> action)
10192
where T : GitVersionTaskBase
10293
{
10394
var taskLog = task.Log;
10495
try
10596
{
106-
action(task);
97+
var sp = BuildServiceProvider(task);
98+
action(task, sp);
10799
}
108100
catch (WarningException errorException)
109101
{
@@ -119,22 +111,29 @@ private static bool ExecuteGitVersionTask<T>(T task, Action<T> action)
119111
return !taskLog.HasLoggedErrors;
120112
}
121113

122-
private static bool GetVersionVariables(GitVersionTaskBase task, out VersionVariables versionVariables)
114+
private static IServiceProvider BuildServiceProvider(GitVersionTaskBase task)
123115
{
124-
var gitVersionCache = new GitVersionCache(fileSystem, log);
125-
var metaDataCalculator = new MetaDataCalculator();
126-
var gitVersionFinder = new GitVersionFinder(log, metaDataCalculator);
127-
var configFileLocator = GetConfigFileLocator(task.ConfigFilePath);
128-
var gitPreparer = new GitPreparer(log, new Arguments());
129-
var configurationProvider = new ConfigurationProvider(fileSystem, log, configFileLocator, gitPreparer);
130-
131-
return new GitVersionCalculator(fileSystem, log, configFileLocator, configurationProvider, buildServerResolver, gitVersionCache, gitVersionFinder, metaDataCalculator, gitPreparer)
132-
.TryCalculateVersionVariables(task.SolutionDirectory, task.NoFetch, out versionVariables);
116+
var services = new ServiceCollection();
117+
118+
var arguments = new Arguments
119+
{
120+
TargetPath = task.SolutionDirectory,
121+
ConfigFile = task.ConfigFilePath,
122+
NoFetch = task.NoFetch
123+
};
124+
125+
services.AddSingleton(_ => Options.Create(arguments));
126+
services.AddModule(new GitVersionCoreModule());
127+
128+
var sp = services.BuildServiceProvider();
129+
return sp;
133130
}
134131

135-
private static IConfigFileLocator GetConfigFileLocator(string filePath = null) =>
136-
!string.IsNullOrEmpty(filePath)
137-
? (IConfigFileLocator) new NamedConfigFileLocator(filePath, fileSystem, log)
138-
: new DefaultConfigFileLocator(fileSystem, log);
132+
private static bool GetVersionVariables(IServiceProvider sp, out VersionVariables versionVariables)
133+
{
134+
var arguments = sp.GetService<IOptions<Arguments>>().Value;
135+
var gitVersionCalculator = sp.GetService<IGitVersionCalculator>();
136+
return gitVersionCalculator.TryCalculateVersionVariables(arguments, out versionVariables);
137+
}
139138
}
140139
}

0 commit comments

Comments
 (0)