Skip to content

Commit bcd2eb9

Browse files
committed
Allows execution of updating project files without updating AssemblyInfo files
1 parent 0b647de commit bcd2eb9

File tree

7 files changed

+87
-45
lines changed

7 files changed

+87
-45
lines changed

src/GitVersionCore/Core/GitVersionTool.cs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using GitVersion.OutputVariables;
55
using GitVersion.VersionCalculation;
66
using GitVersion.VersionCalculation.Cache;
7-
using GitVersion.VersionConverters;
87
using GitVersion.VersionConverters.AssemblyInfo;
98
using GitVersion.VersionConverters.GitVersionInfo;
109
using GitVersion.VersionConverters.OutputGenerator;
@@ -95,23 +94,19 @@ public void OutputVariables(VersionVariables variables)
9594
public void UpdateAssemblyInfo(VersionVariables variables)
9695
{
9796
var gitVersionOptions = options.Value;
97+
var assemblyInfoContext = new AssemblyInfoContext(gitVersionOptions.WorkingDirectory, gitVersionOptions.AssemblyInfo.EnsureAssemblyInfo, gitVersionOptions.AssemblyInfo.Files.ToArray());
9898

99-
if (gitVersionOptions.AssemblyInfo.ShouldUpdate)
99+
if (gitVersionOptions.AssemblyInfo.UpdateProjectFiles)
100100
{
101-
var assemblyInfoContext = new AssemblyInfoContext(gitVersionOptions.WorkingDirectory, gitVersionOptions.AssemblyInfo.EnsureAssemblyInfo, gitVersionOptions.AssemblyInfo.Files.ToArray());
102-
if (gitVersionOptions.AssemblyInfo.IsTargetingProjectFiles)
101+
using (projectFileUpdater)
103102
{
104-
using (projectFileUpdater)
105-
{
106-
projectFileUpdater.Execute(variables, assemblyInfoContext);
107-
}
103+
projectFileUpdater.Execute(variables, assemblyInfoContext);
108104
}
109-
else
105+
} else if (gitVersionOptions.AssemblyInfo.UpdateAssemblyInfo)
106+
{
107+
using (assemblyInfoFileUpdater)
110108
{
111-
using (assemblyInfoFileUpdater)
112-
{
113-
assemblyInfoFileUpdater.Execute(variables, assemblyInfoContext);
114-
}
109+
assemblyInfoFileUpdater.Execute(variables, assemblyInfoContext);
115110
}
116111
}
117112
}

src/GitVersionCore/Model/AssemblyInfoData.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ namespace GitVersion
44
{
55
public class AssemblyInfoData
66
{
7-
public bool IsTargetingProjectFiles;
8-
public bool ShouldUpdate;
7+
public bool UpdateAssemblyInfo;
8+
public bool UpdateProjectFiles;
99
public bool EnsureAssemblyInfo;
1010
public ISet<string> Files = new HashSet<string>();
1111
}

src/GitVersionExe.Tests/ArgumentParserTests.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -320,8 +320,8 @@ public void UpdateAssemblyInfoWithFilename()
320320

321321
var arguments = argumentParser.ParseArguments($"-targetpath {repo.RepositoryPath} -updateAssemblyInfo CommonAssemblyInfo.cs");
322322
arguments.UpdateAssemblyInfo.ShouldBe(true);
323-
arguments.UpdateAssemblyInfoFileName.Count.ShouldBe(1);
324-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => Path.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
323+
arguments.UpdateFileNames.Count.ShouldBe(1);
324+
arguments.UpdateFileNames.ShouldContain(x => Path.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
325325
}
326326

327327
[Test]
@@ -337,9 +337,9 @@ public void UpdateAssemblyInfoWithMultipleFilenames()
337337

338338
var arguments = argumentParser.ParseArguments($"-targetpath {repo.RepositoryPath} -updateAssemblyInfo CommonAssemblyInfo.cs VersionAssemblyInfo.cs");
339339
arguments.UpdateAssemblyInfo.ShouldBe(true);
340-
arguments.UpdateAssemblyInfoFileName.Count.ShouldBe(2);
341-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => Path.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
342-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => Path.GetFileName(x).Equals("VersionAssemblyInfo.cs"));
340+
arguments.UpdateFileNames.Count.ShouldBe(2);
341+
arguments.UpdateFileNames.ShouldContain(x => Path.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
342+
arguments.UpdateFileNames.ShouldContain(x => Path.GetFileName(x).Equals("VersionAssemblyInfo.cs"));
343343
}
344344

345345
[Test]
@@ -360,10 +360,10 @@ public void UpdateAssemblyInfoWithMultipleFilenamesMatchingGlobbing()
360360

361361
var arguments = argumentParser.ParseArguments($"-targetpath {repo.RepositoryPath} -updateAssemblyInfo **/*AssemblyInfo.cs");
362362
arguments.UpdateAssemblyInfo.ShouldBe(true);
363-
arguments.UpdateAssemblyInfoFileName.Count.ShouldBe(3);
364-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => Path.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
365-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => Path.GetFileName(x).Equals("VersionAssemblyInfo.cs"));
366-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => Path.GetFileName(x).Equals("LocalAssemblyInfo.cs"));
363+
arguments.UpdateFileNames.Count.ShouldBe(3);
364+
arguments.UpdateFileNames.ShouldContain(x => Path.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
365+
arguments.UpdateFileNames.ShouldContain(x => Path.GetFileName(x).Equals("VersionAssemblyInfo.cs"));
366+
arguments.UpdateFileNames.ShouldContain(x => Path.GetFileName(x).Equals("LocalAssemblyInfo.cs"));
367367
}
368368

369369
[Test]
@@ -379,8 +379,8 @@ public void UpdateAssemblyInfoWithRelativeFilename()
379379

380380
var arguments = argumentParser.ParseArguments($"-targetpath {targetPath} -updateAssemblyInfo ..\\..\\CommonAssemblyInfo.cs");
381381
arguments.UpdateAssemblyInfo.ShouldBe(true);
382-
arguments.UpdateAssemblyInfoFileName.Count.ShouldBe(1);
383-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => Path.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
382+
arguments.UpdateFileNames.Count.ShouldBe(1);
383+
arguments.UpdateFileNames.ShouldContain(x => Path.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
384384
}
385385

386386
[Test]

src/GitVersionExe/ArgumentParser.cs

Lines changed: 56 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public Arguments ParseArguments(string[] commandLineArguments)
104104
: firstArgument;
105105

106106
arguments.TargetPath = arguments.TargetPath.TrimEnd('/', '\\');
107-
arguments.UpdateAssemblyInfoFileName = ResolveFiles(arguments.TargetPath, arguments.UpdateAssemblyInfoFileName).ToHashSet();
107+
arguments.UpdateFileNames = ResolveFiles(arguments.TargetPath, arguments.UpdateFileNames).ToHashSet();
108108
arguments.NoFetch = arguments.NoFetch || buildAgent != null && buildAgent.PreventFetch();
109109

110110
return arguments;
@@ -205,6 +205,12 @@ private static bool ParseSwitches(Arguments arguments, string name, string[] val
205205

206206
if (ParseExecArguments(arguments, name, values, value)) return true;
207207

208+
if (name.IsSwitch("updateprojectfiles"))
209+
{
210+
ParseUpdateProjectInfo(arguments, value, values);
211+
return true;
212+
}
213+
208214
if (name.IsSwitch("updateAssemblyInfo"))
209215
{
210216
ParseUpdateAssemblyInfo(arguments, value, values);
@@ -236,12 +242,6 @@ private static bool ParseSwitches(Arguments arguments, string name, string[] val
236242
return true;
237243
}
238244

239-
if (name.IsSwitch("updateprojectfiles"))
240-
{
241-
arguments.UpdateProjectFiles = true;
242-
return true;
243-
}
244-
245245
if (name.IsSwitch("nofetch"))
246246
{
247247
arguments.NoFetch = true;
@@ -424,7 +424,7 @@ private static void ParseEnsureAssemblyInfo(Arguments arguments, string value)
424424
arguments.EnsureAssemblyInfo = false;
425425
}
426426

427-
if (arguments.UpdateAssemblyInfoFileName.Count > 1 && arguments.EnsureAssemblyInfo)
427+
if (arguments.UpdateFileNames.Count > 1 && arguments.EnsureAssemblyInfo)
428428
{
429429
throw new WarningException("Can't specify multiple assembly info files when using /ensureassemblyinfo switch, either use a single assembly info file or do not specify /ensureassemblyinfo and create assembly info files manually");
430430
}
@@ -504,28 +504,73 @@ private static void ParseUpdateAssemblyInfo(Arguments arguments, string value, s
504504
arguments.UpdateAssemblyInfo = true;
505505
foreach (var v in values)
506506
{
507-
arguments.UpdateAssemblyInfoFileName.Add(v);
507+
arguments.UpdateFileNames.Add(v);
508508
}
509509
}
510510
else if (!value.IsSwitchArgument())
511511
{
512512
arguments.UpdateAssemblyInfo = true;
513513
if (value != null)
514514
{
515-
arguments.UpdateAssemblyInfoFileName.Add(value);
515+
arguments.UpdateFileNames.Add(value);
516516
}
517517
}
518518
else
519519
{
520520
arguments.UpdateAssemblyInfo = true;
521521
}
522522

523-
if (arguments.UpdateAssemblyInfoFileName.Count > 1 && arguments.EnsureAssemblyInfo)
523+
if (arguments.UpdateProjectFiles)
524+
{
525+
throw new WarningException("Cannot specify both updateprojectfiles and updateassemblyinfo in the same run. Please rerun GitVersion with only one parameter");
526+
}
527+
if (arguments.UpdateFileNames.Count > 1 && arguments.EnsureAssemblyInfo)
524528
{
525529
throw new WarningException("Can't specify multiple assembly info files when using -ensureassemblyinfo switch, either use a single assembly info file or do not specify -ensureassemblyinfo and create assembly info files manually");
526530
}
527531
}
528532

533+
private static void ParseUpdateProjectInfo(Arguments arguments, string value, string[] values)
534+
{
535+
if (value.IsTrue())
536+
{
537+
arguments.UpdateProjectFiles = true;
538+
}
539+
else if (value.IsFalse())
540+
{
541+
arguments.UpdateProjectFiles = false;
542+
}
543+
else if (values != null && values.Length > 1)
544+
{
545+
arguments.UpdateProjectFiles = true;
546+
foreach (var v in values)
547+
{
548+
arguments.UpdateFileNames.Add(v);
549+
}
550+
}
551+
else if (!value.IsSwitchArgument())
552+
{
553+
arguments.UpdateProjectFiles = true;
554+
if (value != null)
555+
{
556+
arguments.UpdateFileNames.Add(value);
557+
}
558+
}
559+
else
560+
{
561+
arguments.UpdateProjectFiles = true;
562+
}
563+
564+
if (arguments.UpdateAssemblyInfo)
565+
{
566+
throw new WarningException("Cannot specify both updateassemblyinfo and updateprojectfiles in the same run. Please rerun GitVersion with only one parameter");
567+
}
568+
if (arguments.EnsureAssemblyInfo)
569+
{
570+
throw new WarningException("Cannot specify -ensureassemblyinfo with updateprojectfiles: please ensure your project file exists before attempting to update it");
571+
}
572+
}
573+
529574
private static void EnsureArgumentValueCount(IReadOnlyList<string> values)
530575
{
531576
if (values != null && values.Count > 1)

src/GitVersionExe/Arguments.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ public class Arguments
4040

4141
public bool UpdateProjectFiles;
4242
public bool UpdateAssemblyInfo;
43-
public ISet<string> UpdateAssemblyInfoFileName = new HashSet<string>();
4443
public bool EnsureAssemblyInfo;
44+
public ISet<string> UpdateFileNames = new HashSet<string>();
4545

4646
[Obsolete]
4747
public string Proj;
@@ -62,10 +62,10 @@ public GitVersionOptions ToOptions()
6262

6363
AssemblyInfo =
6464
{
65-
IsTargetingProjectFiles = UpdateProjectFiles,
66-
ShouldUpdate = UpdateAssemblyInfo,
65+
UpdateProjectFiles = UpdateProjectFiles,
66+
UpdateAssemblyInfo = UpdateAssemblyInfo,
6767
EnsureAssemblyInfo = EnsureAssemblyInfo,
68-
Files = UpdateAssemblyInfoFileName
68+
Files = UpdateFileNames
6969
},
7070

7171
Authentication =

src/GitVersionExe/HelpWriter.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,12 @@ path The directory containing .git. If not defined current directory
5454
/updateassemblyinfo
5555
Will recursively search for all 'AssemblyInfo.cs' files in the git repo and update them
5656
/updateprojectfiles
57-
Will target project files (cs/fs/vbproj files) to update instead of AssemblyInfo class files,
57+
Will recursively search for all project files (.csproj/.vbproj/.fsproj) files in the git repo and update them
5858
Note: This is only compatible with the newer Sdk projects
59-
/updateassemblyinfofilename
60-
Specify name of AssemblyInfo file. Can also /updateAssemblyInfo GlobalAssemblyInfo.cs as a shorthand
59+
/updatefilenames
60+
Specify name(s) of files to update. If updating assemblyinfo these should be AssemblyInfo class files,
61+
otherwise these should be your xml project files.
62+
Note: Can also /updateAssemblyInfo GlobalAssemblyInfo.cs as a shorthand
6163
/ensureassemblyinfo
6264
If the assembly info file specified with /updateassemblyinfo or /updateassemblyinfofilename is not found,
6365
it be created with these attributes: AssemblyFileVersion, AssemblyVersion and AssemblyInformationalVersion

src/GitVersionTask/GitVersionTaskExecutor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void UpdateAssemblyInfo(UpdateAssemblyInfo task)
3737
task.AssemblyInfoTempFilePath = Path.Combine(fileWriteInfo.WorkingDirectory, fileWriteInfo.FileName);
3838

3939
var gitVersionOptions = options.Value;
40-
gitVersionOptions.AssemblyInfo.ShouldUpdate = true;
40+
gitVersionOptions.AssemblyInfo.UpdateAssemblyInfo = true;
4141
gitVersionOptions.AssemblyInfo.EnsureAssemblyInfo = true;
4242
gitVersionOptions.WorkingDirectory = fileWriteInfo.WorkingDirectory;
4343
gitVersionOptions.AssemblyInfo.Files.Add(fileWriteInfo.FileName);

0 commit comments

Comments
 (0)