diff --git a/GitVersionExe/ArgumentParser.cs b/GitVersionExe/ArgumentParser.cs index 9da75005c1..5084301d49 100644 --- a/GitVersionExe/ArgumentParser.cs +++ b/GitVersionExe/ArgumentParser.cs @@ -128,6 +128,11 @@ public static Arguments ParseArguments(List commandLineArguments) { arguments.UpdateAssemblyInfo = false; } + else if (!IsSwitchArgument(value)) + { + arguments.UpdateAssemblyInfo = true; + arguments.UpdateAssemblyInfoFileName = value; + } else { arguments.UpdateAssemblyInfo = true; @@ -159,6 +164,11 @@ public static Arguments ParseArguments(List commandLineArguments) return arguments; } + static bool IsSwitchArgument(string value) + { + return value != null && value.StartsWith("-") || value.StartsWith("/"); + } + static bool IsSwitch(string switchName, string value) { if (value.StartsWith("-")) diff --git a/GitVersionExe/Arguments.cs b/GitVersionExe/Arguments.cs index af6489c44d..915ffd1420 100644 --- a/GitVersionExe/Arguments.cs +++ b/GitVersionExe/Arguments.cs @@ -28,5 +28,6 @@ public Arguments() public string ExecArgs; public bool UpdateAssemblyInfo; + public string UpdateAssemblyInfoFileName; } } \ No newline at end of file diff --git a/GitVersionExe/AssemblyInfoFileUpdate.cs b/GitVersionExe/AssemblyInfoFileUpdate.cs index f8c0e39cd9..36a7f2f130 100644 --- a/GitVersionExe/AssemblyInfoFileUpdate.cs +++ b/GitVersionExe/AssemblyInfoFileUpdate.cs @@ -16,8 +16,7 @@ public AssemblyInfoFileUpdate(Arguments args, string workingDirectory, Dictionar if (args.Output != OutputType.Json) Console.WriteLine("Updating assembly info files"); - var assemblyInfoFiles = Directory.GetFiles(workingDirectory, "AssemblyInfo.cs", - SearchOption.AllDirectories); + var assemblyInfoFiles = GetAssemblyInfoFiles(workingDirectory, args); foreach (var assemblyInfoFile in assemblyInfoFiles) { @@ -44,6 +43,19 @@ public AssemblyInfoFileUpdate(Arguments args, string workingDirectory, Dictionar } } + static IEnumerable GetAssemblyInfoFiles(string workingDirectory, Arguments args) + { + if (args.UpdateAssemblyInfoFileName != null) + { + if (File.Exists(args.UpdateAssemblyInfoFileName)) + { + return new[] { Path.GetFullPath(args.UpdateAssemblyInfoFileName) }; + } + } + + return Directory.GetFiles(workingDirectory, "AssemblyInfo.cs", SearchOption.AllDirectories); + } + public void Dispose() { foreach (var restoreBackup in restoreBackupTasks) diff --git a/Tests/ArgumentParserTests.cs b/Tests/ArgumentParserTests.cs index 67dd81235e..3e0be9ddd7 100644 --- a/Tests/ArgumentParserTests.cs +++ b/Tests/ArgumentParserTests.cs @@ -165,11 +165,37 @@ public void Unknown_argument_should_throw() Assert.AreEqual("Could not parse command line parameter '-x'.", exception.Message); } + [TestCase("-updateAssemblyInfo true")] + [TestCase("-updateAssemblyInfo 1")] + [TestCase("-updateAssemblyInfo -proj foo.sln")] + public void update_assembly_info_true(string command) + { + var arguments = ArgumentParser.ParseArguments(command); + arguments.UpdateAssemblyInfo.ShouldBe(true); + } + + [TestCase("-updateAssemblyInfo false")] + [TestCase("-updateAssemblyInfo 0")] + public void update_assembly_info_false(string command) + { + var arguments = ArgumentParser.ParseArguments(command); + arguments.UpdateAssemblyInfo.ShouldBe(false); + } + + [Test] + public void update_assembly_info_with_filename() + { + var arguments = ArgumentParser.ParseArguments("-updateAssemblyInfo CommonAssemblyInfo.cs"); + arguments.UpdateAssemblyInfo.ShouldBe(true); + arguments.UpdateAssemblyInfoFileName.ShouldBe("CommonAssemblyInfo.cs"); + } + [Test] - public void update_assembly_info() + public void update_assembly_info_with_relative_filename() { - var arguments = ArgumentParser.ParseArguments("-updateAssemblyInfo -proj foo.sln"); + var arguments = ArgumentParser.ParseArguments("-updateAssemblyInfo ..\\..\\CommonAssemblyInfo.cs"); arguments.UpdateAssemblyInfo.ShouldBe(true); + arguments.UpdateAssemblyInfoFileName.ShouldBe("..\\..\\CommonAssemblyInfo.cs"); } [Test]