1
1
using System ;
2
2
using System . IO ;
3
3
using GitVersion ;
4
- using GitVersion . Cache ;
5
- using GitVersion . Configuration ;
6
4
using GitVersion . Exceptions ;
5
+ using GitVersion . Extensions ;
7
6
using GitVersion . OutputFormatters ;
8
7
using GitVersion . OutputVariables ;
9
8
using GitVersion . Extensions . GitVersionInformationResources ;
10
9
using GitVersion . Extensions . VersionAssemblyInfoResources ;
11
10
using GitVersion . Logging ;
12
- using GitVersion . VersionCalculation ;
13
11
using GitVersionTask . MsBuild ;
14
12
using GitVersionTask . MsBuild . Tasks ;
13
+ using Microsoft . Extensions . DependencyInjection ;
14
+ using Microsoft . Extensions . Options ;
15
15
16
16
namespace GitVersionTask
17
17
{
18
18
public static class GitVersionTasks
19
19
{
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
-
31
20
public static bool GetVersion ( GetVersion task )
32
21
{
33
- return ExecuteGitVersionTask ( task , t =>
22
+ return ExecuteGitVersionTask ( task , ( t , sp ) =>
34
23
{
35
- if ( ! GetVersionVariables ( t , out var versionVariables ) ) return ;
24
+ if ( ! GetVersionVariables ( sp , out var versionVariables ) ) return ;
36
25
37
26
var outputType = typeof ( GetVersion ) ;
38
27
foreach ( var variable in versionVariables )
39
28
{
40
- outputType . GetProperty ( variable . Key ) ? . SetValue ( task , variable . Value , null ) ;
29
+ outputType . GetProperty ( variable . Key ) ? . SetValue ( t , variable . Value , null ) ;
41
30
}
42
31
} ) ;
43
32
}
44
33
45
34
public static bool UpdateAssemblyInfo ( UpdateAssemblyInfo task )
46
35
{
47
- return ExecuteGitVersionTask ( task , t =>
36
+ return ExecuteGitVersionTask ( task , ( t , sp ) =>
48
37
{
38
+ var log = sp . GetService < ILog > ( ) ;
49
39
FileHelper . DeleteTempFiles ( ) ;
50
40
FileHelper . CheckForInvalidFiles ( t . CompileFiles , t . ProjectFile ) ;
51
41
52
- if ( ! GetVersionVariables ( t , out var versionVariables ) ) return ;
42
+ if ( ! GetVersionVariables ( sp , out var versionVariables ) ) return ;
53
43
54
44
var fileWriteInfo = t . IntermediateOutputPath . GetFileWriteInfo ( t . Language , t . ProjectFile , "AssemblyInfo" ) ;
55
45
@@ -63,9 +53,9 @@ public static bool UpdateAssemblyInfo(UpdateAssemblyInfo task)
63
53
64
54
public static bool GenerateGitVersionInformation ( GenerateGitVersionInformation task )
65
55
{
66
- return ExecuteGitVersionTask ( task , t =>
56
+ return ExecuteGitVersionTask ( task , ( t , sp ) =>
67
57
{
68
- if ( ! GetVersionVariables ( t , out var versionVariables ) ) return ;
58
+ if ( ! GetVersionVariables ( sp , out var versionVariables ) ) return ;
69
59
70
60
var fileWriteInfo = t . IntermediateOutputPath . GetFileWriteInfo ( t . Language , t . ProjectFile , "GitVersionInformation" ) ;
71
61
@@ -77,12 +67,13 @@ public static bool GenerateGitVersionInformation(GenerateGitVersionInformation t
77
67
78
68
public static bool WriteVersionInfoToBuildLog ( WriteVersionInfoToBuildLog task )
79
69
{
80
- return ExecuteGitVersionTask ( task , t =>
70
+ return ExecuteGitVersionTask ( task , ( t , sp ) =>
81
71
{
82
- if ( ! GetVersionVariables ( task , out var versionVariables ) ) return ;
72
+ if ( ! GetVersionVariables ( sp , out var versionVariables ) ) return ;
83
73
84
74
var logger = t . Log ;
85
75
76
+ var buildServerResolver = sp . GetService < IBuildServerResolver > ( ) ;
86
77
var buildServer = buildServerResolver . Resolve ( ) ;
87
78
if ( buildServer != null )
88
79
{
@@ -97,13 +88,14 @@ public static bool WriteVersionInfoToBuildLog(WriteVersionInfoToBuildLog task)
97
88
} ) ;
98
89
}
99
90
100
- private static bool ExecuteGitVersionTask < T > ( T task , Action < T > action )
91
+ private static bool ExecuteGitVersionTask < T > ( T task , Action < T , IServiceProvider > action )
101
92
where T : GitVersionTaskBase
102
93
{
103
94
var taskLog = task . Log ;
104
95
try
105
96
{
106
- action ( task ) ;
97
+ var sp = BuildServiceProvider ( task ) ;
98
+ action ( task , sp ) ;
107
99
}
108
100
catch ( WarningException errorException )
109
101
{
@@ -119,22 +111,29 @@ private static bool ExecuteGitVersionTask<T>(T task, Action<T> action)
119
111
return ! taskLog . HasLoggedErrors ;
120
112
}
121
113
122
- private static bool GetVersionVariables ( GitVersionTaskBase task , out VersionVariables versionVariables )
114
+ private static IServiceProvider BuildServiceProvider ( GitVersionTaskBase task )
123
115
{
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 ;
133
130
}
134
131
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
+ }
139
138
}
140
139
}
0 commit comments