From 66c1435320b351341db3291cd4d0ada038c03e80 Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Sat, 23 Mar 2019 16:25:03 +0200 Subject: [PATCH 01/12] Resolving conflicts related to #1644 . --- .../GetVersionTaskTests.cs | 10 +- .../GitVersionTask.Tests.csproj | 1 - .../InvalidFileCheckerTests.cs | 128 +++++++------- .../Mocks/MockBuildEngine.cs | 45 ----- .../Mocks/MockTaskItem.cs | 40 ----- .../GenerateGitVersionInformation.cs | 99 ++++++++--- src/GitVersionTask/GetVersion.cs | 163 ++++++++++-------- src/GitVersionTask/GitVersionTask.csproj | 5 +- src/GitVersionTask/GitVersionTaskBase.cs | 100 +++++------ src/GitVersionTask/InvalidFileChecker.cs | 7 +- .../NugetAssets/build/Infrastructure.props | 10 +- .../functionality/GitVersionCommon.props | 40 +++-- src/GitVersionTask/TaskLogger.cs | 32 ++++ src/GitVersionTask/UpdateAssemblyInfo.cs | 113 +++++++++--- src/GitVersionTask/UtilPack.Version.props | 2 +- .../WriteVersionInfoToBuildLog.cs | 84 +++++++-- 16 files changed, 516 insertions(+), 363 deletions(-) delete mode 100644 src/GitVersionTask.Tests/Mocks/MockBuildEngine.cs delete mode 100644 src/GitVersionTask.Tests/Mocks/MockTaskItem.cs create mode 100644 src/GitVersionTask/TaskLogger.cs diff --git a/src/GitVersionTask.Tests/GetVersionTaskTests.cs b/src/GitVersionTask.Tests/GetVersionTaskTests.cs index a3f6d5c7d1..bf2d995164 100644 --- a/src/GitVersionTask.Tests/GetVersionTaskTests.cs +++ b/src/GitVersionTask.Tests/GetVersionTaskTests.cs @@ -1,7 +1,6 @@ -using System.Linq; +using System.Linq; using GitVersion; using GitVersionTask; -using Microsoft.Build.Framework; using NUnit.Framework; using Shouldly; @@ -11,13 +10,12 @@ 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); + .Select( p => p.Name ); var variablesProperties = VersionVariables.AvailableVariables; - taskProperties.ShouldBe(variablesProperties, ignoreOrder: true); + taskProperties.ShouldBe( variablesProperties, ignoreOrder: true ); } } diff --git a/src/GitVersionTask.Tests/GitVersionTask.Tests.csproj b/src/GitVersionTask.Tests/GitVersionTask.Tests.csproj index f28c446c74..5852a0f162 100644 --- a/src/GitVersionTask.Tests/GitVersionTask.Tests.csproj +++ b/src/GitVersionTask.Tests/GitVersionTask.Tests.csproj @@ -17,7 +17,6 @@ - diff --git a/src/GitVersionTask.Tests/InvalidFileCheckerTests.cs b/src/GitVersionTask.Tests/InvalidFileCheckerTests.cs index e8877d2f94..6531d1b34a 100644 --- a/src/GitVersionTask.Tests/InvalidFileCheckerTests.cs +++ b/src/GitVersionTask.Tests/InvalidFileCheckerTests.cs @@ -1,8 +1,6 @@ using System; using System.IO; using GitVersion; -using GitVersionTask.Tests.Mocks; -using Microsoft.Build.Framework; using NUnit.Framework; [TestFixture] @@ -14,93 +12,93 @@ public class InvalidFileCheckerTests : TestBase [SetUp] public void CreateTemporaryProject() { - projectDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); - projectFile = Path.Combine(projectDirectory, "Fake.csproj"); + projectDirectory = Path.Combine( Path.GetTempPath(), Guid.NewGuid().ToString() ); + projectFile = Path.Combine( projectDirectory, "Fake.csproj" ); - Directory.CreateDirectory(projectDirectory); + Directory.CreateDirectory( projectDirectory ); - File.Create(projectFile).Close(); + File.Create( projectFile ).Close(); } [TearDown] public void Cleanup() { - Directory.Delete(projectDirectory, true); + Directory.Delete( projectDirectory, true ); } [Test] public void VerifyIgnoreNonAssemblyInfoFile() { - using (var writer = File.CreateText(Path.Combine(projectDirectory, "SomeOtherFile.cs"))) + using ( var writer = File.CreateText( Path.Combine( projectDirectory, "SomeOtherFile.cs" ) ) ) { - writer.Write(@" + writer.Write( @" using System; using System.Reflection; [assembly: AssemblyVersion(""1.0.0.0"")] -"); +" ); } - InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "SomeOtherFile.cs" } }, projectFile); + InvalidFileChecker.CheckForInvalidFiles( new[] { "SomeOtherFile.cs" }, projectFile ); } [Test] - public void VerifyAttributeFoundCSharp([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System.Reflection.AssemblyVersion")]string attribute) + public void VerifyAttributeFoundCSharp( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System.Reflection.AssemblyVersion" )]string attribute ) { - using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.cs"))) + using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.cs" ) ) ) { - writer.Write(@" + writer.Write( @" using System; using System.Reflection; [assembly:{0}(""1.0.0.0"")] -", attribute); +", attribute ); } - var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "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")); + 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" ) ); } [Test] - public void VerifyUnformattedAttributeFoundCSharp([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System . Reflection . AssemblyVersion")]string attribute) + public void VerifyUnformattedAttributeFoundCSharp( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System . Reflection . AssemblyVersion" )]string attribute ) { - using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.cs"))) + using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.cs" ) ) ) { - writer.Write(@" + writer.Write( @" using System; using System.Reflection; [ assembly : {0} ( ""1.0.0.0"")] -", attribute); +", attribute ); } - var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "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")); + 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" ) ); } [Test] - public void VerifyCommentWorksCSharp([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion")]string attribute) + public void VerifyCommentWorksCSharp( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion" )]string attribute ) { - using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.cs"))) + using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.cs" ) ) ) { - writer.Write(@" + writer.Write( @" using System; using System.Reflection; //[assembly: {0}(""1.0.0.0"")] -", attribute); +", attribute ); } - InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.cs" } }, projectFile); + InvalidFileChecker.CheckForInvalidFiles( new[] { "AssemblyInfo.cs" }, projectFile ); } [Test] - public void VerifyStringWorksCSharp([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion")]string attribute) + public void VerifyStringWorksCSharp( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion" )]string attribute ) { - using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.cs"))) + using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.cs" ) ) ) { - writer.Write(@" + writer.Write( @" using System; using System.Reflection; @@ -108,113 +106,113 @@ public class Temp {{ static const string Foo = ""[assembly: {0}(""""1.0.0.0"""")]""; }} -", attribute); +", attribute ); } - InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.cs" } }, projectFile); + InvalidFileChecker.CheckForInvalidFiles( new[] { "AssemblyInfo.cs" }, projectFile ); } [Test] - public void VerifyIdentifierWorksCSharp([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion")]string attribute) + public void VerifyIdentifierWorksCSharp( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion" )]string attribute ) { - using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.cs"))) + using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.cs" ) ) ) { - writer.Write(@" + writer.Write( @" using System; using System.Reflection; public class {0} {{ }} -", attribute); +", attribute ); } - InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.cs" } }, projectFile); + InvalidFileChecker.CheckForInvalidFiles( new[] { "AssemblyInfo.cs" }, projectFile ); } [Test] - public void VerifyAttributeFoundVisualBasic([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System.Reflection.AssemblyVersion")]string attribute) + public void VerifyAttributeFoundVisualBasic( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System.Reflection.AssemblyVersion" )]string attribute ) { - using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.vb"))) + using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.vb" ) ) ) { - writer.Write(@" + writer.Write( @" Imports System Imports System.Reflection -", attribute); +", attribute ); } - var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "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")); + 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" ) ); } [Test] - public void VerifyUnformattedAttributeFoundVisualBasic([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System . Reflection . AssemblyVersion")]string attribute) + public void VerifyUnformattedAttributeFoundVisualBasic( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System . Reflection . AssemblyVersion" )]string attribute ) { - using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.vb"))) + using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.vb" ) ) ) { - writer.Write(@" + writer.Write( @" Imports System Imports System.Reflection < Assembly : {0} ( ""1.0.0.0"")> -", attribute); +", attribute ); } - var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "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")); + 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" ) ); } [Test] - public void VerifyCommentWorksVisualBasic([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion")]string attribute) + public void VerifyCommentWorksVisualBasic( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion" )]string attribute ) { - using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.vb"))) + using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.vb" ) ) ) { - writer.Write(@" + writer.Write( @" Imports System Imports System.Reflection ' -", attribute); +", attribute ); } - InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.vb" } }, projectFile); + InvalidFileChecker.CheckForInvalidFiles( new[] { "AssemblyInfo.vb" }, projectFile ); } [Test] - public void VerifyStringWorksVisualBasic([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion")]string attribute) + public void VerifyStringWorksVisualBasic( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion" )]string attribute ) { - using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.vb"))) + using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.vb" ) ) ) { - writer.Write(@" + writer.Write( @" Imports System Imports System.Reflection Public Class Temp static const string Foo = """"; End Class -", attribute); +", attribute ); } - InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.vb" } }, projectFile); + InvalidFileChecker.CheckForInvalidFiles( new[] { "AssemblyInfo.vb" }, projectFile ); } [Test] - public void VerifyIdentifierWorksVisualBasic([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion")]string attribute) + public void VerifyIdentifierWorksVisualBasic( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion" )]string attribute ) { - using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.vb"))) + using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.vb" ) ) ) { - writer.Write(@" + writer.Write( @" Imports System Imports System.Reflection Public Class {0} End Class -", attribute); +", 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..fef30f5e89 100644 --- a/src/GitVersionTask/GenerateGitVersionInformation.cs +++ b/src/GitVersionTask/GenerateGitVersionInformation.cs @@ -1,42 +1,99 @@ 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; } + public static Output Execute( + Input input + ) + { + if ( !input.ValidateInput() ) + { + throw new Exception( "Invalid input." ); + } - [Required] - public string IntermediateOutputPath { get; set; } + var logger = new TaskLogger(); + Logger.SetLoggers( logger.LogInfo, logger.LogInfo, logger.LogWarning, s => logger.LogError( s ) ); - [Required] - public string Language { get; set; } - [Output] - public string GitVersionInformationFilePath { get; set; } + Output output = null; + try + { + output = InnerExecute(input ); + } + catch (WarningException errorException) + { + logger.LogWarning(errorException.Message); + output = new Output(); + } + catch (Exception exception) + { + logger.LogError("Error occurred: " + exception); + throw; + } + finally + { + Logger.Reset(); + } - protected override void InnerExecute() + return output; + } + + private static Output InnerExecute( Input input ) { - 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); + public sealed class Input + { + public string SolutionDirectory { get; set; } - var generator = new GitVersionInformationGenerator(fileName, workingDirectory, versionVariables, new FileSystem()); - generator.Generate(); + public string ProjectFile { get; set; } + + public string IntermediateOutputPath { get; set; } + + public string Language { get; set; } + + public bool NoFetch { get; set; } + } + + private static Boolean ValidateInput( this Input input ) + { + return input != null + && !String.IsNullOrEmpty( input.SolutionDirectory ) + && !String.IsNullOrEmpty(input.ProjectFile) + // && !String.IsNullOrEmpty(input.IntermediateOutputPath) // This was marked as [Required] but it InnerExecute still seems to allow it to be null... ? + && !String.IsNullOrEmpty(input.Language) + ; + } + + public sealed class Output + { + public string GitVersionInformationFilePath { get; set; } } } } diff --git a/src/GitVersionTask/GetVersion.cs b/src/GitVersionTask/GetVersion.cs index 5b8dcb0244..dd1e7a27e1 100644 --- a/src/GitVersionTask/GetVersion.cs +++ b/src/GitVersionTask/GetVersion.cs @@ -1,108 +1,129 @@ namespace GitVersionTask { - using Microsoft.Build.Framework; + using System; + using GitVersion; - public class GetVersion : GitVersionTaskBase + public static class GetVersion { - [Output] - public string Major { get; set; } + public static Output Execute( + Input input + ) + { + if (!input.ValidateInput()) + { + throw new Exception( "Invalid input." ); + } + + var logger = new TaskLogger(); + Logger.SetLoggers( logger.LogInfo, logger.LogInfo, logger.LogWarning, s => logger.LogError( s ) ); + var execute = GitVersionTaskBase.CreateExecuteCore(); + + Output output = null; + try + { + if ( execute.TryGetVersion(input.SolutionDirectory, out var variables, input.NoFetch, new Authentication())) + { + var outputType = typeof( Output ); + output = new Output(); + foreach (var variable in variables) + { + outputType.GetProperty(variable.Key).SetValue( output, variable.Value, null); + } + } + } + catch (WarningException errorException) + { + logger.LogWarning(errorException.Message); + output = new Output(); + } + catch (Exception exception) + { + logger.LogError("Error occurred: " + exception); + throw; + } + finally + { + Logger.Reset(); + } + + return output; + } - [Output] - public string Minor { get; set; } + public sealed class Input + { + public string SolutionDirectory { get; set; } - [Output] - public string Patch { get; set; } + public bool NoFetch { get; set; } + } - [Output] - public string PreReleaseTag { get; set; } + private static Boolean ValidateInput(this Input input) + { + return !String.IsNullOrEmpty( input?.SolutionDirectory ); + } - [Output] - public string PreReleaseTagWithDash { get; set; } + public sealed class Output + { + public string Major { get; set; } - [Output] - public string PreReleaseLabel { get; set; } + public string Minor { get; set; } - [Output] - public string PreReleaseNumber { get; set; } + public string Patch { get; set; } - [Output] - public string WeightedPreReleaseNumber { get; set; } + public string PreReleaseTag { get; set; } - [Output] - public string BuildMetaData { get; set; } + public string PreReleaseTagWithDash { get; set; } - [Output] - public string BuildMetaDataPadded { get; set; } + public string PreReleaseLabel { get; set; } - [Output] - public string FullBuildMetaData { get; set; } + public string PreReleaseNumber { get; set; } - [Output] - public string MajorMinorPatch { get; set; } + public string WeightedPreReleaseNumber { get; set; } - [Output] - public string SemVer { get; set; } + public string BuildMetaData { get; set; } - [Output] - public string LegacySemVer { get; set; } + public string BuildMetaDataPadded { get; set; } - [Output] - public string LegacySemVerPadded { get; set; } + public string FullBuildMetaData { get; set; } - [Output] - public string AssemblySemVer { get; set; } + public string MajorMinorPatch { get; set; } - [Output] - public string AssemblySemFileVer { get; set; } + public string SemVer { get; set; } - [Output] - public string FullSemVer { get; set; } + public string LegacySemVer { get; set; } - [Output] - public string InformationalVersion { get; set; } + public string LegacySemVerPadded { get; set; } - [Output] - public string BranchName { get; set; } + public string AssemblySemVer { get; set; } - [Output] - public string Sha { get; set; } + public string AssemblySemFileVer { get; set; } - [Output] - public string ShortSha { get; set; } + public string FullSemVer { get; set; } - [Output] - public string NuGetVersionV2 { get; set; } + public string InformationalVersion { get; set; } - [Output] - public string NuGetVersion { get; set; } + public string BranchName { get; set; } - [Output] - public string NuGetPreReleaseTagV2 { get; set; } + public string Sha { get; set; } - [Output] - public string NuGetPreReleaseTag { get; set; } + public string ShortSha { get; set; } - [Output] - public string CommitDate { get; set; } + public string NuGetVersionV2 { get; set; } - [Output] - public string VersionSourceSha { get; set; } + public string NuGetVersion { get; set; } - [Output] - public string CommitsSinceVersionSource { get; set; } + public string NuGetPreReleaseTagV2 { get; set; } - [Output] - public string CommitsSinceVersionSourcePadded { get; set; } + public string NuGetPreReleaseTag { 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 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..e3a17dbc32 100644 --- a/src/GitVersionTask/GitVersionTask.csproj +++ b/src/GitVersionTask/GitVersionTask.csproj @@ -20,6 +20,7 @@ version=$(PackageVersion);configuration=$(Configuration);utilpackversion=$(PackageVersion_UtilPackNuGetMSBuild);libgit2sharpversion=$(PackageVersion_LibGit2Sharp);yamldotnetversion=$(PackageVersion_YamlDotNet) $(AssemblyName) + latest @@ -37,9 +38,7 @@ All - - - + all runtime; build; native; contentfiles; analyzers diff --git a/src/GitVersionTask/GitVersionTaskBase.cs b/src/GitVersionTask/GitVersionTaskBase.cs index 37805297b5..45aa95ce68 100644 --- a/src/GitVersionTask/GitVersionTaskBase.cs +++ b/src/GitVersionTask/GitVersionTaskBase.cs @@ -1,72 +1,72 @@ 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() - { - var fileSystem = new FileSystem(); - ExecuteCore = new ExecuteCore(fileSystem); - GitVersion.Logger.SetLoggers(LogDebug, LogInfo, LogWarning, s => LogError(s)); - } + public static ExecuteCore CreateExecuteCore() + => new ExecuteCore( new FileSystem() ); - public override bool Execute() + private static string GetFileExtension( this String language ) { - try - { - InnerExecute(); - return true; - } - catch (WarningException errorException) + switch ( language ) { - LogWarning(errorException.Message); - return true; - } - catch (Exception exception) - { - LogError("Error occurred: " + exception); - return false; - } - } - - protected abstract void InnerExecute(); - - protected ExecuteCore ExecuteCore { get; } + 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)); - } - - public void LogWarning(string message) - { - BuildEngine.LogWarningEvent(new BuildWarningEventArgs(string.Empty, string.Empty, null, 0, 0, 0, 0, message, string.Empty, "GitVersionTask")); + default: + throw new Exception( $"Unknown language detected: '{language}'" ); + } } - public void LogInfo(string message) + public static FileWriteInfo GetWorkingDirectoryAndFileNameAndExtension( + this String intermediateOutputPath, + String language, + String projectFile, + Func fileNameWithIntermediatePath, + Func fileNameNoIntermediatePath + ) { - BuildEngine.LogMessageEvent(new BuildMessageEventArgs(message, string.Empty, "GitVersionTask", MessageImportance.Normal)); + 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 LogError(string message, string file = null) + public sealed class FileWriteInfo + { + public FileWriteInfo( + String workingDirectory, + String fileName, + String fileExtension + ) { - BuildEngine.LogErrorEvent(new BuildErrorEventArgs(string.Empty, string.Empty, file, 0, 0, 0, 0, message, string.Empty, "GitVersionTask")); + this.WorkingDirectory = this.WorkingDirectory; + this.FileName = fileName; + this.FileExtension = fileExtension; } - protected bool GetVersionVariables(out VersionVariables versionVariables) - { - return !ExecuteCore.TryGetVersion(SolutionDirectory, out versionVariables, NoFetch, new Authentication()); - } + 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/NugetAssets/build/Infrastructure.props b/src/GitVersionTask/NugetAssets/build/Infrastructure.props index e5ff8092e1..93d9083b49 100644 --- a/src/GitVersionTask/NugetAssets/build/Infrastructure.props +++ b/src/GitVersionTask/NugetAssets/build/Infrastructure.props @@ -1,4 +1,4 @@ - + @@ -9,16 +9,16 @@ $(GitVersionTaskBuildTools_FunctionalityDir)obj/ - + $(PackageVersion_UtilPackNuGetMSBuild) - $(MSBuildThisFileDirectory)../../../utilpack.nuget.msbuild/$(UtilPackVersion)/build/UtilPack.NuGet.MSBuild.props + $(MSBuildThisFileDirectory)../../../nugetutils.msbuild.exec/$(UtilPackVersion)/build/NuGetUtils.MSBuild.Exec.props $([System.IO.Path]::GetFullPath('$(UtilPackNuGetMSBuildPropsPath)')) - true + true @@ -35,7 +35,7 @@ - + diff --git a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props index 36b320e5a5..783dfcc277 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/TaskLogger.cs b/src/GitVersionTask/TaskLogger.cs new file mode 100644 index 0000000000..baa46b9b09 --- /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 ); + } +} diff --git a/src/GitVersionTask/UpdateAssemblyInfo.cs b/src/GitVersionTask/UpdateAssemblyInfo.cs index e386bbae8f..fd3fdafe12 100644 --- a/src/GitVersionTask/UpdateAssemblyInfo.cs +++ b/src/GitVersionTask/UpdateAssemblyInfo.cs @@ -1,58 +1,117 @@ 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; } + public static Output Execute( + Input input + ) + { + if ( !input.ValidateInput() ) + { + throw new Exception( "Invalid input." ); + } - [Required] - public ITaskItem[] CompileFiles { get; set; } + var logger = new TaskLogger(); + Logger.SetLoggers( logger.LogInfo, logger.LogInfo, logger.LogWarning, s => logger.LogError( s ) ); - [Required] - public string Language { get; set; } + Output output = null; + try + { + output = InnerExecute( input ); + } + catch (WarningException errorException) + { + logger.LogWarning(errorException.Message); + output = new Output(); + } + catch (Exception exception) + { + logger.LogError("Error occurred: " + exception); + throw; + } + finally + { + Logger.Reset(); + } - [Output] - public string AssemblyInfoTempFilePath { get; set; } + return output; + } - protected override void InnerExecute() + private static Output InnerExecute( Input input ) { + 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}" + ); - if (IntermediateOutputPath == null) + var output = new Output() { - assemblyInfoFileName = $"AssemblyInfo_{Path.GetFileNameWithoutExtension(ProjectFile)}_{Path.GetRandomFileName()}.g.{fileExtension}"; - } - - var workingDirectory = IntermediateOutputPath ?? TempFileTracker.TempPath; + AssemblyInfoTempFilePath = Path.Combine( fileWriteInfo.WorkingDirectory, fileWriteInfo.FileName ) + }; - AssemblyInfoTempFilePath = Path.Combine(workingDirectory, assemblyInfoFileName); - - using (var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(assemblyInfoFileName, workingDirectory, versionVariables, new FileSystem(), true)) + using (var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater( fileWriteInfo.FileName, fileWriteInfo.WorkingDirectory, versionVariables, new FileSystem(), true)) { assemblyInfoFileUpdater.Update(); assemblyInfoFileUpdater.CommitChanges(); } + + return output; + } + + public sealed class Input + { + public string SolutionDirectory { get; set; } + + public string ProjectFile { get; set; } + + public string IntermediateOutputPath { get; set; } + + public String[] CompileFiles { get; set; } + + public string Language { get; set; } + + public bool NoFetch { get; set; } + } + + private static Boolean ValidateInput(this Input input) + { + return input != null + && !String.IsNullOrEmpty( input.SolutionDirectory ) + && !String.IsNullOrEmpty( input.ProjectFile ) + && !String.IsNullOrEmpty( input.IntermediateOutputPath ) + && input.CompileFiles != null + && !String.IsNullOrEmpty( input.Language ) + ; + } + + 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..42fd789c7e 100644 --- a/src/GitVersionTask/UtilPack.Version.props +++ b/src/GitVersionTask/UtilPack.Version.props @@ -1,6 +1,6 @@ - 2.9.1 + 2.0.0 diff --git a/src/GitVersionTask/WriteVersionInfoToBuildLog.cs b/src/GitVersionTask/WriteVersionInfoToBuildLog.cs index 03340b7947..777dca7192 100644 --- a/src/GitVersionTask/WriteVersionInfoToBuildLog.cs +++ b/src/GitVersionTask/WriteVersionInfoToBuildLog.cs @@ -1,29 +1,93 @@ namespace GitVersionTask { + using System; using System.Collections.Generic; using GitVersion; - public class WriteVersionInfoToBuildLog : GitVersionTaskBase + public static class WriteVersionInfoToBuildLog { - protected override void InnerExecute() + + public static Output Execute( + Input input + ) { - if (GetVersionVariables(out var versionVariables)) return; + if ( !input.ValidateInput() ) + { + throw new Exception( "Invalid input." ); + } + + var logger = new TaskLogger(); + Logger.SetLoggers( logger.LogInfo, logger.LogInfo, logger.LogWarning, s => logger.LogError( s ) ); + + + Output output = null; + try + { + output = InnerExecute(logger, input); + } + catch (WarningException errorException) + { + logger.LogWarning(errorException.Message); + output = new Output(); + } + catch (Exception exception) + { + logger.LogError("Error occurred: " + exception); + throw; + } + finally + { + Logger.Reset(); + } - WriteIntegrationParameters(BuildServerList.GetApplicableBuildServers(), versionVariables); + return output; } - private void WriteIntegrationParameters(IEnumerable applicableBuildServers, VersionVariables versionVariables) + private static Output InnerExecute( + TaskLogger logger, + Input input + ) + { + var execute = GitVersionTaskBase.CreateExecuteCore(); + if (!execute.TryGetVersion(input.SolutionDirectory, out var result, input.NoFetch, new Authentication())) + { + return null; + } + + WriteIntegrationParameters(logger, BuildServerList.GetApplicableBuildServers(), result); + + return new Output(); + } + + private static void WriteIntegrationParameters(TaskLogger logger, IEnumerable applicableBuildServers, VersionVariables variables) { foreach (var buildServer in applicableBuildServers) { - LogInfo($"Executing GenerateSetVersionMessage for '{buildServer.GetType().Name}'."); - LogInfo(buildServer.GenerateSetVersionMessage(versionVariables)); - LogInfo($"Executing GenerateBuildLogOutput for '{buildServer.GetType().Name}'."); - foreach (var buildParameter in BuildOutputFormatter.GenerateBuildLogOutput(buildServer, versionVariables)) + logger.LogInfo(string.Format("Executing GenerateSetVersionMessage for '{0}'.", buildServer.GetType().Name)); + logger.LogInfo(buildServer.GenerateSetVersionMessage(variables)); + logger.LogInfo(string.Format("Executing GenerateBuildLogOutput for '{0}'.", buildServer.GetType().Name)); + foreach (var buildParameter in BuildOutputFormatter.GenerateBuildLogOutput(buildServer, variables)) { - LogInfo(buildParameter); + logger.LogInfo(buildParameter); } } } + + public sealed class Input + { + public string SolutionDirectory { get; set; } + + public bool NoFetch { get; set; } + } + + public static Boolean ValidateInput(this Input input) + { + return !String.IsNullOrEmpty( input?.SolutionDirectory ); + } + + public sealed class Output + { + // No output for this task + } } } From 9c1fc6c264bc3694ff63ee4e03a9dda459457837 Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Fri, 8 Mar 2019 23:46:14 +0200 Subject: [PATCH 02/12] First modifications for changing from UtilPack.NuGet.MSBuild to NuGetUtils.MSBuild.Exec. --- src/GitVersionTask/UpdateAssemblyInfo.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/GitVersionTask/UpdateAssemblyInfo.cs b/src/GitVersionTask/UpdateAssemblyInfo.cs index fd3fdafe12..87744a9c01 100644 --- a/src/GitVersionTask/UpdateAssemblyInfo.cs +++ b/src/GitVersionTask/UpdateAssemblyInfo.cs @@ -8,7 +8,6 @@ namespace GitVersionTask public static class UpdateAssemblyInfo { - public static Output Execute( Input input ) From 7a077a5327532b885f7f3b2018469a0a2cdedc5d Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Sun, 10 Mar 2019 23:06:56 +0200 Subject: [PATCH 03/12] Also updated .nuspec file with new dependency, and modified task factory name in .props file. --- src/GitVersionTask/NugetAssets/GitVersionTask.nuspec | 8 ++++---- .../build/functionality/GitVersionCommon.props | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec b/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec index b3436fdce8..65f98a0b56 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 - + - + - + diff --git a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props index 783dfcc277..5e868860fb 100644 --- a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props +++ b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props @@ -41,7 +41,7 @@ @@ -53,7 +53,7 @@ @@ -65,7 +65,7 @@ @@ -77,7 +77,7 @@ From 9c74cd7330fce9c398f8bfd024833a2d63aec1e8 Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Mon, 11 Mar 2019 00:02:55 +0200 Subject: [PATCH 04/12] Making GitVersionTask.Tests compilable again. --- .../GetVersionTaskTests.cs | 6 +- .../InvalidFileCheckerTests.cs | 126 +++++++++--------- 2 files changed, 66 insertions(+), 66 deletions(-) diff --git a/src/GitVersionTask.Tests/GetVersionTaskTests.cs b/src/GitVersionTask.Tests/GetVersionTaskTests.cs index bf2d995164..22fbaf54e5 100644 --- a/src/GitVersionTask.Tests/GetVersionTaskTests.cs +++ b/src/GitVersionTask.Tests/GetVersionTaskTests.cs @@ -10,12 +10,12 @@ public class GetVersionTaskTests : TestBase [Test] public void OutputsShouldMatchVariableProvider() { - var taskProperties = typeof( GetVersion.Output ) + var taskProperties = typeof(GetVersion.Output) .GetProperties() - .Select( p => p.Name ); + .Select(p => p.Name); var variablesProperties = VersionVariables.AvailableVariables; - taskProperties.ShouldBe( variablesProperties, ignoreOrder: true ); + taskProperties.ShouldBe(variablesProperties, ignoreOrder: true); } } diff --git a/src/GitVersionTask.Tests/InvalidFileCheckerTests.cs b/src/GitVersionTask.Tests/InvalidFileCheckerTests.cs index 6531d1b34a..c25568137a 100644 --- a/src/GitVersionTask.Tests/InvalidFileCheckerTests.cs +++ b/src/GitVersionTask.Tests/InvalidFileCheckerTests.cs @@ -12,93 +12,93 @@ public class InvalidFileCheckerTests : TestBase [SetUp] public void CreateTemporaryProject() { - projectDirectory = Path.Combine( Path.GetTempPath(), Guid.NewGuid().ToString() ); - projectFile = Path.Combine( projectDirectory, "Fake.csproj" ); + projectDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + projectFile = Path.Combine(projectDirectory, "Fake.csproj"); - Directory.CreateDirectory( projectDirectory ); + Directory.CreateDirectory(projectDirectory); - File.Create( projectFile ).Close(); + File.Create(projectFile).Close(); } [TearDown] public void Cleanup() { - Directory.Delete( projectDirectory, true ); + Directory.Delete(projectDirectory, true); } [Test] public void VerifyIgnoreNonAssemblyInfoFile() { - using ( var writer = File.CreateText( Path.Combine( projectDirectory, "SomeOtherFile.cs" ) ) ) + using (var writer = File.CreateText(Path.Combine(projectDirectory, "SomeOtherFile.cs"))) { - writer.Write( @" + writer.Write(@" using System; using System.Reflection; [assembly: AssemblyVersion(""1.0.0.0"")] -" ); +"); } - InvalidFileChecker.CheckForInvalidFiles( new[] { "SomeOtherFile.cs" }, projectFile ); + InvalidFileChecker.CheckForInvalidFiles(new[] { "SomeOtherFile.cs" }, projectFile); } [Test] - public void VerifyAttributeFoundCSharp( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System.Reflection.AssemblyVersion" )]string attribute ) + public void VerifyAttributeFoundCSharp([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System.Reflection.AssemblyVersion")]string attribute) { - using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.cs" ) ) ) + using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.cs"))) { - writer.Write( @" + writer.Write(@" using System; using System.Reflection; [assembly:{0}(""1.0.0.0"")] -", attribute ); +", 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" ) ); + 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")); } [Test] - public void VerifyUnformattedAttributeFoundCSharp( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System . Reflection . AssemblyVersion" )]string attribute ) + public void VerifyUnformattedAttributeFoundCSharp([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System . Reflection . AssemblyVersion")]string attribute) { - using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.cs" ) ) ) + using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.cs"))) { - writer.Write( @" + writer.Write(@" using System; using System.Reflection; [ assembly : {0} ( ""1.0.0.0"")] -", attribute ); +", 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" ) ); + 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")); } [Test] - public void VerifyCommentWorksCSharp( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion" )]string attribute ) + public void VerifyCommentWorksCSharp([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion")]string attribute) { - using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.cs" ) ) ) + using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.cs"))) { - writer.Write( @" + writer.Write(@" using System; using System.Reflection; //[assembly: {0}(""1.0.0.0"")] -", attribute ); +", attribute); } - InvalidFileChecker.CheckForInvalidFiles( new[] { "AssemblyInfo.cs" }, projectFile ); + InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.cs" }, projectFile); } [Test] - public void VerifyStringWorksCSharp( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion" )]string attribute ) + public void VerifyStringWorksCSharp([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion")]string attribute) { - using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.cs" ) ) ) + using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.cs"))) { - writer.Write( @" + writer.Write(@" using System; using System.Reflection; @@ -106,113 +106,113 @@ public class Temp {{ static const string Foo = ""[assembly: {0}(""""1.0.0.0"""")]""; }} -", attribute ); +", attribute); } - InvalidFileChecker.CheckForInvalidFiles( new[] { "AssemblyInfo.cs" }, projectFile ); + InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.cs" }, projectFile); } [Test] - public void VerifyIdentifierWorksCSharp( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion" )]string attribute ) + public void VerifyIdentifierWorksCSharp([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion")]string attribute) { - using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.cs" ) ) ) + using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.cs"))) { - writer.Write( @" + writer.Write(@" using System; using System.Reflection; public class {0} {{ }} -", attribute ); +", attribute); } - InvalidFileChecker.CheckForInvalidFiles( new[] { "AssemblyInfo.cs" }, projectFile ); + InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.cs" }, projectFile); } [Test] - public void VerifyAttributeFoundVisualBasic( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System.Reflection.AssemblyVersion" )]string attribute ) + public void VerifyAttributeFoundVisualBasic([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System.Reflection.AssemblyVersion")]string attribute) { - using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.vb" ) ) ) + using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.vb"))) { - writer.Write( @" + writer.Write(@" Imports System Imports System.Reflection -", attribute ); +", 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" ) ); + 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")); } [Test] - public void VerifyUnformattedAttributeFoundVisualBasic( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System . Reflection . AssemblyVersion" )]string attribute ) + public void VerifyUnformattedAttributeFoundVisualBasic([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion", "System . Reflection . AssemblyVersion")]string attribute) { - using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.vb" ) ) ) + using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.vb"))) { - writer.Write( @" + writer.Write(@" Imports System Imports System.Reflection < Assembly : {0} ( ""1.0.0.0"")> -", attribute ); +", 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" ) ); + 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")); } [Test] - public void VerifyCommentWorksVisualBasic( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion" )]string attribute ) + public void VerifyCommentWorksVisualBasic([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion")]string attribute) { - using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.vb" ) ) ) + using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.vb"))) { - writer.Write( @" + writer.Write(@" Imports System Imports System.Reflection ' -", attribute ); +", attribute); } - InvalidFileChecker.CheckForInvalidFiles( new[] { "AssemblyInfo.vb" }, projectFile ); + InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.vb" }, projectFile); } [Test] - public void VerifyStringWorksVisualBasic( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion" )]string attribute ) + public void VerifyStringWorksVisualBasic([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion")]string attribute) { - using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.vb" ) ) ) + using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.vb"))) { - writer.Write( @" + writer.Write(@" Imports System Imports System.Reflection Public Class Temp static const string Foo = """"; End Class -", attribute ); +", attribute); } - InvalidFileChecker.CheckForInvalidFiles( new[] { "AssemblyInfo.vb" }, projectFile ); + InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.vb" }, projectFile); } [Test] - public void VerifyIdentifierWorksVisualBasic( [Values( "AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion" )]string attribute ) + public void VerifyIdentifierWorksVisualBasic([Values("AssemblyVersion", "AssemblyFileVersion", "AssemblyInformationalVersion")]string attribute) { - using ( var writer = File.CreateText( Path.Combine( projectDirectory, "AssemblyInfo.vb" ) ) ) + using (var writer = File.CreateText(Path.Combine(projectDirectory, "AssemblyInfo.vb"))) { - writer.Write( @" + writer.Write(@" Imports System Imports System.Reflection Public Class {0} End Class -", attribute ); +", attribute); } - InvalidFileChecker.CheckForInvalidFiles( new[] { "AssemblyInfo.vb" }, projectFile ); + InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.vb" }, projectFile); } } From e4ebb13cab5f8ec2311ac3415847ced94e9b50d1 Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Thu, 14 Mar 2019 01:06:40 +0200 Subject: [PATCH 05/12] Updated to newer NuGetUtils.MSBuild.Exec, which runs on .NET Desktop successfully now. Also modified the task factory parameter as needed. --- src/GitVersionTask/NugetAssets/build/Infrastructure.props | 3 +-- src/GitVersionTask/UtilPack.Version.props | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/GitVersionTask/NugetAssets/build/Infrastructure.props b/src/GitVersionTask/NugetAssets/build/Infrastructure.props index 93d9083b49..f21a1bb007 100644 --- a/src/GitVersionTask/NugetAssets/build/Infrastructure.props +++ b/src/GitVersionTask/NugetAssets/build/Infrastructure.props @@ -23,8 +23,7 @@ - .NETFramework - 4.6.1 + net461 $(UtilPackTaskFactoryParametersXML) diff --git a/src/GitVersionTask/UtilPack.Version.props b/src/GitVersionTask/UtilPack.Version.props index 42fd789c7e..61d0a62649 100644 --- a/src/GitVersionTask/UtilPack.Version.props +++ b/src/GitVersionTask/UtilPack.Version.props @@ -1,6 +1,6 @@ - 2.0.0 + 2.0.1 From 956ae14eb149894e92b77b3a8f23791724aad8f9 Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Thu, 14 Mar 2019 17:00:34 +0200 Subject: [PATCH 06/12] Fixing a typo causing NullReferenceException. --- src/GitVersionTask/GitVersionTaskBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GitVersionTask/GitVersionTaskBase.cs b/src/GitVersionTask/GitVersionTaskBase.cs index 45aa95ce68..cd68978b34 100644 --- a/src/GitVersionTask/GitVersionTaskBase.cs +++ b/src/GitVersionTask/GitVersionTaskBase.cs @@ -60,7 +60,7 @@ public FileWriteInfo( String fileExtension ) { - this.WorkingDirectory = this.WorkingDirectory; + this.WorkingDirectory = workingDirectory; this.FileName = fileName; this.FileExtension = fileExtension; } From 2ae8f1a631409d5bf68e3ef81de1665cba9cf691 Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Mon, 18 Mar 2019 22:55:25 +0200 Subject: [PATCH 07/12] Updating to newer NuGetUtils.MSBuild.Exec version, which fixes the bug with ITaskItems (seen as String arrays to GitVersionTask). --- src/GitVersionTask/UtilPack.Version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GitVersionTask/UtilPack.Version.props b/src/GitVersionTask/UtilPack.Version.props index 61d0a62649..7fa286761b 100644 --- a/src/GitVersionTask/UtilPack.Version.props +++ b/src/GitVersionTask/UtilPack.Version.props @@ -1,6 +1,6 @@ - 2.0.1 + 2.0.2 From 91650a0f9abd4d0ded2b47cb368f02d4f1632f2f Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Wed, 20 Mar 2019 20:43:50 +0200 Subject: [PATCH 08/12] Updated NuGetUtils.MSBuild.Exec to 2.0.3. --- src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props diff --git a/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props b/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props new file mode 100644 index 0000000000..ab42531c0a --- /dev/null +++ b/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props @@ -0,0 +1,5 @@ + + + 2.0.3 + + From 42f30a8ebc68c0e8f3255bd1e218f9243dcd06e4 Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Wed, 20 Mar 2019 20:45:04 +0200 Subject: [PATCH 09/12] Partially changed UtilPack names to NuGetUtils.MSBuild.Exec. Need more thorough check later though. --- src/GitVersionTask/GitVersionTask.csproj | 8 ++++---- src/GitVersionTask/NugetAssets/GitVersionTask.nuspec | 2 +- src/GitVersionTask/NugetAssets/build/Infrastructure.props | 4 ++-- src/GitVersionTask/UtilPack.Version.props | 6 ------ 4 files changed, 7 insertions(+), 13 deletions(-) delete mode 100644 src/GitVersionTask/UtilPack.Version.props diff --git a/src/GitVersionTask/GitVersionTask.csproj b/src/GitVersionTask/GitVersionTask.csproj index e3a17dbc32..fbc174ba59 100644 --- a/src/GitVersionTask/GitVersionTask.csproj +++ b/src/GitVersionTask/GitVersionTask.csproj @@ -1,7 +1,7 @@ - + net461;netstandard2.0 @@ -24,10 +24,10 @@ - + - + build\ @@ -38,7 +38,7 @@ All - + all runtime; build; native; contentfiles; analyzers diff --git a/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec b/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec index 65f98a0b56..4a95b6e0d8 100644 --- a/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec +++ b/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec @@ -33,6 +33,6 @@ - + diff --git a/src/GitVersionTask/NugetAssets/build/Infrastructure.props b/src/GitVersionTask/NugetAssets/build/Infrastructure.props index f21a1bb007..4ef57bf76a 100644 --- a/src/GitVersionTask/NugetAssets/build/Infrastructure.props +++ b/src/GitVersionTask/NugetAssets/build/Infrastructure.props @@ -1,5 +1,5 @@ - + @@ -10,7 +10,7 @@ - $(PackageVersion_UtilPackNuGetMSBuild) + $(PackageVersion_NuGetUtilsMSBuildExec) $(MSBuildThisFileDirectory)../../../nugetutils.msbuild.exec/$(UtilPackVersion)/build/NuGetUtils.MSBuild.Exec.props $([System.IO.Path]::GetFullPath('$(UtilPackNuGetMSBuildPropsPath)')) diff --git a/src/GitVersionTask/UtilPack.Version.props b/src/GitVersionTask/UtilPack.Version.props deleted file mode 100644 index 7fa286761b..0000000000 --- a/src/GitVersionTask/UtilPack.Version.props +++ /dev/null @@ -1,6 +0,0 @@ - - - 2.0.2 - - - From 6b607fad6e68feb480651a2a1f038e78e0522638 Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Wed, 20 Mar 2019 21:34:38 +0200 Subject: [PATCH 10/12] Forgot to update one reference to renamed property. --- 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 fbc174ba59..a556649cba 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) latest From 1b8ae109effd1f2159470a3d693b8b8e1945c50a Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Thu, 21 Mar 2019 00:22:28 +0200 Subject: [PATCH 11/12] Updating to newer version of NuGetUtils.MSBuild.Exec in order to cut down the amount of process invocations used by the task factory. --- src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props b/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props index ab42531c0a..c716377cc7 100644 --- a/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props +++ b/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props @@ -1,5 +1,5 @@ - 2.0.3 + 2.0.4 From 1a09bc37c5317ec032f7873a4f033845ca0c16e6 Mon Sep 17 00:00:00 2001 From: Stanislav Muhametsin <346799+stazz@users.noreply.github.com> Date: Wed, 27 Mar 2019 23:41:18 +0200 Subject: [PATCH 12/12] Updated the NuGetUtils.MSBuild.Exec version to newer, with most recent fixes. --- src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props b/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props index c716377cc7..a00890c752 100644 --- a/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props +++ b/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props @@ -1,5 +1,6 @@ - 2.0.4 + 2.0.5 +