From af78626928da11d0c8183ca46904742be2b82bcc Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Sun, 12 May 2019 17:52:46 +0300 Subject: [PATCH 1/8] Migrating from UtilPack to NuGetUtils, Stage 1: Code changes. --- .../GetVersionTaskTests.cs | 5 +- .../InvalidFileCheckerTests.cs | 23 ++- .../Mocks/MockBuildEngine.cs | 45 ------ .../Mocks/MockTaskItem.cs | 40 ----- .../GenerateGitVersionInformation.cs | 65 +++++--- src/GitVersionTask/GetVersion.cs | 141 +++++++++--------- src/GitVersionTask/GitVersionTask.csproj | 4 +- src/GitVersionTask/GitVersionTaskBase.cs | 137 ++++++++++++----- src/GitVersionTask/InvalidFileChecker.cs | 7 +- src/GitVersionTask/TaskUtils.cs | 25 ---- src/GitVersionTask/UpdateAssemblyInfo.cs | 82 ++++++---- src/GitVersionTask/UtilPack.Version.props | 2 +- .../WriteVersionInfoToBuildLog.cs | 51 +++++-- 13 files changed, 327 insertions(+), 300 deletions(-) delete mode 100644 src/GitVersionTask.Tests/Mocks/MockBuildEngine.cs delete mode 100644 src/GitVersionTask.Tests/Mocks/MockTaskItem.cs delete mode 100644 src/GitVersionTask/TaskUtils.cs diff --git a/src/GitVersionTask.Tests/GetVersionTaskTests.cs b/src/GitVersionTask.Tests/GetVersionTaskTests.cs index a3f6d5c7d1..2038b891cd 100644 --- a/src/GitVersionTask.Tests/GetVersionTaskTests.cs +++ b/src/GitVersionTask.Tests/GetVersionTaskTests.cs @@ -1,4 +1,4 @@ -using System.Linq; +using System.Linq; using GitVersion; using GitVersionTask; using Microsoft.Build.Framework; @@ -11,9 +11,8 @@ public class GetVersionTaskTests : TestBase [Test] public void OutputsShouldMatchVariableProvider() { - var taskProperties = typeof(GetVersion) + var taskProperties = typeof(GetVersion.Output) .GetProperties() - .Where(p => p.GetCustomAttributes(typeof(OutputAttribute), false).Any()) .Select(p => p.Name); var variablesProperties = VersionVariables.AvailableVariables; diff --git a/src/GitVersionTask.Tests/InvalidFileCheckerTests.cs b/src/GitVersionTask.Tests/InvalidFileCheckerTests.cs index e8877d2f94..13758c167c 100644 --- a/src/GitVersionTask.Tests/InvalidFileCheckerTests.cs +++ b/src/GitVersionTask.Tests/InvalidFileCheckerTests.cs @@ -1,7 +1,6 @@ using System; using System.IO; using GitVersion; -using GitVersionTask.Tests.Mocks; using Microsoft.Build.Framework; using NUnit.Framework; @@ -41,7 +40,7 @@ public void VerifyIgnoreNonAssemblyInfoFile() "); } - InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "SomeOtherFile.cs" } }, projectFile); + InvalidFileChecker.CheckForInvalidFiles(new[] { "SomeOtherFile.cs" }, projectFile); } [Test] @@ -57,7 +56,7 @@ public void VerifyAttributeFoundCSharp([Values("AssemblyVersion", "AssemblyFileV ", attribute); } - var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.cs" } }, projectFile), attribute); + var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.cs" }, projectFile), attribute); Assert.That(ex.Message, Is.EqualTo("File contains assembly version attributes which conflict with the attributes generated by GitVersion AssemblyInfo.cs")); } @@ -75,7 +74,7 @@ public void VerifyUnformattedAttributeFoundCSharp([Values("AssemblyVersion", "As ", attribute); } - var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.cs" } }, projectFile), attribute); + var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.cs" }, projectFile), attribute); Assert.That(ex.Message, Is.EqualTo("File contains assembly version attributes which conflict with the attributes generated by GitVersion AssemblyInfo.cs")); } @@ -92,7 +91,7 @@ public void VerifyCommentWorksCSharp([Values("AssemblyVersion", "AssemblyFileVer ", attribute); } - InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.cs" } }, projectFile); + InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.cs" }, projectFile); } [Test] @@ -111,7 +110,7 @@ public class Temp ", attribute); } - InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.cs" } }, projectFile); + InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.cs" }, projectFile); } [Test] @@ -129,7 +128,7 @@ public class {0} ", attribute); } - InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.cs" } }, projectFile); + InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.cs" }, projectFile); } [Test] @@ -145,7 +144,7 @@ Imports System.Reflection ", attribute); } - var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.vb" } }, projectFile), attribute); + var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.vb" }, projectFile), attribute); Assert.That(ex.Message, Is.EqualTo("File contains assembly version attributes which conflict with the attributes generated by GitVersion AssemblyInfo.vb")); } @@ -163,7 +162,7 @@ Imports System.Reflection ", attribute); } - var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.vb" } }, projectFile), attribute); + var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.vb" }, projectFile), attribute); Assert.That(ex.Message, Is.EqualTo("File contains assembly version attributes which conflict with the attributes generated by GitVersion AssemblyInfo.vb")); } @@ -180,7 +179,7 @@ Imports System.Reflection ", attribute); } - InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.vb" } }, projectFile); + InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.vb" }, projectFile); } [Test] @@ -198,7 +197,7 @@ End Class ", attribute); } - InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.vb" } }, projectFile); + InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.vb" }, projectFile); } [Test] @@ -215,6 +214,6 @@ End Class ", attribute); } - InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.vb" } }, projectFile); + InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.vb" }, projectFile); } } diff --git a/src/GitVersionTask.Tests/Mocks/MockBuildEngine.cs b/src/GitVersionTask.Tests/Mocks/MockBuildEngine.cs deleted file mode 100644 index 710462eff5..0000000000 --- a/src/GitVersionTask.Tests/Mocks/MockBuildEngine.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections; -using Microsoft.Build.Framework; - -class MockBuildEngine : IBuildEngine -{ - public void LogErrorEvent(BuildErrorEventArgs e) - { } - - public void LogWarningEvent(BuildWarningEventArgs e) - { } - - public void LogMessageEvent(BuildMessageEventArgs e) - { } - - public void LogCustomEvent(CustomBuildEventArgs e) - { - throw new NotImplementedException(); - } - - public bool BuildProjectFile(string projectFileName, string[] targetNames, IDictionary globalProperties, IDictionary targetOutputs) - { - throw new NotImplementedException(); - } - - public bool ContinueOnError - { - get { throw new NotImplementedException(); } - } - - public int LineNumberOfTaskNode - { - get { throw new NotImplementedException(); } - } - - public int ColumnNumberOfTaskNode - { - get { throw new NotImplementedException(); } - } - - public string ProjectFileOfTaskNode - { - get { throw new NotImplementedException(); } - } -} \ No newline at end of file diff --git a/src/GitVersionTask.Tests/Mocks/MockTaskItem.cs b/src/GitVersionTask.Tests/Mocks/MockTaskItem.cs deleted file mode 100644 index 45a98850b9..0000000000 --- a/src/GitVersionTask.Tests/Mocks/MockTaskItem.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Collections; -using Microsoft.Build.Framework; - -namespace GitVersionTask.Tests.Mocks -{ - class MockTaskItem : ITaskItem - { - public string ItemSpec { get; set; } - - public int MetadataCount { get; private set; } - - public ICollection MetadataNames { get; private set; } - - public IDictionary CloneCustomMetadata() - { - throw new NotImplementedException(); - } - - public void CopyMetadataTo(ITaskItem destinationItem) - { - throw new NotImplementedException(); - } - - public string GetMetadata(string metadataName) - { - throw new NotImplementedException(); - } - - public void RemoveMetadata(string metadataName) - { - throw new NotImplementedException(); - } - - public void SetMetadata(string metadataName, string metadataValue) - { - throw new NotImplementedException(); - } - } -} \ No newline at end of file diff --git a/src/GitVersionTask/GenerateGitVersionInformation.cs b/src/GitVersionTask/GenerateGitVersionInformation.cs index 6cb61e7034..2730fa3f06 100644 --- a/src/GitVersionTask/GenerateGitVersionInformation.cs +++ b/src/GitVersionTask/GenerateGitVersionInformation.cs @@ -1,42 +1,59 @@ namespace GitVersionTask { + using System; using System.IO; using GitVersion; using GitVersion.Helpers; - using Microsoft.Build.Framework; - public class GenerateGitVersionInformation : GitVersionTaskBase + public static class GenerateGitVersionInformation { - [Required] - public string ProjectFile { get; set; } - - [Required] - public string IntermediateOutputPath { get; set; } - - [Required] - public string Language { get; set; } - - [Output] - public string GitVersionInformationFilePath { get; set; } + public static Output Execute( + Input input + ) + { + return GitVersionTaskBase.ExecuteGitVersionTask( + input, + InnerExecute + ); + } - protected override void InnerExecute() + private static Output InnerExecute( + Input input, + TaskLogger logger + ) { - if (GetVersionVariables(out var versionVariables)) return; + var execute = GitVersionTaskBase.CreateExecuteCore(); + if (!execute.TryGetVersion(input.SolutionDirectory, out var versionVariables, input.NoFetch, new Authentication())) + { + return null; + } - var fileExtension = TaskUtils.GetFileExtension(Language); - var fileName = $"GitVersionInformation.g.{fileExtension}"; + var fileWriteInfo = input.IntermediateOutputPath.GetWorkingDirectoryAndFileNameAndExtension( + input.Language, + input.ProjectFile, + (pf, ext) => $"GitVersionInformation.g.{ext}", + (pf, ext) => $"GitVersionInformation_{Path.GetFileNameWithoutExtension(pf)}_{Path.GetRandomFileName()}.g.{ext}" + ); - if (IntermediateOutputPath == null) + var output = new Output() { - fileName = $"GitVersionInformation_{Path.GetFileNameWithoutExtension(ProjectFile)}_{Path.GetRandomFileName()}.g.{fileExtension}"; - } + GitVersionInformationFilePath = Path.Combine(fileWriteInfo.WorkingDirectory, fileWriteInfo.FileName) + }; + var generator = new GitVersionInformationGenerator(fileWriteInfo.FileName, fileWriteInfo.WorkingDirectory, versionVariables, new FileSystem()); + generator.Generate(); - var workingDirectory = IntermediateOutputPath ?? TempFileTracker.TempPath; + return output; + } - GitVersionInformationFilePath = Path.Combine(workingDirectory, fileName); - var generator = new GitVersionInformationGenerator(fileName, workingDirectory, versionVariables, new FileSystem()); - generator.Generate(); + public sealed class Input : GitVersionTaskBase.InputWithCommonAdditionalProperties + { } + + public sealed class Output + { + public string GitVersionInformationFilePath { get; set; } + } + } } diff --git a/src/GitVersionTask/GetVersion.cs b/src/GitVersionTask/GetVersion.cs index 5b8dcb0244..e1923f90e5 100644 --- a/src/GitVersionTask/GetVersion.cs +++ b/src/GitVersionTask/GetVersion.cs @@ -1,108 +1,107 @@ namespace GitVersionTask { - using Microsoft.Build.Framework; + using System; - public class GetVersion : GitVersionTaskBase + public static class GetVersion { - [Output] - public string Major { get; set; } - [Output] - public string Minor { get; set; } + public static Output Execute( + Input input + ) + { + return GitVersionTaskBase.ExecuteGitVersionTask( + input, + InnerExecute + ); + } - [Output] - public string Patch { get; set; } + private static Output InnerExecute( + Input input, + TaskLogger logger + ) + { + if (!GitVersionTaskBase.CreateExecuteCore().TryGetVersion(input.SolutionDirectory, out var versionVariables, input.NoFetch, new GitVersion.Authentication())) + { + return null; + } - [Output] - public string PreReleaseTag { get; set; } + var outputType = typeof(Output); + var output = new Output(); + foreach (var variable in versionVariables) + { + outputType.GetProperty(variable.Key).SetValue(output, variable.Value, null); + } - [Output] - public string PreReleaseTagWithDash { get; set; } + return output; + } - [Output] - public string PreReleaseLabel { get; set; } + public sealed class Input : GitVersionTaskBase.AbstractInput + { - [Output] - public string PreReleaseNumber { get; set; } + } - [Output] - public string WeightedPreReleaseNumber { get; set; } + public sealed class Output + { + public String Major { get; set; } - [Output] - public string BuildMetaData { get; set; } + public String Minor { get; set; } - [Output] - public string BuildMetaDataPadded { get; set; } + public String Patch { get; set; } - [Output] - public string FullBuildMetaData { get; set; } + public String PreReleaseTag { get; set; } - [Output] - public string MajorMinorPatch { get; set; } + public String PreReleaseTagWithDash { get; set; } - [Output] - public string SemVer { get; set; } + public String PreReleaseLabel { get; set; } - [Output] - public string LegacySemVer { get; set; } + public String PreReleaseNumber { get; set; } - [Output] - public string LegacySemVerPadded { get; set; } + public String WeightedPreReleaseNumber { get; set; } - [Output] - public string AssemblySemVer { get; set; } + public String BuildMetaData { get; set; } - [Output] - public string AssemblySemFileVer { get; set; } + public String BuildMetaDataPadded { get; set; } - [Output] - public string FullSemVer { get; set; } + public String FullBuildMetaData { get; set; } - [Output] - public string InformationalVersion { get; set; } + public String MajorMinorPatch { get; set; } - [Output] - public string BranchName { get; set; } + public String SemVer { get; set; } - [Output] - public string Sha { get; set; } + public String LegacySemVer { get; set; } - [Output] - public string ShortSha { get; set; } + public String LegacySemVerPadded { get; set; } - [Output] - public string NuGetVersionV2 { get; set; } + public String AssemblySemVer { get; set; } - [Output] - public string NuGetVersion { get; set; } + public String AssemblySemFileVer { get; set; } - [Output] - public string NuGetPreReleaseTagV2 { get; set; } + public String FullSemVer { get; set; } - [Output] - public string NuGetPreReleaseTag { get; set; } + public String InformationalVersion { get; set; } - [Output] - public string CommitDate { get; set; } + public String BranchName { get; set; } - [Output] - public string VersionSourceSha { get; set; } + public String Sha { get; set; } - [Output] - public string CommitsSinceVersionSource { get; set; } + public String ShortSha { get; set; } - [Output] - public string CommitsSinceVersionSourcePadded { get; set; } + public String NuGetVersionV2 { get; set; } - protected override void InnerExecute() - { - if (GetVersionVariables(out var versionVariables)) return; - - var thisType = typeof(GetVersion); - foreach (var variable in versionVariables) - { - thisType.GetProperty(variable.Key)?.SetValue(this, variable.Value, null); - } + public String NuGetVersion { get; set; } + + public String NuGetPreReleaseTagV2 { get; set; } + + public String NuGetPreReleaseTag { get; set; } + + public String CommitDate { get; set; } + + public String VersionSourceSha { get; set; } + + public String CommitsSinceVersionSource { get; set; } + + public String CommitsSinceVersionSourcePadded { get; set; } } + } } diff --git a/src/GitVersionTask/GitVersionTask.csproj b/src/GitVersionTask/GitVersionTask.csproj index 4aa0a34c77..4080d1d735 100644 --- a/src/GitVersionTask/GitVersionTask.csproj +++ b/src/GitVersionTask/GitVersionTask.csproj @@ -38,8 +38,8 @@ All - - + + all runtime; build; native; contentfiles; analyzers diff --git a/src/GitVersionTask/GitVersionTaskBase.cs b/src/GitVersionTask/GitVersionTaskBase.cs index 37805297b5..64e6df6b19 100644 --- a/src/GitVersionTask/GitVersionTaskBase.cs +++ b/src/GitVersionTask/GitVersionTaskBase.cs @@ -1,72 +1,141 @@ namespace GitVersionTask { - using System; using GitVersion; using GitVersion.Helpers; + using System; + using System.IO; - using Microsoft.Build.Framework; - using Microsoft.Build.Utilities; - - public abstract class GitVersionTaskBase : Task + public static class GitVersionTaskBase { - protected GitVersionTaskBase() + internal static TOutput ExecuteGitVersionTask( + TInput input, + Func execute + ) + where TInput : AbstractInput + where TOutput : class, new() { - var fileSystem = new FileSystem(); - ExecuteCore = new ExecuteCore(fileSystem); - GitVersion.Logger.SetLoggers(LogDebug, LogInfo, LogWarning, s => LogError(s)); - } + if (!input.ValidateInput()) + { + throw new Exception("Invalid input."); + } - public override bool Execute() - { + var logger = new TaskLogger(); + Logger.SetLoggers(logger.LogInfo, logger.LogInfo, logger.LogWarning, s => logger.LogError(s)); + + + TOutput output = null; try { - InnerExecute(); - return true; + output = execute(input, logger); } catch (WarningException errorException) { - LogWarning(errorException.Message); - return true; + logger.LogWarning(errorException.Message); + output = new TOutput(); } catch (Exception exception) { - LogError("Error occurred: " + exception); - return false; + logger.LogError("Error occurred: " + exception); + throw; } + finally + { + Logger.Reset(); + } + + return output; } - protected abstract void InnerExecute(); - protected ExecuteCore ExecuteCore { get; } + public static ExecuteCore CreateExecuteCore() + => new ExecuteCore(new FileSystem()); + + private static string GetFileExtension(this String language) + { + switch (language) + { + case "C#": + return "cs"; - [Required] - public string SolutionDirectory { get; set; } + case "F#": + return "fs"; - public bool NoFetch { get; set; } + case "VB": + return "vb"; - public void LogDebug(string message) - { - BuildEngine.LogMessageEvent(new BuildMessageEventArgs(message, string.Empty, "GitVersionTask", MessageImportance.Low)); + default: + throw new Exception($"Unknown language detected: '{language}'"); + } } - public void LogWarning(string message) + public static FileWriteInfo GetWorkingDirectoryAndFileNameAndExtension( + this String intermediateOutputPath, + String language, + String projectFile, + Func fileNameWithIntermediatePath, + Func fileNameNoIntermediatePath + ) { - BuildEngine.LogWarningEvent(new BuildWarningEventArgs(string.Empty, string.Empty, null, 0, 0, 0, 0, message, string.Empty, "GitVersionTask")); + var fileExtension = language.GetFileExtension(); + String workingDirectory, fileName; + if (intermediateOutputPath == null) + { + fileName = fileNameWithIntermediatePath(projectFile, fileExtension); + workingDirectory = TempFileTracker.TempPath; + } + else + { + workingDirectory = intermediateOutputPath; + fileName = fileNameNoIntermediatePath(projectFile, fileExtension); + } + return new FileWriteInfo(workingDirectory, fileName, fileExtension); } - public void LogInfo(string message) + public abstract class AbstractInput { - BuildEngine.LogMessageEvent(new BuildMessageEventArgs(message, string.Empty, "GitVersionTask", MessageImportance.Normal)); + public String SolutionDirectory { get; set; } + + public Boolean NoFetch { get; set; } + + public virtual Boolean ValidateInput() + { + return !String.IsNullOrEmpty(this.SolutionDirectory); + } } - public void LogError(string message, string file = null) + public abstract class InputWithCommonAdditionalProperties : AbstractInput { - BuildEngine.LogErrorEvent(new BuildErrorEventArgs(string.Empty, string.Empty, file, 0, 0, 0, 0, message, string.Empty, "GitVersionTask")); + public String ProjectFile { get; set; } + + public String IntermediateOutputPath { get; set; } + + public String Language { get; set; } + + public override Boolean ValidateInput() + { + return base.ValidateInput() + && !String.IsNullOrEmpty(this.ProjectFile) + && !String.IsNullOrEmpty(this.IntermediateOutputPath) + && !String.IsNullOrEmpty(this.Language); + } } + } - protected bool GetVersionVariables(out VersionVariables versionVariables) + public sealed class FileWriteInfo + { + public FileWriteInfo( + String workingDirectory, + String fileName, + String fileExtension + ) { - return !ExecuteCore.TryGetVersion(SolutionDirectory, out versionVariables, NoFetch, new Authentication()); + this.WorkingDirectory = workingDirectory; + this.FileName = fileName; + this.FileExtension = fileExtension; } + + public String WorkingDirectory { get; } + public String FileName { get; } + public String FileExtension { get; } } } diff --git a/src/GitVersionTask/InvalidFileChecker.cs b/src/GitVersionTask/InvalidFileChecker.cs index d20be03e56..8cc308fddb 100644 --- a/src/GitVersionTask/InvalidFileChecker.cs +++ b/src/GitVersionTask/InvalidFileChecker.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Text.RegularExpressions; using GitVersion; -using Microsoft.Build.Framework; public static class InvalidFileChecker { @@ -14,7 +13,7 @@ public static class InvalidFileChecker { ".vb", VisualBasicFileContainsVersionAttribute } }; - public static void CheckForInvalidFiles(IEnumerable compileFiles, string projectFile) + public static void CheckForInvalidFiles(IEnumerable compileFiles, string projectFile) { foreach (var compileFile in GetInvalidFiles(compileFiles, projectFile)) { @@ -98,9 +97,9 @@ static bool VisualBasicFileContainsVersionAttribute(string compileFile, string p \s*\(\s*\)\s*\> # End brackets ()>"); } - static IEnumerable GetInvalidFiles(IEnumerable compileFiles, string projectFile) + static IEnumerable GetInvalidFiles(IEnumerable compileFiles, string projectFile) { - return compileFiles.Select(x => x.ItemSpec) + return compileFiles .Where(compileFile => compileFile.Contains("AssemblyInfo")) .Where(s => FileContainsVersionAttribute(s, projectFile)); } diff --git a/src/GitVersionTask/TaskUtils.cs b/src/GitVersionTask/TaskUtils.cs deleted file mode 100644 index ad0be50887..0000000000 --- a/src/GitVersionTask/TaskUtils.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace GitVersionTask -{ - using System; - - public class TaskUtils - { - public static string GetFileExtension(string language) - { - switch(language) - { - case "C#": - return "cs"; - - case "F#": - return "fs"; - - case "VB": - return "vb"; - - default: - throw new Exception($"Unknown language detected: '{language}'"); - } - } - } -} \ No newline at end of file diff --git a/src/GitVersionTask/UpdateAssemblyInfo.cs b/src/GitVersionTask/UpdateAssemblyInfo.cs index e386bbae8f..844f6c4b88 100644 --- a/src/GitVersionTask/UpdateAssemblyInfo.cs +++ b/src/GitVersionTask/UpdateAssemblyInfo.cs @@ -1,58 +1,80 @@ namespace GitVersionTask { + using System; using System.IO; using GitVersion; using GitVersion.Helpers; - using Microsoft.Build.Framework; - public class UpdateAssemblyInfo : GitVersionTaskBase + public static class UpdateAssemblyInfo { - [Required] - public string ProjectFile { get; set; } - - [Required] - public string IntermediateOutputPath { get; set; } - - [Required] - public ITaskItem[] CompileFiles { get; set; } - - [Required] - public string Language { get; set; } - - [Output] - public string AssemblyInfoTempFilePath { get; set; } + public static Output Execute( + Input input + ) + { + return GitVersionTaskBase.ExecuteGitVersionTask( + input, + InnerExecute + ); + } - protected override void InnerExecute() + private static Output InnerExecute( + Input input, + TaskLogger logger + ) { + var execute = GitVersionTaskBase.CreateExecuteCore(); + TempFileTracker.DeleteTempFiles(); - InvalidFileChecker.CheckForInvalidFiles(CompileFiles, ProjectFile); + InvalidFileChecker.CheckForInvalidFiles(input.CompileFiles, input.ProjectFile); - if (GetVersionVariables(out var versionVariables)) return; + if (!execute.TryGetVersion(input.SolutionDirectory, out var versionVariables, input.NoFetch, new Authentication())) + { + return null; + } - CreateTempAssemblyInfo(versionVariables); + return CreateTempAssemblyInfo(input, versionVariables); } - private void CreateTempAssemblyInfo(VersionVariables versionVariables) + private static Output CreateTempAssemblyInfo(Input input, VersionVariables versionVariables) { - var fileExtension = TaskUtils.GetFileExtension(Language); - var assemblyInfoFileName = $"GitVersionTaskAssemblyInfo.g.{fileExtension}"; + var fileWriteInfo = input.IntermediateOutputPath.GetWorkingDirectoryAndFileNameAndExtension( + input.Language, + input.ProjectFile, + (pf, ext) => $"GitVersionTaskAssemblyInfo.g.{ext}", + (pf, ext) => $"AssemblyInfo_{Path.GetFileNameWithoutExtension(pf)}_{Path.GetRandomFileName()}.g.{ext}" + ); + + var output = new Output() + { + AssemblyInfoTempFilePath = Path.Combine(fileWriteInfo.WorkingDirectory, fileWriteInfo.FileName) + }; - if (IntermediateOutputPath == null) + using (var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(fileWriteInfo.FileName, fileWriteInfo.WorkingDirectory, versionVariables, new FileSystem(), true)) { - assemblyInfoFileName = $"AssemblyInfo_{Path.GetFileNameWithoutExtension(ProjectFile)}_{Path.GetRandomFileName()}.g.{fileExtension}"; + assemblyInfoFileUpdater.Update(); + assemblyInfoFileUpdater.CommitChanges(); } - var workingDirectory = IntermediateOutputPath ?? TempFileTracker.TempPath; + return output; + } - AssemblyInfoTempFilePath = Path.Combine(workingDirectory, assemblyInfoFileName); + public sealed class Input : GitVersionTaskBase.InputWithCommonAdditionalProperties + { + public String[] CompileFiles { get; set; } - using (var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(assemblyInfoFileName, workingDirectory, versionVariables, new FileSystem(), true)) + public override Boolean ValidateInput() { - assemblyInfoFileUpdater.Update(); - assemblyInfoFileUpdater.CommitChanges(); + return base.ValidateInput() + && this.CompileFiles != null; } + + } + + public sealed class Output + { + public string AssemblyInfoTempFilePath { get; set; } } } } diff --git a/src/GitVersionTask/UtilPack.Version.props b/src/GitVersionTask/UtilPack.Version.props index 109fbf9d1e..a6161275f4 100644 --- a/src/GitVersionTask/UtilPack.Version.props +++ b/src/GitVersionTask/UtilPack.Version.props @@ -1,6 +1,6 @@ - 2.9.1 + 2.0.5 diff --git a/src/GitVersionTask/WriteVersionInfoToBuildLog.cs b/src/GitVersionTask/WriteVersionInfoToBuildLog.cs index 03340b7947..c1d08e017d 100644 --- a/src/GitVersionTask/WriteVersionInfoToBuildLog.cs +++ b/src/GitVersionTask/WriteVersionInfoToBuildLog.cs @@ -3,25 +3,58 @@ namespace GitVersionTask using System.Collections.Generic; using GitVersion; - public class WriteVersionInfoToBuildLog : GitVersionTaskBase + public class WriteVersionInfoToBuildLog { - protected override void InnerExecute() + public static Output Execute( + Input input + ) { - if (GetVersionVariables(out var versionVariables)) return; + return GitVersionTaskBase.ExecuteGitVersionTask( + input, + InnerExecute + ); + } + + public sealed class Input : GitVersionTaskBase.AbstractInput + { + // No additional inputs for this task + } + + public sealed class Output + { + // No output for this task + } + + private static Output InnerExecute( + Input input, + TaskLogger logger + ) + { + var execute = GitVersionTaskBase.CreateExecuteCore(); + if (!execute.TryGetVersion(input.SolutionDirectory, out var result, input.NoFetch, new Authentication())) + { + return null; + } + + WriteIntegrationParameters(logger, BuildServerList.GetApplicableBuildServers(), result); - WriteIntegrationParameters(BuildServerList.GetApplicableBuildServers(), versionVariables); + return new Output(); } - private void WriteIntegrationParameters(IEnumerable applicableBuildServers, VersionVariables versionVariables) + private static void WriteIntegrationParameters( + TaskLogger logger, + IEnumerable applicableBuildServers, + VersionVariables versionVariables + ) { foreach (var buildServer in applicableBuildServers) { - LogInfo($"Executing GenerateSetVersionMessage for '{buildServer.GetType().Name}'."); - LogInfo(buildServer.GenerateSetVersionMessage(versionVariables)); - LogInfo($"Executing GenerateBuildLogOutput for '{buildServer.GetType().Name}'."); + logger.LogInfo(string.Format("Executing GenerateSetVersionMessage for '{0}'.", buildServer.GetType().Name)); + logger.LogInfo(buildServer.GenerateSetVersionMessage(versionVariables)); + logger.LogInfo(string.Format("Executing GenerateBuildLogOutput for '{0}'.", buildServer.GetType().Name)); foreach (var buildParameter in BuildOutputFormatter.GenerateBuildLogOutput(buildServer, versionVariables)) { - LogInfo(buildParameter); + logger.LogInfo(buildParameter); } } } From b244ac3e3a7d55a46fb30a8bf356f96e0abde38c Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Sun, 12 May 2019 18:01:35 +0300 Subject: [PATCH 2/8] Migrating from UtilPack to NuGetUtils, Stage 2: MSBuild infrastructure-related changes. Also forgot to add one .cs file from previous commit. --- src/GitVersionTask/GitVersionTask.csproj | 10 ++-- ... => NuGetUtils.MSBuild.Exec.Version.props} | 2 +- .../NugetAssets/GitVersionTask.nuspec | 10 ++-- .../NugetAssets/build/GitVersionTask.targets | 2 +- .../NugetAssets/build/Infrastructure.props | 17 ++++--- .../functionality/GitVersionBuild.targets | 2 +- .../functionality/GitVersionCommon.props | 48 ++++++++++++------- .../GitVersionMultiTargetBuild.targets | 2 +- src/GitVersionTask/TaskLogger.cs | 32 +++++++++++++ 9 files changed, 84 insertions(+), 41 deletions(-) rename src/GitVersionTask/{UtilPack.Version.props => NuGetUtils.MSBuild.Exec.Version.props} (57%) create mode 100644 src/GitVersionTask/TaskLogger.cs diff --git a/src/GitVersionTask/GitVersionTask.csproj b/src/GitVersionTask/GitVersionTask.csproj index 4080d1d735..7da25e9429 100644 --- a/src/GitVersionTask/GitVersionTask.csproj +++ b/src/GitVersionTask/GitVersionTask.csproj @@ -1,7 +1,7 @@ - + - + net461;netstandard2.0 @@ -23,10 +23,10 @@ - + - + build\ @@ -39,7 +39,7 @@ - + all runtime; build; native; contentfiles; analyzers diff --git a/src/GitVersionTask/UtilPack.Version.props b/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props similarity index 57% rename from src/GitVersionTask/UtilPack.Version.props rename to src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props index a6161275f4..a00890c752 100644 --- a/src/GitVersionTask/UtilPack.Version.props +++ b/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props @@ -1,6 +1,6 @@ - 2.0.5 + 2.0.5 diff --git a/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec b/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec index b3436fdce8..4a95b6e0d8 100644 --- a/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec +++ b/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec @@ -1,4 +1,4 @@ - + GitVersionTask @@ -17,15 +17,15 @@ Git Versioning GitVersion GitFlowVersion GitFlow GitHubFlow SemVer - + - + - + @@ -33,6 +33,6 @@ - + diff --git a/src/GitVersionTask/NugetAssets/build/GitVersionTask.targets b/src/GitVersionTask/NugetAssets/build/GitVersionTask.targets index d816d04563..fc1e76270d 100644 --- a/src/GitVersionTask/NugetAssets/build/GitVersionTask.targets +++ b/src/GitVersionTask/NugetAssets/build/GitVersionTask.targets @@ -1,4 +1,4 @@ - + false diff --git a/src/GitVersionTask/NugetAssets/build/Infrastructure.props b/src/GitVersionTask/NugetAssets/build/Infrastructure.props index e5ff8092e1..4ef57bf76a 100644 --- a/src/GitVersionTask/NugetAssets/build/Infrastructure.props +++ b/src/GitVersionTask/NugetAssets/build/Infrastructure.props @@ -1,5 +1,5 @@ - - + + @@ -9,22 +9,21 @@ $(GitVersionTaskBuildTools_FunctionalityDir)obj/ - - $(PackageVersion_UtilPackNuGetMSBuild) - $(MSBuildThisFileDirectory)../../../utilpack.nuget.msbuild/$(UtilPackVersion)/build/UtilPack.NuGet.MSBuild.props + + $(PackageVersion_NuGetUtilsMSBuildExec) + $(MSBuildThisFileDirectory)../../../nugetutils.msbuild.exec/$(UtilPackVersion)/build/NuGetUtils.MSBuild.Exec.props $([System.IO.Path]::GetFullPath('$(UtilPackNuGetMSBuildPropsPath)')) - true + true - .NETFramework - 4.6.1 + net461 $(UtilPackTaskFactoryParametersXML) @@ -35,7 +34,7 @@ - + diff --git a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionBuild.targets b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionBuild.targets index 95d8e40022..e7dfeb40d1 100644 --- a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionBuild.targets +++ b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionBuild.targets @@ -1,4 +1,4 @@ - + diff --git a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props index 36b320e5a5..5e868860fb 100644 --- a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props +++ b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props @@ -1,4 +1,4 @@ - + $(MSBuildProjectDirectory)\..\ @@ -40,43 +40,55 @@ - $(UtilPackTaskFactoryParametersXML) + + $(UtilPackTaskFactoryParametersXML) + Execute + - $(UtilPackTaskFactoryParametersXML) + + $(UtilPackTaskFactoryParametersXML) + Execute + - $(UtilPackTaskFactoryParametersXML) + + $(UtilPackTaskFactoryParametersXML) + Execute + - $(UtilPackTaskFactoryParametersXML) + + $(UtilPackTaskFactoryParametersXML) + Execute + True - \ No newline at end of file + diff --git a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionMultiTargetBuild.targets b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionMultiTargetBuild.targets index 379ff192cb..6441c4d259 100644 --- a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionMultiTargetBuild.targets +++ b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionMultiTargetBuild.targets @@ -1,4 +1,4 @@ - + diff --git a/src/GitVersionTask/TaskLogger.cs b/src/GitVersionTask/TaskLogger.cs new file mode 100644 index 0000000000..ea9f70d170 --- /dev/null +++ b/src/GitVersionTask/TaskLogger.cs @@ -0,0 +1,32 @@ +using System; +using System.IO; + +class TaskLogger +{ + private readonly TextWriter stdout; + private readonly TextWriter stderr; + + public TaskLogger( + TextWriter paramStdout = null, + TextWriter paramStderr = null + ) + { + this.stdout = paramStdout ?? Console.Out; + this.stderr = paramStderr ?? Console.Error; + } + + public void LogWarning(string message) + { + this.stdout.WriteLine(message); + } + + public void LogInfo(string message) + { + this.stdout.WriteLine(message); + } + + public void LogError(string message) + { + this.stderr.WriteLine(message); + } +} From c275ddae129c13a6c72479466025e6abb761162c Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Sun, 12 May 2019 18:07:50 +0300 Subject: [PATCH 3/8] Replacing String.Format with dollar-sign string interpolation, as was in original code. --- src/GitVersionTask/WriteVersionInfoToBuildLog.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GitVersionTask/WriteVersionInfoToBuildLog.cs b/src/GitVersionTask/WriteVersionInfoToBuildLog.cs index c1d08e017d..81e8849d4a 100644 --- a/src/GitVersionTask/WriteVersionInfoToBuildLog.cs +++ b/src/GitVersionTask/WriteVersionInfoToBuildLog.cs @@ -49,9 +49,9 @@ VersionVariables versionVariables { foreach (var buildServer in applicableBuildServers) { - logger.LogInfo(string.Format("Executing GenerateSetVersionMessage for '{0}'.", buildServer.GetType().Name)); + logger.LogInfo($"Executing GenerateSetVersionMessage for '{ buildServer.GetType().Name }'."); logger.LogInfo(buildServer.GenerateSetVersionMessage(versionVariables)); - logger.LogInfo(string.Format("Executing GenerateBuildLogOutput for '{0}'.", buildServer.GetType().Name)); + logger.LogInfo($"Executing GenerateBuildLogOutput for '{ buildServer.GetType().Name }'."); foreach (var buildParameter in BuildOutputFormatter.GenerateBuildLogOutput(buildServer, versionVariables)) { logger.LogInfo(buildParameter); From ae32f96e24ad2f899fec9c16ced9cc42b4c2c7af Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Sun, 12 May 2019 18:36:53 +0300 Subject: [PATCH 4/8] Forgot to update one reference to old-named property in .csproj file. --- src/GitVersionTask/GitVersionTask.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GitVersionTask/GitVersionTask.csproj b/src/GitVersionTask/GitVersionTask.csproj index 7da25e9429..ffe8e3c070 100644 --- a/src/GitVersionTask/GitVersionTask.csproj +++ b/src/GitVersionTask/GitVersionTask.csproj @@ -17,7 +17,7 @@ NugetAssets\GitVersionTask.nuspec 0.0.1-alpha-0001 - version=$(PackageVersion);configuration=$(Configuration);utilpackversion=$(PackageVersion_UtilPackNuGetMSBuild);libgit2sharpversion=$(PackageVersion_LibGit2Sharp);yamldotnetversion=$(PackageVersion_YamlDotNet) + version=$(PackageVersion);configuration=$(Configuration);utilpackversion=$(PackageVersion_NuGetUtilsMSBuildExec);libgit2sharpversion=$(PackageVersion_LibGit2Sharp);yamldotnetversion=$(PackageVersion_YamlDotNet) $(AssemblyName) From 23cb86fbe909df4a1053badd2a9692497019e000 Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Wed, 15 May 2019 17:39:34 +0300 Subject: [PATCH 5/8] Compacted and modified code as per discussion on pull request item in GitHub. --- .../GenerateGitVersionInformation.cs | 21 ++--- src/GitVersionTask/GetVersion.cs | 78 +++++++--------- ...s => GitVersionTaskCommonFunctionality.cs} | 91 +++++++++++-------- src/GitVersionTask/InvalidFileChecker.cs | 4 +- src/GitVersionTask/TaskLogger.cs | 5 +- src/GitVersionTask/UpdateAssemblyInfo.cs | 24 ++--- .../WriteVersionInfoToBuildLog.cs | 24 ++--- 7 files changed, 111 insertions(+), 136 deletions(-) rename src/GitVersionTask/{GitVersionTaskBase.cs => GitVersionTaskCommonFunctionality.cs} (55%) diff --git a/src/GitVersionTask/GenerateGitVersionInformation.cs b/src/GitVersionTask/GenerateGitVersionInformation.cs index 2730fa3f06..64c083e5d5 100644 --- a/src/GitVersionTask/GenerateGitVersionInformation.cs +++ b/src/GitVersionTask/GenerateGitVersionInformation.cs @@ -7,28 +7,21 @@ namespace GitVersionTask public static class GenerateGitVersionInformation { - public static Output Execute( - Input input - ) + // This method is entrypoint for the task declared in .props file + public static Output Execute(Input input) { - return GitVersionTaskBase.ExecuteGitVersionTask( - input, - InnerExecute - ); + return GitVersionTaskCommonFunctionality.ExecuteGitVersionTask(input, InnerExecute); } - private static Output InnerExecute( - Input input, - TaskLogger logger - ) + private static Output InnerExecute(Input input, TaskLogger logger) { - var execute = GitVersionTaskBase.CreateExecuteCore(); + var execute = GitVersionTaskCommonFunctionality.CreateExecuteCore(); if (!execute.TryGetVersion(input.SolutionDirectory, out var versionVariables, input.NoFetch, new Authentication())) { return null; } - var fileWriteInfo = input.IntermediateOutputPath.GetWorkingDirectoryAndFileNameAndExtension( + var fileWriteInfo = input.IntermediateOutputPath.GetFileWriteInfo( input.Language, input.ProjectFile, (pf, ext) => $"GitVersionInformation.g.{ext}", @@ -46,7 +39,7 @@ TaskLogger logger } - public sealed class Input : GitVersionTaskBase.InputWithCommonAdditionalProperties + public sealed class Input : InputWithCommonAdditionalProperties { } diff --git a/src/GitVersionTask/GetVersion.cs b/src/GitVersionTask/GetVersion.cs index e1923f90e5..8dd66e960d 100644 --- a/src/GitVersionTask/GetVersion.cs +++ b/src/GitVersionTask/GetVersion.cs @@ -5,22 +5,14 @@ namespace GitVersionTask public static class GetVersion { - public static Output Execute( - Input input - ) + public static Output Execute(Input input) { - return GitVersionTaskBase.ExecuteGitVersionTask( - input, - InnerExecute - ); + return GitVersionTaskCommonFunctionality.ExecuteGitVersionTask(input, InnerExecute); } - private static Output InnerExecute( - Input input, - TaskLogger logger - ) + private static Output InnerExecute(Input input, TaskLogger logger) { - if (!GitVersionTaskBase.CreateExecuteCore().TryGetVersion(input.SolutionDirectory, out var versionVariables, input.NoFetch, new GitVersion.Authentication())) + if (!GitVersionTaskCommonFunctionality.CreateExecuteCore().TryGetVersion(input.SolutionDirectory, out var versionVariables, input.NoFetch, new GitVersion.Authentication())) { return null; } @@ -35,72 +27,72 @@ TaskLogger logger return output; } - public sealed class Input : GitVersionTaskBase.AbstractInput + public sealed class Input : InputBase { } public sealed class Output { - public String Major { get; set; } + public string Major { get; set; } - public String Minor { get; set; } + public string Minor { get; set; } - public String Patch { get; set; } + public string Patch { get; set; } - public String PreReleaseTag { get; set; } + public string PreReleaseTag { get; set; } - public String PreReleaseTagWithDash { get; set; } + public string PreReleaseTagWithDash { get; set; } - public String PreReleaseLabel { get; set; } + public string PreReleaseLabel { get; set; } - public String PreReleaseNumber { get; set; } + public string PreReleaseNumber { get; set; } - public String WeightedPreReleaseNumber { get; set; } + public string WeightedPreReleaseNumber { get; set; } - public String BuildMetaData { get; set; } + public string BuildMetaData { get; set; } - public String BuildMetaDataPadded { get; set; } + public string BuildMetaDataPadded { get; set; } - public String FullBuildMetaData { get; set; } + public string FullBuildMetaData { get; set; } - public String MajorMinorPatch { get; set; } + public string MajorMinorPatch { get; set; } - public String SemVer { get; set; } + public string SemVer { get; set; } - public String LegacySemVer { get; set; } + public string LegacySemVer { get; set; } - public String LegacySemVerPadded { get; set; } + public string LegacySemVerPadded { get; set; } - public String AssemblySemVer { get; set; } + public string AssemblySemVer { get; set; } - public String AssemblySemFileVer { get; set; } + public string AssemblySemFileVer { get; set; } - public String FullSemVer { get; set; } + public string FullSemVer { get; set; } - public String InformationalVersion { get; set; } + public string InformationalVersion { get; set; } - public String BranchName { get; set; } + public string BranchName { get; set; } - public String Sha { get; set; } + public string Sha { get; set; } - public String ShortSha { get; set; } + public string ShortSha { get; set; } - public String NuGetVersionV2 { get; set; } + public string NuGetVersionV2 { get; set; } - public String NuGetVersion { get; set; } + public string NuGetVersion { get; set; } - public String NuGetPreReleaseTagV2 { get; set; } + public string NuGetPreReleaseTagV2 { get; set; } - public String NuGetPreReleaseTag { get; set; } + public string NuGetPreReleaseTag { get; set; } - public String CommitDate { get; set; } + public string CommitDate { get; set; } - public String VersionSourceSha { get; set; } + public string VersionSourceSha { get; set; } - public String CommitsSinceVersionSource { get; set; } + public string CommitsSinceVersionSource { get; set; } - public String CommitsSinceVersionSourcePadded { get; set; } + public string CommitsSinceVersionSourcePadded { get; set; } } } diff --git a/src/GitVersionTask/GitVersionTaskBase.cs b/src/GitVersionTask/GitVersionTaskCommonFunctionality.cs similarity index 55% rename from src/GitVersionTask/GitVersionTaskBase.cs rename to src/GitVersionTask/GitVersionTaskCommonFunctionality.cs index 64e6df6b19..47afbe3ebb 100644 --- a/src/GitVersionTask/GitVersionTaskBase.cs +++ b/src/GitVersionTask/GitVersionTaskCommonFunctionality.cs @@ -5,19 +5,17 @@ namespace GitVersionTask using System; using System.IO; - public static class GitVersionTaskBase + public static class GitVersionTaskCommonFunctionality { internal static TOutput ExecuteGitVersionTask( TInput input, Func execute ) - where TInput : AbstractInput + where TInput : InputBase where TOutput : class, new() { - if (!input.ValidateInput()) - { - throw new Exception("Invalid input."); - } + + input.ValidateInputOrThrowException(); var logger = new TaskLogger(); Logger.SetLoggers(logger.LogInfo, logger.LogInfo, logger.LogWarning, s => logger.LogError(s)); @@ -50,7 +48,7 @@ Func execute public static ExecuteCore CreateExecuteCore() => new ExecuteCore(new FileSystem()); - private static string GetFileExtension(this String language) + private static string GetFileExtension(this string language) { switch (language) { @@ -68,16 +66,16 @@ private static string GetFileExtension(this String language) } } - public static FileWriteInfo GetWorkingDirectoryAndFileNameAndExtension( - this String intermediateOutputPath, - String language, - String projectFile, - Func fileNameWithIntermediatePath, - Func fileNameNoIntermediatePath + public static FileWriteInfo GetFileWriteInfo( + this string intermediateOutputPath, + string language, + string projectFile, + Func fileNameWithIntermediatePath, + Func fileNameNoIntermediatePath ) { var fileExtension = language.GetFileExtension(); - String workingDirectory, fileName; + string workingDirectory, fileName; if (intermediateOutputPath == null) { fileName = fileNameWithIntermediatePath(projectFile, fileExtension); @@ -91,51 +89,66 @@ Func fileNameNoIntermediatePath return new FileWriteInfo(workingDirectory, fileName, fileExtension); } - public abstract class AbstractInput - { - public String SolutionDirectory { get; set; } + } + + public abstract class InputBase + { + public string SolutionDirectory { get; set; } - public Boolean NoFetch { get; set; } + public Boolean NoFetch { get; set; } - public virtual Boolean ValidateInput() + public void ValidateInputOrThrowException() + { + if (!this.ValidateInput()) { - return !String.IsNullOrEmpty(this.SolutionDirectory); + throw new InputValidationException($"Invalid input for {this.GetType()}."); } } - public abstract class InputWithCommonAdditionalProperties : AbstractInput + protected virtual Boolean ValidateInput() { - public String ProjectFile { get; set; } + return !String.IsNullOrEmpty(this.SolutionDirectory); + } + } - public String IntermediateOutputPath { get; set; } + public abstract class InputWithCommonAdditionalProperties : InputBase + { + public string ProjectFile { get; set; } - public String Language { get; set; } + public string IntermediateOutputPath { get; set; } + + public string Language { get; set; } + + protected override Boolean ValidateInput() + { + return base.ValidateInput() + && !String.IsNullOrEmpty(this.ProjectFile) + && !String.IsNullOrEmpty(this.IntermediateOutputPath) + && !String.IsNullOrEmpty(this.Language); + } + } + + public sealed class InputValidationException : Exception + { + public InputValidationException(string msg, Exception inner = null) + : base(msg, inner) + { - public override Boolean ValidateInput() - { - return base.ValidateInput() - && !String.IsNullOrEmpty(this.ProjectFile) - && !String.IsNullOrEmpty(this.IntermediateOutputPath) - && !String.IsNullOrEmpty(this.Language); - } } } public sealed class FileWriteInfo { - public FileWriteInfo( - String workingDirectory, - String fileName, - String fileExtension - ) + public FileWriteInfo(string workingDirectory, string fileName, string fileExtension) { this.WorkingDirectory = workingDirectory; this.FileName = fileName; this.FileExtension = fileExtension; } - public String WorkingDirectory { get; } - public String FileName { get; } - public String FileExtension { get; } + public string WorkingDirectory { get; } + public string FileName { get; } + public string FileExtension { get; } } + } diff --git a/src/GitVersionTask/InvalidFileChecker.cs b/src/GitVersionTask/InvalidFileChecker.cs index 8cc308fddb..019f502208 100644 --- a/src/GitVersionTask/InvalidFileChecker.cs +++ b/src/GitVersionTask/InvalidFileChecker.cs @@ -13,7 +13,7 @@ public static class InvalidFileChecker { ".vb", VisualBasicFileContainsVersionAttribute } }; - public static void CheckForInvalidFiles(IEnumerable compileFiles, string projectFile) + public static void CheckForInvalidFiles(IEnumerable compileFiles, string projectFile) { foreach (var compileFile in GetInvalidFiles(compileFiles, projectFile)) { @@ -97,7 +97,7 @@ static bool VisualBasicFileContainsVersionAttribute(string compileFile, string p \s*\(\s*\)\s*\> # End brackets ()>"); } - static IEnumerable GetInvalidFiles(IEnumerable compileFiles, string projectFile) + static IEnumerable GetInvalidFiles(IEnumerable compileFiles, string projectFile) { return compileFiles .Where(compileFile => compileFile.Contains("AssemblyInfo")) diff --git a/src/GitVersionTask/TaskLogger.cs b/src/GitVersionTask/TaskLogger.cs index ea9f70d170..6eb1e92e56 100644 --- a/src/GitVersionTask/TaskLogger.cs +++ b/src/GitVersionTask/TaskLogger.cs @@ -6,10 +6,7 @@ class TaskLogger private readonly TextWriter stdout; private readonly TextWriter stderr; - public TaskLogger( - TextWriter paramStdout = null, - TextWriter paramStderr = null - ) + public TaskLogger(TextWriter paramStdout = null, TextWriter paramStderr = null) { this.stdout = paramStdout ?? Console.Out; this.stderr = paramStderr ?? Console.Error; diff --git a/src/GitVersionTask/UpdateAssemblyInfo.cs b/src/GitVersionTask/UpdateAssemblyInfo.cs index 844f6c4b88..c3f2e72481 100644 --- a/src/GitVersionTask/UpdateAssemblyInfo.cs +++ b/src/GitVersionTask/UpdateAssemblyInfo.cs @@ -8,22 +8,14 @@ namespace GitVersionTask public static class UpdateAssemblyInfo { - public static Output Execute( - Input input - ) + public static Output Execute(Input input) { - return GitVersionTaskBase.ExecuteGitVersionTask( - input, - InnerExecute - ); + return GitVersionTaskCommonFunctionality.ExecuteGitVersionTask(input, InnerExecute); } - private static Output InnerExecute( - Input input, - TaskLogger logger - ) + private static Output InnerExecute(Input input, TaskLogger logger) { - var execute = GitVersionTaskBase.CreateExecuteCore(); + var execute = GitVersionTaskCommonFunctionality.CreateExecuteCore(); TempFileTracker.DeleteTempFiles(); @@ -39,7 +31,7 @@ TaskLogger logger private static Output CreateTempAssemblyInfo(Input input, VersionVariables versionVariables) { - var fileWriteInfo = input.IntermediateOutputPath.GetWorkingDirectoryAndFileNameAndExtension( + var fileWriteInfo = input.IntermediateOutputPath.GetFileWriteInfo( input.Language, input.ProjectFile, (pf, ext) => $"GitVersionTaskAssemblyInfo.g.{ext}", @@ -60,11 +52,11 @@ private static Output CreateTempAssemblyInfo(Input input, VersionVariables versi return output; } - public sealed class Input : GitVersionTaskBase.InputWithCommonAdditionalProperties + public sealed class Input : InputWithCommonAdditionalProperties { - public String[] CompileFiles { get; set; } + public string[] CompileFiles { get; set; } - public override Boolean ValidateInput() + protected override Boolean ValidateInput() { return base.ValidateInput() && this.CompileFiles != null; diff --git a/src/GitVersionTask/WriteVersionInfoToBuildLog.cs b/src/GitVersionTask/WriteVersionInfoToBuildLog.cs index 81e8849d4a..6f6b0d19b2 100644 --- a/src/GitVersionTask/WriteVersionInfoToBuildLog.cs +++ b/src/GitVersionTask/WriteVersionInfoToBuildLog.cs @@ -5,17 +5,12 @@ namespace GitVersionTask public class WriteVersionInfoToBuildLog { - public static Output Execute( - Input input - ) + public static Output Execute(Input input) { - return GitVersionTaskBase.ExecuteGitVersionTask( - input, - InnerExecute - ); + return GitVersionTaskCommonFunctionality.ExecuteGitVersionTask(input, InnerExecute); } - public sealed class Input : GitVersionTaskBase.AbstractInput + public sealed class Input : InputBase { // No additional inputs for this task } @@ -25,12 +20,9 @@ public sealed class Output // No output for this task } - private static Output InnerExecute( - Input input, - TaskLogger logger - ) + private static Output InnerExecute(Input input, TaskLogger logger) { - var execute = GitVersionTaskBase.CreateExecuteCore(); + var execute = GitVersionTaskCommonFunctionality.CreateExecuteCore(); if (!execute.TryGetVersion(input.SolutionDirectory, out var result, input.NoFetch, new Authentication())) { return null; @@ -41,11 +33,7 @@ TaskLogger logger return new Output(); } - private static void WriteIntegrationParameters( - TaskLogger logger, - IEnumerable applicableBuildServers, - VersionVariables versionVariables - ) + private static void WriteIntegrationParameters(TaskLogger logger, IEnumerable applicableBuildServers, VersionVariables versionVariables) { foreach (var buildServer in applicableBuildServers) { From 2d74362b2f600b0695dcba7484b11aa0315c74ab Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Wed, 15 May 2019 17:40:00 +0300 Subject: [PATCH 6/8] Even slightly more compact. --- src/GitVersionTask/GitVersionTaskCommonFunctionality.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/GitVersionTask/GitVersionTaskCommonFunctionality.cs b/src/GitVersionTask/GitVersionTaskCommonFunctionality.cs index 47afbe3ebb..2fa62ba9b1 100644 --- a/src/GitVersionTask/GitVersionTaskCommonFunctionality.cs +++ b/src/GitVersionTask/GitVersionTaskCommonFunctionality.cs @@ -7,10 +7,7 @@ namespace GitVersionTask public static class GitVersionTaskCommonFunctionality { - internal static TOutput ExecuteGitVersionTask( - TInput input, - Func execute - ) + internal static TOutput ExecuteGitVersionTask(TInput input, Func execute) where TInput : InputBase where TOutput : class, new() { From 8d1835424b235f4414ddce92abc5cf8f231b3632 Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Wed, 15 May 2019 17:49:09 +0300 Subject: [PATCH 7/8] Forgot one change. --- src/GitVersionTask/GitVersionTaskCommonFunctionality.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GitVersionTask/GitVersionTaskCommonFunctionality.cs b/src/GitVersionTask/GitVersionTaskCommonFunctionality.cs index 2fa62ba9b1..7851a51783 100644 --- a/src/GitVersionTask/GitVersionTaskCommonFunctionality.cs +++ b/src/GitVersionTask/GitVersionTaskCommonFunctionality.cs @@ -59,7 +59,7 @@ private static string GetFileExtension(this string language) return "vb"; default: - throw new Exception($"Unknown language detected: '{language}'"); + throw new ArgumentException($"Unknown language detected: '{language}'"); } } From b1c206f19f7cec15aa8d2d4439cad62ef191e910 Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Sat, 18 May 2019 22:45:00 +0300 Subject: [PATCH 8/8] Replacing all UtilPack references with NuGetUtils references. --- src/GitVersionTask/GitVersionTask.csproj | 4 ++-- .../NugetAssets/GitVersionTask.nuspec | 6 ++--- .../NugetAssets/build/Infrastructure.props | 24 +++++++++---------- .../functionality/GitVersionCommon.props | 8 +++---- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/GitVersionTask/GitVersionTask.csproj b/src/GitVersionTask/GitVersionTask.csproj index ffe8e3c070..2bd1428419 100644 --- a/src/GitVersionTask/GitVersionTask.csproj +++ b/src/GitVersionTask/GitVersionTask.csproj @@ -1,4 +1,4 @@ - + @@ -17,7 +17,7 @@ NugetAssets\GitVersionTask.nuspec 0.0.1-alpha-0001 - version=$(PackageVersion);configuration=$(Configuration);utilpackversion=$(PackageVersion_NuGetUtilsMSBuildExec);libgit2sharpversion=$(PackageVersion_LibGit2Sharp);yamldotnetversion=$(PackageVersion_YamlDotNet) + version=$(PackageVersion);configuration=$(Configuration);nugetutilsversion=$(PackageVersion_NuGetUtilsMSBuildExec);libgit2sharpversion=$(PackageVersion_LibGit2Sharp);yamldotnetversion=$(PackageVersion_YamlDotNet) $(AssemblyName) diff --git a/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec b/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec index 4a95b6e0d8..2c6d00d55a 100644 --- a/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec +++ b/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec @@ -17,15 +17,15 @@ Git Versioning GitVersion GitFlowVersion GitFlow GitHubFlow SemVer - + - + - + diff --git a/src/GitVersionTask/NugetAssets/build/Infrastructure.props b/src/GitVersionTask/NugetAssets/build/Infrastructure.props index 4ef57bf76a..dbdb4e8f01 100644 --- a/src/GitVersionTask/NugetAssets/build/Infrastructure.props +++ b/src/GitVersionTask/NugetAssets/build/Infrastructure.props @@ -10,31 +10,31 @@ - $(PackageVersion_NuGetUtilsMSBuildExec) - $(MSBuildThisFileDirectory)../../../nugetutils.msbuild.exec/$(UtilPackVersion)/build/NuGetUtils.MSBuild.Exec.props - $([System.IO.Path]::GetFullPath('$(UtilPackNuGetMSBuildPropsPath)')) + $(PackageVersion_NuGetUtilsMSBuildExec) + $(MSBuildThisFileDirectory)../../../nugetutils.msbuild.exec/$(NuGetUtilsVersion)/build/NuGetUtils.MSBuild.Exec.props + $([System.IO.Path]::GetFullPath('$(NuGetUtilsMSBuildPropsPath)')) - + - true + true - + net461 - - - $(UtilPackTaskFactoryParametersXML) + + + $(NuGetUtilsTaskFactoryParametersXML) true GitVersionTask.dll - + - + - + diff --git a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props index 3dbcdbdce3..cef2a6fce6 100644 --- a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props +++ b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props @@ -49,7 +49,7 @@ TaskName="GitVersionTask.UpdateAssemblyInfo"> - $(UtilPackTaskFactoryParametersXML) + $(NuGetUtilsTaskFactoryParametersXML) Execute @@ -61,7 +61,7 @@ TaskName="GitVersionTask.GenerateGitVersionInformation"> - $(UtilPackTaskFactoryParametersXML) + $(NuGetUtilsTaskFactoryParametersXML) Execute @@ -73,7 +73,7 @@ TaskName="GitVersionTask.GetVersion"> - $(UtilPackTaskFactoryParametersXML) + $(NuGetUtilsTaskFactoryParametersXML) Execute @@ -85,7 +85,7 @@ TaskName="GitVersionTask.WriteVersionInfoToBuildLog"> - $(UtilPackTaskFactoryParametersXML) + $(NuGetUtilsTaskFactoryParametersXML) Execute