Skip to content

Commit 46f41fd

Browse files
committed
made GitversionTask DI aware, added GitVersionTaskExecutor
1 parent 57c6802 commit 46f41fd

File tree

9 files changed

+137
-109
lines changed

9 files changed

+137
-109
lines changed

src/GitVersionCore.Tests/DynamicRepositoryTests.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using GitVersion.OutputVariables;
88
using GitVersion.VersionCalculation;
99
using GitVersionCore.Tests.VersionCalculation;
10+
using Microsoft.Extensions.Options;
1011

1112
namespace GitVersionCore.Tests
1213
{
@@ -75,6 +76,7 @@ public void FindsVersionInDynamicRepo(string name, string url, string targetBran
7576
TargetPath = workingDirectory,
7677
CommitId = commitId
7778
};
79+
var options = Options.Create(arguments);
7880

7981
Directory.CreateDirectory(dynamicDirectory);
8082
Directory.CreateDirectory(workingDirectory);
@@ -94,9 +96,9 @@ public void FindsVersionInDynamicRepo(string name, string url, string targetBran
9496

9597
var nextVersionCalculator = new NextVersionCalculator(log, new MetaDataCalculator(), baseVersionCalculator);
9698
var variableProvider = new VariableProvider(nextVersionCalculator);
97-
var gitVersionCalculator = new GitVersionCalculator(testFileSystem, log, configFileLocator, configurationProvider, buildServerResolver, gitVersionCache, gitVersionFinder, gitPreparer, variableProvider);
99+
var gitVersionCalculator = new GitVersionCalculator(testFileSystem, log, configFileLocator, configurationProvider, buildServerResolver, gitVersionCache, gitVersionFinder, gitPreparer, variableProvider, options);
98100

99-
var versionVariables = gitVersionCalculator.CalculateVersionVariables(arguments);
101+
var versionVariables = gitVersionCalculator.CalculateVersionVariables();
100102

101103
Assert.AreEqual(expectedFullSemVer, versionVariables.FullSemVer);
102104
}

src/GitVersionCore.Tests/GitVersionExecutorTests.cs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
using GitVersion.Logging;
1515
using GitVersion.VersionCalculation;
1616
using GitVersionCore.Tests.VersionCalculation;
17+
using Microsoft.Extensions.Options;
1718
using Environment = System.Environment;
1819

1920
namespace GitVersionCore.Tests
@@ -156,7 +157,7 @@ public void CacheFileExistsOnDisk()
156157
var arguments = new Arguments { TargetPath = fixture.RepositoryPath };
157158
var gitVersionCalculator = GetGitVersionCalculator(arguments);
158159

159-
vv = gitVersionCalculator.CalculateVersionVariables(arguments);
160+
vv = gitVersionCalculator.CalculateVersionVariables();
160161
vv.AssemblySemVer.ShouldBe("4.10.3.0");
161162
});
162163

@@ -218,7 +219,7 @@ public void CacheFileExistsOnDiskWhenOverrideConfigIsSpecifiedVersionShouldBeDyn
218219
arguments = new Arguments { TargetPath = fixture.RepositoryPath, OverrideConfig = new Config { TagPrefix = "prefix" } };
219220

220221
var gitVersionCalculator = GetGitVersionCalculator(arguments);
221-
vv = gitVersionCalculator.CalculateVersionVariables(arguments);
222+
vv = gitVersionCalculator.CalculateVersionVariables();
222223

223224
vv.AssemblySemVer.ShouldBe("0.1.0.0");
224225

@@ -286,13 +287,13 @@ public void ConfigChangeInvalidatesCache()
286287

287288
var gitVersionCalculator = GetGitVersionCalculator(arguments);
288289

289-
vv = gitVersionCalculator.CalculateVersionVariables(arguments);
290+
vv = gitVersionCalculator.CalculateVersionVariables();
290291
vv.AssemblySemVer.ShouldBe("4.10.3.0");
291292

292293
var configPath = Path.Combine(fixture.RepositoryPath, "GitVersionConfig.yaml");
293294
fileSystem.WriteAllText(configPath, "next-version: 5.0");
294295

295-
vv = gitVersionCalculator.CalculateVersionVariables(arguments);
296+
vv = gitVersionCalculator.CalculateVersionVariables();
296297
vv.AssemblySemVer.ShouldBe("5.0.0.0");
297298
});
298299
}
@@ -340,11 +341,11 @@ public void NoCacheBypassesCache()
340341
var gitVersionCalculator = GetGitVersionCalculator(arguments);
341342

342343
fileSystem.WriteAllText(vv.FileName, versionCacheFileContent);
343-
vv = gitVersionCalculator.CalculateVersionVariables(arguments);
344+
vv = gitVersionCalculator.CalculateVersionVariables();
344345
vv.AssemblySemVer.ShouldBe("4.10.3.0");
345346

346347
arguments.NoCache = true;
347-
vv = gitVersionCalculator.CalculateVersionVariables(arguments);
348+
vv = gitVersionCalculator.CalculateVersionVariables();
348349
vv.AssemblySemVer.ShouldBe("0.1.0.0");
349350
});
350351
}
@@ -359,7 +360,7 @@ public void WorkingDirectoryWithoutGit()
359360

360361
var gitVersionCalculator = GetGitVersionCalculator(arguments);
361362

362-
var exception = Assert.Throws<DirectoryNotFoundException>(() => gitVersionCalculator.CalculateVersionVariables(arguments));
363+
var exception = Assert.Throws<DirectoryNotFoundException>(() => gitVersionCalculator.CalculateVersionVariables());
363364
exception.Message.ShouldContain("Can't find the .git directory in");
364365
});
365366
}
@@ -430,7 +431,7 @@ public void DynamicRepositoriesShouldNotErrorWithFailedToFindGitDirectory()
430431

431432
var gitVersionCalculator = GetGitVersionCalculator(arguments);
432433

433-
gitVersionCalculator.CalculateVersionVariables(arguments);
434+
gitVersionCalculator.CalculateVersionVariables();
434435
});
435436
}
436437

@@ -500,7 +501,7 @@ private void RepositoryScope(Action<EmptyRepositoryFixture, VersionVariables> fi
500501
var gitVersionCalculator = GetGitVersionCalculator(arguments);
501502

502503
fixture.Repository.MakeACommit();
503-
var vv = gitVersionCalculator.CalculateVersionVariables(arguments);
504+
var vv = gitVersionCalculator.CalculateVersionVariables();
504505

505506
vv.AssemblySemVer.ShouldBe("0.1.0.0");
506507
vv.FileName.ShouldNotBeNullOrEmpty();
@@ -518,16 +519,17 @@ private void RepositoryScope(ILog _log, Action<EmptyRepositoryFixture, VersionVa
518519
using var fixture = new EmptyRepositoryFixture();
519520

520521
var arguments = new Arguments { TargetPath = fixture.RepositoryPath };
522+
var options = Options.Create(arguments);
521523

522524
var gitPreparer = new GitPreparer(_log, arguments);
523525
var configurationProvider = new ConfigurationProvider(fileSystem, _log, configFileLocator, gitPreparer);
524526
var baseVersionCalculator = new BaseVersionCalculator(log, null);
525527
var nextVersionCalculator = new NextVersionCalculator(log, new MetaDataCalculator(), baseVersionCalculator);
526528
var variableProvider = new VariableProvider(nextVersionCalculator);
527-
var gitVersionCalculator = new GitVersionCalculator(fileSystem, _log, configFileLocator, configurationProvider, buildServerResolver, gitVersionCache, gitVersionFinder, gitPreparer, variableProvider);
529+
var gitVersionCalculator = new GitVersionCalculator(fileSystem, _log, configFileLocator, configurationProvider, buildServerResolver, gitVersionCache, gitVersionFinder, gitPreparer, variableProvider, options);
528530

529531
fixture.Repository.MakeACommit();
530-
var vv = gitVersionCalculator.CalculateVersionVariables(arguments);
532+
var vv = gitVersionCalculator.CalculateVersionVariables();
531533

532534
vv.AssemblySemVer.ShouldBe("0.1.0.0");
533535
vv.FileName.ShouldNotBeNullOrEmpty();
@@ -537,12 +539,14 @@ private void RepositoryScope(ILog _log, Action<EmptyRepositoryFixture, VersionVa
537539

538540
private GitVersionCalculator GetGitVersionCalculator(Arguments arguments)
539541
{
542+
var options = Options.Create(arguments);
543+
540544
var gitPreparer = new GitPreparer(log, arguments);
541545
var configurationProvider = new ConfigurationProvider(fileSystem, log, configFileLocator, gitPreparer);
542546
var baseVersionCalculator = new BaseVersionCalculator(log, null);
543547
var nextVersionCalculator = new NextVersionCalculator(log, new MetaDataCalculator(), baseVersionCalculator);
544548
var variableProvider = new VariableProvider(nextVersionCalculator);
545-
var gitVersionCalculator = new GitVersionCalculator(fileSystem, log, configFileLocator, configurationProvider, buildServerResolver, gitVersionCache, gitVersionFinder, gitPreparer, variableProvider);
549+
var gitVersionCalculator = new GitVersionCalculator(fileSystem, log, configFileLocator, configurationProvider, buildServerResolver, gitVersionCache, gitVersionFinder, gitPreparer, variableProvider, options);
546550
return gitVersionCalculator;
547551
}
548552
}

src/GitVersionCore/GitVersionCalculator.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using GitVersion.OutputVariables;
44
using GitVersion.Cache;
55
using GitVersion.Logging;
6+
using Microsoft.Extensions.Options;
67

78
namespace GitVersion
89
{
@@ -17,11 +18,12 @@ public class GitVersionCalculator : IGitVersionCalculator
1718
private readonly IGitVersionFinder gitVersionFinder;
1819
private readonly IGitPreparer gitPreparer;
1920
private readonly IVariableProvider variableProvider;
21+
private readonly Arguments arguments;
2022

2123
public GitVersionCalculator(IFileSystem fileSystem, ILog log, IConfigFileLocator configFileLocator,
2224
IConfigurationProvider configurationProvider,
2325
IBuildServerResolver buildServerResolver, IGitVersionCache gitVersionCache,
24-
IGitVersionFinder gitVersionFinder, IGitPreparer gitPreparer, IVariableProvider variableProvider)
26+
IGitVersionFinder gitVersionFinder, IGitPreparer gitPreparer, IVariableProvider variableProvider, IOptions<Arguments> options)
2527
{
2628
this.fileSystem = fileSystem;
2729
this.log = log;
@@ -32,9 +34,10 @@ public GitVersionCalculator(IFileSystem fileSystem, ILog log, IConfigFileLocator
3234
this.gitVersionFinder = gitVersionFinder;
3335
this.gitPreparer = gitPreparer;
3436
this.variableProvider = variableProvider;
37+
this.arguments = options.Value;
3538
}
3639

37-
public VersionVariables CalculateVersionVariables(Arguments arguments)
40+
public VersionVariables CalculateVersionVariables()
3841
{
3942
var buildServer = buildServerResolver.Resolve();
4043

@@ -60,11 +63,11 @@ public VersionVariables CalculateVersionVariables(Arguments arguments)
6063
return GetCachedGitVersionInfo(arguments.TargetBranch, arguments.CommitId, arguments.OverrideConfig, arguments.NoCache);
6164
}
6265

63-
public bool TryCalculateVersionVariables(Arguments arguments, out VersionVariables versionVariables)
66+
public bool TryCalculateVersionVariables(out VersionVariables versionVariables)
6467
{
6568
try
6669
{
67-
versionVariables = CalculateVersionVariables(arguments);
70+
versionVariables = CalculateVersionVariables();
6871
return true;
6972
}
7073
catch (Exception ex)

src/GitVersionCore/IGitVersionCalculator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ namespace GitVersion
44
{
55
public interface IGitVersionCalculator
66
{
7-
VersionVariables CalculateVersionVariables(Arguments arguments);
8-
bool TryCalculateVersionVariables(Arguments arguments, out VersionVariables versionVariables);
7+
VersionVariables CalculateVersionVariables();
8+
bool TryCalculateVersionVariables(out VersionVariables versionVariables);
99
}
1010
}

src/GitVersionExe/ExecCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void Execute()
3737
{
3838
log.Info($"Running on {(runningOnUnix ? "Unix" : "Windows")}.");
3939

40-
var variables = gitVersionCalculator.CalculateVersionVariables(arguments);
40+
var variables = gitVersionCalculator.CalculateVersionVariables();
4141

4242
switch (arguments.Output)
4343
{

src/GitVersionTask.Tests/GitVersionTaskDirectoryTests.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using LibGit2Sharp;
1010
using NUnit.Framework;
1111
using GitVersionTask.Tests.Helpers;
12+
using Microsoft.Extensions.Options;
1213

1314
namespace GitVersionTask.Tests
1415
{
@@ -60,6 +61,7 @@ public void Finds_GitDirectory()
6061
try
6162
{
6263
var arguments = new Arguments { TargetPath = workDirectory, NoFetch = true };
64+
var options = Options.Create(arguments);
6365

6466
var gitPreparer = new GitPreparer(log, arguments);
6567
var configurationProvider = new ConfigurationProvider(testFileSystem, log, configFileLocator, gitPreparer);
@@ -68,9 +70,9 @@ public void Finds_GitDirectory()
6870
var nextVersionCalculator = new NextVersionCalculator(log, metaDataCalculator, baseVersionCalculator);
6971
var variableProvider = new VariableProvider(nextVersionCalculator);
7072

71-
var gitVersionCalculator = new GitVersionCalculator(testFileSystem, log, configFileLocator, configurationProvider, buildServerResolver, gitVersionCache, gitVersionFinder, gitPreparer, variableProvider);
73+
var gitVersionCalculator = new GitVersionCalculator(testFileSystem, log, configFileLocator, configurationProvider, buildServerResolver, gitVersionCache, gitVersionFinder, gitPreparer, variableProvider, options);
7274

73-
gitVersionCalculator.CalculateVersionVariables(arguments);
75+
gitVersionCalculator.CalculateVersionVariables();
7476
}
7577
catch (Exception ex)
7678
{
@@ -90,16 +92,17 @@ public void Finds_GitDirectory_In_Parent()
9092
try
9193
{
9294
var arguments = new Arguments { TargetPath = childDir, NoFetch = true };
95+
var options = Options.Create(arguments);
9396

9497
var gitPreparer = new GitPreparer(log, arguments);
9598
var configurationProvider = new ConfigurationProvider(testFileSystem, log, configFileLocator, gitPreparer);
9699
var baseVersionCalculator = new BaseVersionCalculator(log, null);
97100
var nextVersionCalculator = new NextVersionCalculator(log, metaDataCalculator, baseVersionCalculator);
98101
var variableProvider = new VariableProvider(nextVersionCalculator);
99102

100-
var gitVersionCalculator = new GitVersionCalculator(testFileSystem, log, configFileLocator, configurationProvider, buildServerResolver, gitVersionCache, gitVersionFinder, gitPreparer, variableProvider);
103+
var gitVersionCalculator = new GitVersionCalculator(testFileSystem, log, configFileLocator, configurationProvider, buildServerResolver, gitVersionCache, gitVersionFinder, gitPreparer, variableProvider, options);
101104

102-
gitVersionCalculator.CalculateVersionVariables(arguments);
105+
gitVersionCalculator.CalculateVersionVariables();
103106
}
104107
catch (Exception ex)
105108
{
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
using System.IO;
2+
using GitVersion;
3+
using GitVersion.Extensions.GitVersionInformationResources;
4+
using GitVersion.Extensions.VersionAssemblyInfoResources;
5+
using GitVersion.Logging;
6+
using GitVersion.OutputFormatters;
7+
using GitVersionTask.MsBuild.Tasks;
8+
9+
namespace GitVersionTask
10+
{
11+
public class GitVersionTaskExecutor : IGitVersionTaskExecutor
12+
{
13+
private readonly IFileSystem fileSystem;
14+
private readonly ILog log;
15+
private readonly IBuildServerResolver buildServerResolver;
16+
private readonly IGitVersionCalculator gitVersionCalculator;
17+
18+
public GitVersionTaskExecutor(IFileSystem fileSystem, ILog log, IBuildServerResolver buildServerResolver, IGitVersionCalculator gitVersionCalculator)
19+
{
20+
this.fileSystem = fileSystem;
21+
this.log = log;
22+
this.buildServerResolver = buildServerResolver;
23+
this.gitVersionCalculator = gitVersionCalculator;
24+
}
25+
26+
public void GetVersion(GetVersion task)
27+
{
28+
gitVersionCalculator.TryCalculateVersionVariables(out var versionVariables);
29+
var outputType = typeof(GetVersion);
30+
foreach (var variable in versionVariables)
31+
{
32+
outputType.GetProperty(variable.Key)?.SetValue(task, variable.Value, null);
33+
}
34+
}
35+
36+
public void UpdateAssemblyInfo(UpdateAssemblyInfo task)
37+
{
38+
FileHelper.DeleteTempFiles();
39+
FileHelper.CheckForInvalidFiles(task.CompileFiles, task.ProjectFile);
40+
41+
gitVersionCalculator.TryCalculateVersionVariables(out var versionVariables);
42+
var fileWriteInfo = task.IntermediateOutputPath.GetFileWriteInfo(task.Language, task.ProjectFile, "AssemblyInfo");
43+
44+
task.AssemblyInfoTempFilePath = Path.Combine(fileWriteInfo.WorkingDirectory, fileWriteInfo.FileName);
45+
46+
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(fileWriteInfo.FileName, fileWriteInfo.WorkingDirectory, versionVariables, fileSystem, log, true);
47+
assemblyInfoFileUpdater.Update();
48+
assemblyInfoFileUpdater.CommitChanges();
49+
}
50+
51+
public void GenerateGitVersionInformation(GenerateGitVersionInformation task)
52+
{
53+
gitVersionCalculator.TryCalculateVersionVariables(out var versionVariables);
54+
var fileWriteInfo = task.IntermediateOutputPath.GetFileWriteInfo(task.Language, task.ProjectFile, "GitVersionInformation");
55+
56+
task.GitVersionInformationFilePath = Path.Combine(fileWriteInfo.WorkingDirectory, fileWriteInfo.FileName);
57+
var generator = new GitVersionInformationGenerator(fileWriteInfo.FileName, fileWriteInfo.WorkingDirectory, versionVariables, fileSystem);
58+
generator.Generate();
59+
}
60+
61+
public void WriteVersionInfoToBuildLog(WriteVersionInfoToBuildLog task)
62+
{
63+
var logger = task.Log;
64+
65+
gitVersionCalculator.TryCalculateVersionVariables(out var versionVariables);
66+
var buildServer = buildServerResolver.Resolve();
67+
if (buildServer != null)
68+
{
69+
logger.LogMessage($"Executing GenerateSetVersionMessage for '{buildServer.GetType().Name}'.");
70+
logger.LogMessage(buildServer.GenerateSetVersionMessage(versionVariables));
71+
logger.LogMessage($"Executing GenerateBuildLogOutput for '{buildServer.GetType().Name}'.");
72+
foreach (var buildParameter in BuildOutputFormatter.GenerateBuildLogOutput(buildServer, versionVariables))
73+
{
74+
logger.LogMessage(buildParameter);
75+
}
76+
}
77+
}
78+
}
79+
}

0 commit comments

Comments
 (0)