Skip to content

Commit dbfb2fc

Browse files
committed
introduce IVersionConverter & IConverterContext
1 parent 55d0664 commit dbfb2fc

24 files changed

+198
-86
lines changed

src/GitVersionCore.Tests/VersionConverters/AssemblyInfoFileUpdaterTests.cs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public void ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo(strin
4949
var variables = variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", "v"), new TestEffectiveConfiguration(), false);
5050

5151
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fileSystem);
52-
assemblyInfoFileUpdater.Execute(variables, true, workingDir, assemblyInfoFile);
52+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, true, assemblyInfoFile));
5353

5454
fileSystem.ReadAllText(fullPath).ShouldMatchApproved(c => c.SubFolder(Path.Combine("Approved", fileExtension)));
5555
}
@@ -67,7 +67,7 @@ public void ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo
6767
var variables = variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", "v"), new TestEffectiveConfiguration(), false);
6868

6969
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fileSystem);
70-
assemblyInfoFileUpdater.Execute(variables, true, workingDir, assemblyInfoFile);
70+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, true, assemblyInfoFile));
7171

7272
fileSystem.ReadAllText(fullPath).ShouldMatchApproved(c => c.SubFolder(Path.Combine("Approved", fileExtension)));
7373
}
@@ -88,7 +88,7 @@ public void ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInf
8888
var variables = variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", "v"), new TestEffectiveConfiguration(), false);
8989

9090
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fileSystem);
91-
assemblyInfoFileUpdater.Execute(variables, true, workingDir, assemblyInfoFiles.ToArray());
91+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, true, assemblyInfoFiles.ToArray()));
9292

9393
foreach (var item in assemblyInfoFiles)
9494
{
@@ -108,7 +108,7 @@ public void ShouldNotCreateAssemblyInfoFileWhenNotExistsAndNotEnsureAssemblyInfo
108108
var variables = variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", "v"), new TestEffectiveConfiguration(), false);
109109

110110
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fileSystem);
111-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
111+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
112112

113113
fileSystem.Exists(fullPath).ShouldBeFalse();
114114
}
@@ -123,7 +123,7 @@ public void ShouldNotCreateAssemblyInfoFileForUnknownSourceCodeAndEnsureAssembly
123123
var variables = variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", "v"), new TestEffectiveConfiguration(), false);
124124

125125
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fileSystem);
126-
assemblyInfoFileUpdater.Execute(variables, true, workingDir, assemblyInfoFile);
126+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, true, assemblyInfoFile));
127127

128128
fileSystem.Received(0).WriteAllText(fullPath, Arg.Any<string>());
129129
}
@@ -133,11 +133,11 @@ public void ShouldStartSearchFromWorkingDirectory()
133133
{
134134
fileSystem = Substitute.For<IFileSystem>();
135135
var workingDir = Path.GetTempPath();
136-
var assemblyInfoFiles = new HashSet<string>();
136+
var assemblyInfoFiles = Array.Empty<string>();
137137
var variables = variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", "v"), new TestEffectiveConfiguration(), false);
138138

139139
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fileSystem);
140-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFiles.ToArray());
140+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFiles.ToArray()));
141141

142142
fileSystem.Received().DirectoryGetFiles(Arg.Is(workingDir), Arg.Any<string>(), Arg.Any<SearchOption>());
143143
}
@@ -154,7 +154,7 @@ public void ShouldReplaceAssemblyVersion(string fileExtension, string assemblyFi
154154
VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) =>
155155
{
156156
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
157-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
157+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
158158

159159
fs.Received().WriteAllText(fileName, Arg.Is<string>(s =>
160160
s.Contains(@"AssemblyVersion(""2.3.0.0"")") &&
@@ -177,7 +177,7 @@ public void ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone(string fileEx
177177
VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.None, verify: (fs, variables) =>
178178
{
179179
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
180-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
180+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
181181

182182
assemblyFileContent = fs.ReadAllText(fileName);
183183
assemblyFileContent.ShouldMatchApproved(c => c.SubFolder(Path.Combine("Approved", fileExtension)));
@@ -196,7 +196,7 @@ public void ShouldReplaceAssemblyVersionInRelativePath(string fileExtension, str
196196
VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) =>
197197
{
198198
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
199-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
199+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
200200

201201
fs.Received().WriteAllText(fileName, Arg.Is<string>(s =>
202202
s.Contains(@"AssemblyVersion(""2.3.0.0"")") &&
@@ -217,7 +217,7 @@ public void ShouldReplaceAssemblyVersionInRelativePathWithWhiteSpace(string file
217217
VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) =>
218218
{
219219
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
220-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
220+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
221221

222222
fs.Received().WriteAllText(fileName, Arg.Is<string>(s =>
223223
s.Contains(@"AssemblyVersion(""2.3.0.0"")") &&
@@ -238,7 +238,7 @@ public void ShouldReplaceAssemblyVersionWithStar(string fileExtension, string as
238238
VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) =>
239239
{
240240
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
241-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
241+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
242242

243243
fs.Received().WriteAllText(fileName, Arg.Is<string>(s =>
244244
s.Contains(@"AssemblyVersion(""2.3.0.0"")") &&
@@ -259,7 +259,7 @@ public void ShouldReplaceAssemblyVersionWithAtttributeSuffix(string fileExtensio
259259
VerifyAssemblyInfoFile(assemblyFileContent, fileName, verify: (fs, variables) =>
260260
{
261261
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
262-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
262+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
263263

264264
fs.Received().WriteAllText(fileName, Arg.Is<string>(s =>
265265
!s.Contains(@"AssemblyVersionAttribute(""1.0.0.0"")") &&
@@ -283,7 +283,7 @@ public void ShouldAddAssemblyVersionIfMissingFromInfoFile(string fileExtension)
283283
VerifyAssemblyInfoFile("", fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) =>
284284
{
285285
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
286-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
286+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
287287

288288
fs.Received().WriteAllText(fileName, Arg.Is<string>(s =>
289289
s.Contains(@"AssemblyVersion(""2.3.0.0"")") &&
@@ -304,7 +304,7 @@ public void ShouldReplaceAlreadySubstitutedValues(string fileExtension, string a
304304
VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) =>
305305
{
306306
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
307-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
307+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
308308

309309
fs.Received().WriteAllText(fileName, Arg.Is<string>(s =>
310310
s.Contains(@"AssemblyVersion(""2.3.0.0"")") &&
@@ -325,7 +325,7 @@ public void ShouldReplaceAssemblyVersionWhenCreatingAssemblyVersionFileAndEnsure
325325
VerifyAssemblyInfoFile(assemblyFileContent, fileName, verify: (fs, variables) =>
326326
{
327327
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
328-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
328+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
329329

330330
fs.Received().WriteAllText(fileName, Arg.Is<string>(s =>
331331
s.Contains(@"AssemblyVersion(""2.3.1.0"")") &&
@@ -346,7 +346,7 @@ public void ShouldReplaceAssemblyVersionInRelativePathWithVariables(string fileE
346346
VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) =>
347347
{
348348
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
349-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
349+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
350350

351351
fs.Received().WriteAllText(fileName, Arg.Is<string>(s =>
352352
s.Contains(@"AssemblyVersion(""2.3.0.0"")") &&
@@ -367,7 +367,7 @@ public void ShouldReplaceAssemblyVersionInRelativePathWithVariablesAndWhiteSpace
367367
VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) =>
368368
{
369369
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
370-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
370+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
371371

372372
fs.Received().WriteAllText(fileName, Arg.Is<string>(s =>
373373
s.Contains(@"AssemblyVersion(""2.3.0.0"")") &&
@@ -390,7 +390,7 @@ public void ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile
390390
VerifyAssemblyInfoFile(assemblyFileContent, fileName, verify: (fs, variables) =>
391391
{
392392
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
393-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
393+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
394394

395395
assemblyFileContent = fs.ReadAllText(fileName);
396396
assemblyFileContent.ShouldMatchApproved(c => c.SubFolder(Path.Combine("Approved", fileExtension)));
@@ -411,7 +411,7 @@ public void Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttri
411411
VerifyAssemblyInfoFile(assemblyFileContent, fileName, verify: (fs, variables) =>
412412
{
413413
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
414-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
414+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
415415

416416
assemblyFileContent = fs.ReadAllText(fileName);
417417
assemblyFileContent.ShouldMatchApproved(c => c.SubFolder(Path.Combine("Approved", fileExtension)));
@@ -432,7 +432,7 @@ public void ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone(stri
432432
VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.None, verify: (fs, variables) =>
433433
{
434434
using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(log, fs);
435-
assemblyInfoFileUpdater.Execute(variables, false, workingDir, assemblyInfoFile);
435+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile));
436436

437437
assemblyFileContent = fs.ReadAllText(fileName);
438438
assemblyFileContent.ShouldMatchApproved(c => c.SubFolder(Path.Combine("Approved", fileExtension)));

src/GitVersionCore.Tests/VersionConverters/GitVersionInfoGeneratorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public void ShouldCreateFile(string fileExtension)
4949
var variables = variableProvider.GetVariablesFor(semanticVersion, new TestEffectiveConfiguration(), false);
5050
using var generator = new GitVersionInfoGenerator(fileSystem);
5151

52-
generator.Execute(variables, new FileWriteInfo(directory, fileName, fileExtension));
52+
generator.Execute(variables, new GitVersionInfoContext(directory, fileName, fileExtension));
5353

5454
fileSystem.ReadAllText(fullPath).ShouldMatchApproved(c => c.SubFolder(Path.Combine("Approved", fileExtension)));
5555
}

src/GitVersionCore.Tests/VersionConverters/WixFileTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ public void UpdateWixVersionFile()
6060

6161
using var wixVersionFileUpdater = sp.GetService<IWixVersionFileUpdater>();
6262

63-
var file = wixVersionFileUpdater.Execute(versionVariables, workingDir);
63+
wixVersionFileUpdater.Execute(versionVariables, new WixVersionContext(workingDir));
64+
65+
var file = Path.Combine(workingDir, WixVersionFileUpdater.WixVersionFileName);
6466
fileSystem
6567
.ReadAllText(file)
6668
.ShouldMatchApproved(c => c.SubFolder(Path.Combine("Approved")));

src/GitVersionCore/Common/IGitVersionTool.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
using System;
21
using GitVersion.OutputVariables;
32

43
namespace GitVersion
54
{
65
public interface IGitVersionTool
76
{
87
VersionVariables CalculateVersionVariables();
9-
void OutputVariables(VersionVariables variables, Action<string> writter);
8+
void OutputVariables(VersionVariables variables);
109
void UpdateAssemblyInfo(VersionVariables variables);
1110
void UpdateWixVersionFile(VersionVariables variables);
1211
void GenerateGitVersionInformation(VersionVariables variables, FileWriteInfo fileWriteInfo);

src/GitVersionCore/Core/GitVersionTool.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,13 @@ public VersionVariables CalculateVersionVariables()
7676
return versionVariables;
7777
}
7878

79-
public void OutputVariables(VersionVariables variables, Action<string> writter)
79+
public void OutputVariables(VersionVariables variables)
8080
{
81+
var arguments = options.Value;
82+
8183
using (outputGenerator)
8284
{
83-
outputGenerator.Execute(variables, writter);
85+
outputGenerator.Execute(variables, new OutputContext(arguments.TargetPath));
8486
}
8587
}
8688

@@ -92,7 +94,7 @@ public void UpdateAssemblyInfo(VersionVariables variables)
9294
{
9395
using (assemblyInfoFileUpdater)
9496
{
95-
assemblyInfoFileUpdater.Execute(variables, arguments.EnsureAssemblyInfo, arguments.TargetPath, arguments.UpdateAssemblyInfoFileName.ToArray());
97+
assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(arguments.TargetPath, arguments.EnsureAssemblyInfo, arguments.UpdateAssemblyInfoFileName.ToArray()));
9698
}
9799
}
98100
}
@@ -105,16 +107,18 @@ public void UpdateWixVersionFile(VersionVariables variables)
105107
{
106108
using (wixVersionFileUpdater)
107109
{
108-
wixVersionFileUpdater.Execute(variables, arguments.TargetPath);
110+
wixVersionFileUpdater.Execute(variables, new WixVersionContext(arguments.TargetPath));
109111
}
110112
}
111113
}
112114

113115
public void GenerateGitVersionInformation(VersionVariables variables, FileWriteInfo fileWriteInfo)
114116
{
117+
var arguments = options.Value;
118+
115119
using (gitVersionInfoGenerator)
116120
{
117-
gitVersionInfoGenerator.Execute(variables, fileWriteInfo);
121+
gitVersionInfoGenerator.Execute(variables, new GitVersionInfoContext(arguments.TargetPath, fileWriteInfo.FileName, fileWriteInfo.FileExtension));
118122
}
119123
}
120124
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
namespace GitVersion.VersionConverters.AssemblyInfo
2+
{
3+
public readonly struct AssemblyInfoContext : IConverterContext
4+
{
5+
public AssemblyInfoContext(string workingDirectory, bool ensureAssemblyInfo, params string[] assemblyInfoFiles)
6+
{
7+
AssemblyInfoFiles = assemblyInfoFiles;
8+
EnsureAssemblyInfo = ensureAssemblyInfo;
9+
WorkingDirectory = workingDirectory;
10+
}
11+
12+
public string WorkingDirectory { get; }
13+
public bool EnsureAssemblyInfo { get; }
14+
public string[] AssemblyInfoFiles { get; }
15+
}
16+
}

src/GitVersionCore/VersionConverters/AssemblyInfo/AssemblyInfoFileUpdater.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
namespace GitVersion.VersionConverters.AssemblyInfo
1010
{
11+
public interface IAssemblyInfoFileUpdater : IVersionConverter<AssemblyInfoContext>
12+
{
13+
}
14+
1115
public class AssemblyInfoFileUpdater : IAssemblyInfoFileUpdater
1216
{
1317
private readonly List<Action> restoreBackupTasks = new List<Action>();
@@ -37,12 +41,12 @@ public AssemblyInfoFileUpdater(ILog log, IFileSystem fileSystem)
3741
templateManager = new TemplateManager(TemplateType.AssemblyInfo);
3842
}
3943

40-
public void Execute(VersionVariables variables, bool ensureAssemblyInfo, string workingDirectory, params string[] assemblyInfo)
44+
public void Execute(VersionVariables variables, AssemblyInfoContext context)
4145
{
42-
var assemblyInfoFileNames = new HashSet<string>(assemblyInfo);
46+
var assemblyInfoFileNames = new HashSet<string>(context.AssemblyInfoFiles);
4347
log.Info("Updating assembly info files");
4448

45-
var assemblyInfoFiles = GetAssemblyInfoFiles(workingDirectory, assemblyInfoFileNames, ensureAssemblyInfo).ToList();
49+
var assemblyInfoFiles = GetAssemblyInfoFiles(context.WorkingDirectory, assemblyInfoFileNames, context.EnsureAssemblyInfo).ToList();
4650
log.Info($"Found {assemblyInfoFiles.Count} files");
4751

4852
var assemblyVersion = variables.AssemblySemVer;

src/GitVersionCore/VersionConverters/AssemblyInfo/IAssemblyInfoFileUpdater.cs

Lines changed: 0 additions & 10 deletions
This file was deleted.

0 commit comments

Comments
 (0)