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 3c18824740..7a1a43f9d4 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 2e37e3975f..c002731c5a 100644
--- a/src/GitVersionTask/GenerateGitVersionInformation.cs
+++ b/src/GitVersionTask/GenerateGitVersionInformation.cs
@@ -4,90 +4,96 @@ namespace GitVersionTask
using System.IO;
using GitVersion;
using GitVersion.Helpers;
- using Microsoft.Build.Framework;
- public class GenerateGitVersionInformation : GitVersionTaskBase
+ public static class GenerateGitVersionInformation
{
- public GenerateGitVersionInformation()
+ public static Output Execute(
+ Input input
+ )
{
- }
-
- [Required]
- public string SolutionDirectory { get; set; }
-
- [Required]
- public string ProjectFile { get; set; }
-
- [Required]
- public string IntermediateOutputPath { get; set; }
-
- [Required]
- public string Language { get; set; }
-
- [Output]
- public string GitVersionInformationFilePath { get; set; }
+ if ( !input.ValidateInput() )
+ {
+ throw new Exception( "Invalid input." );
+ }
- public bool NoFetch { get; set; }
+ var logger = new TaskLogger();
+ Logger.SetLoggers( logger.LogInfo, logger.LogInfo, logger.LogWarning, s => logger.LogError( s ) );
+
- public override bool Execute()
- {
+ Output output = null;
try
{
- InnerExecute();
- return true;
+ output = InnerExecute(input );
}
catch (WarningException errorException)
{
- this.LogWarning(errorException.Message);
- return true;
+ logger.LogWarning(errorException.Message);
+ output = new Output();
}
catch (Exception exception)
{
- this.LogError("Error occurred: " + exception);
- return false;
+ logger.LogError("Error occurred: " + exception);
+ throw;
}
- }
-
- void InnerExecute()
- {
- VersionVariables versionVariables;
- if (!ExecuteCore.TryGetVersion(SolutionDirectory, out versionVariables, NoFetch, new Authentication()))
+ finally
{
- return;
+ Logger.Reset();
}
- var fileExtension = GetFileExtension();
- var fileName = $"GitVersionInformation.g.{fileExtension}";
+ return output;
+ }
- if (IntermediateOutputPath == null)
+ private static Output InnerExecute( Input input )
+ {
+ var execute = GitVersionTaskBase.CreateExecuteCore();
+ if (!execute.TryGetVersion(input.SolutionDirectory, out var versionVariables, input.NoFetch, new Authentication()))
{
- fileName = $"GitVersionInformation_{Path.GetFileNameWithoutExtension(ProjectFile)}_{Path.GetRandomFileName()}.g.{fileExtension}";
+ return null;
}
- var workingDirectory = IntermediateOutputPath ?? TempFileTracker.TempPath;
-
- GitVersionInformationFilePath = Path.Combine(workingDirectory, fileName);
+ var fileWriteInfo = input.IntermediateOutputPath.GetWorkingDirectoryAndFileNameAndExtension(
+ input.Language,
+ input.ProjectFile,
+ ( pf, ext ) => $"GitVersionInformation.g.{ext}",
+ ( pf, ext ) => $"GitVersionInformation_{Path.GetFileNameWithoutExtension( pf )}_{Path.GetRandomFileName()}.g.{ext}"
+ );
- var generator = new GitVersionInformationGenerator(fileName, workingDirectory, versionVariables, new FileSystem());
+ var output = new Output()
+ {
+ GitVersionInformationFilePath = Path.Combine( fileWriteInfo.WorkingDirectory, fileWriteInfo.FileName )
+ };
+ var generator = new GitVersionInformationGenerator( fileWriteInfo.FileName, fileWriteInfo.WorkingDirectory, versionVariables, new FileSystem());
generator.Generate();
+
+ return output;
}
- string GetFileExtension()
+ public sealed class Input
{
- switch (Language)
- {
- case "C#":
- return "cs";
+ public string SolutionDirectory { get; set; }
- case "F#":
- return "fs";
+ public string ProjectFile { get; set; }
- case "VB":
- return "vb";
+ public string IntermediateOutputPath { get; set; }
- default:
- throw new Exception($"Unknown language detected: '{Language}'");
- }
+ 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 07f8be237f..d184204901 100644
--- a/src/GitVersionTask/GetVersion.cs
+++ b/src/GitVersionTask/GetVersion.cs
@@ -3,135 +3,127 @@ namespace GitVersionTask
using System;
using GitVersion;
- using Microsoft.Build.Framework;
-
- public class GetVersion : GitVersionTaskBase
+ public static class GetVersion
{
- public GetVersion()
+ 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();
+ }
- [Required]
- public string SolutionDirectory { get; set; }
+ return output;
+ }
- public bool NoFetch { get; set; }
+ public sealed class Input
+ {
+ public string SolutionDirectory { get; set; }
- [Output]
- public string Major { get; set; }
+ public bool NoFetch { get; set; }
+ }
- [Output]
- public string Minor { get; set; }
+ private static Boolean ValidateInput(this Input input)
+ {
+ return !String.IsNullOrEmpty( input?.SolutionDirectory );
+ }
- [Output]
- public string Patch { get; set; }
+ public sealed class Output
+ {
+ public string Major { get; set; }
- [Output]
- public string PreReleaseTag { get; set; }
+ public string Minor { get; set; }
- [Output]
- public string PreReleaseTagWithDash { get; set; }
+ public string Patch { get; set; }
- [Output]
- public string PreReleaseLabel { get; set; }
+ public string PreReleaseTag { get; set; }
- [Output]
- public string PreReleaseNumber { get; set; }
+ public string PreReleaseTagWithDash { get; set; }
- [Output]
- public string WeightedPreReleaseNumber { get; set; }
+ public string PreReleaseLabel { get; set; }
- [Output]
- public string BuildMetaData { get; set; }
+ public string PreReleaseNumber { get; set; }
- [Output]
- public string BuildMetaDataPadded { get; set; }
+ public string WeightedPreReleaseNumber { get; set; }
- [Output]
- public string FullBuildMetaData { get; set; }
+ public string BuildMetaData { get; set; }
- [Output]
- public string MajorMinorPatch { get; set; }
+ public string BuildMetaDataPadded { get; set; }
- [Output]
- public string SemVer { get; set; }
+ public string FullBuildMetaData { get; set; }
- [Output]
- public string LegacySemVer { get; set; }
+ public string MajorMinorPatch { get; set; }
- [Output]
- public string LegacySemVerPadded { get; set; }
+ public string SemVer { get; set; }
- [Output]
- public string AssemblySemVer { get; set; }
+ public string LegacySemVer { get; set; }
- [Output]
- public string AssemblySemFileVer { get; set; }
+ public string LegacySemVerPadded { get; set; }
- [Output]
- public string FullSemVer { get; set; }
+ public string AssemblySemVer { get; set; }
- [Output]
- public string InformationalVersion { get; set; }
+ public string AssemblySemFileVer { get; set; }
- [Output]
- public string BranchName { get; set; }
+ public string FullSemVer { get; set; }
- [Output]
- public string Sha { get; set; }
+ public string InformationalVersion { get; set; }
- [Output]
- public string ShortSha { get; set; }
+ public string BranchName { get; set; }
- [Output]
- public string NuGetVersionV2 { get; set; }
+ public string Sha { get; set; }
- [Output]
- public string NuGetVersion { get; set; }
+ public string ShortSha { get; set; }
- [Output]
- public string NuGetPreReleaseTagV2 { get; set; }
+ public string NuGetVersionV2 { get; set; }
- [Output]
- public string NuGetPreReleaseTag { get; set; }
+ public string VersionSourceSha { get; set; }
- [Output]
- public string CommitDate { get; set; }
+ public string CommitsSinceVersionSource { 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; }
- public override bool Execute()
- {
- try
- {
- VersionVariables variables;
+ public string CommitDate { get; set; }
- if (ExecuteCore.TryGetVersion(SolutionDirectory, out variables, NoFetch, new Authentication()))
- {
- var thisType = typeof(GetVersion);
- foreach (var variable in variables)
- {
- thisType.GetProperty(variable.Key).SetValue(this, variable.Value, null);
- }
- }
- return true;
- }
- catch (WarningException errorException)
- {
- this.LogWarning(errorException.Message);
- return true;
- }
- catch (Exception exception)
- {
- this.LogError("Error occurred: " + exception);
- return false;
- }
+ public string CommitsSinceVersionSourcePadded { get; set; }
}
}
+
+
}
diff --git a/src/GitVersionTask/GitVersionTask.csproj b/src/GitVersionTask/GitVersionTask.csproj
index 39f6ddf96e..62265f9bf8 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 caeb254ed2..45aa95ce68 100644
--- a/src/GitVersionTask/GitVersionTaskBase.cs
+++ b/src/GitVersionTask/GitVersionTaskBase.cs
@@ -1,45 +1,72 @@
-namespace GitVersionTask
+namespace GitVersionTask
{
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
{
- readonly ExecuteCore executeCore;
+ public static ExecuteCore CreateExecuteCore()
+ => new ExecuteCore( new FileSystem() );
- protected GitVersionTaskBase()
+ private static string GetFileExtension( this String language )
{
- var fileSystem = new FileSystem();
- executeCore = new ExecuteCore(fileSystem);
- GitVersion.Logger.SetLoggers(this.LogDebug, this.LogInfo, this.LogWarning, s => this.LogError(s));
- }
+ switch ( language )
+ {
+ case "C#":
+ return "cs";
- protected ExecuteCore ExecuteCore
- {
- get { return executeCore; }
- }
+ case "F#":
+ return "fs";
- public void LogDebug(string message)
- {
- this.BuildEngine.LogMessageEvent(new BuildMessageEventArgs(message, string.Empty, "GitVersionTask", MessageImportance.Low));
- }
+ case "VB":
+ return "vb";
- public void LogWarning(string message)
- {
- this.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
+ )
{
- this.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
+ )
{
- this.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;
}
+
+ public String WorkingDirectory { get; }
+ public String FileName { get; }
+ public String FileExtension { get; }
}
-}
\ No newline at end of file
+}
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 125575022c..fd3fdafe12 100644
--- a/src/GitVersionTask/UpdateAssemblyInfo.cs
+++ b/src/GitVersionTask/UpdateAssemblyInfo.cs
@@ -5,105 +5,113 @@ namespace GitVersionTask
using GitVersion;
using GitVersion.Helpers;
- using Microsoft.Build.Framework;
- public class UpdateAssemblyInfo : GitVersionTaskBase
+ public static class UpdateAssemblyInfo
{
- public UpdateAssemblyInfo()
- {
- }
-
- [Required]
- public string SolutionDirectory { get; set; }
-
- [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
+ )
+ {
+ if ( !input.ValidateInput() )
+ {
+ throw new Exception( "Invalid input." );
+ }
- public bool NoFetch { get; set; }
+ var logger = new TaskLogger();
+ Logger.SetLoggers( logger.LogInfo, logger.LogInfo, logger.LogWarning, s => logger.LogError( s ) );
- public override bool Execute()
- {
+ Output output = null;
try
{
- InnerExecute();
- return true;
+ output = InnerExecute( input );
}
catch (WarningException errorException)
{
- this.LogWarning(errorException.Message);
- return true;
+ logger.LogWarning(errorException.Message);
+ output = new Output();
}
catch (Exception exception)
{
- this.LogError("Error occurred: " + exception);
- return false;
+ logger.LogError("Error occurred: " + exception);
+ throw;
}
+ finally
+ {
+ Logger.Reset();
+ }
+
+ return output;
}
- void InnerExecute()
+ private static Output InnerExecute( Input input )
{
+ var execute = GitVersionTaskBase.CreateExecuteCore();
+
TempFileTracker.DeleteTempFiles();
- InvalidFileChecker.CheckForInvalidFiles(CompileFiles, ProjectFile);
+ InvalidFileChecker.CheckForInvalidFiles(input.CompileFiles, input.ProjectFile);
- VersionVariables versionVariables;
- if (!ExecuteCore.TryGetVersion(SolutionDirectory, out versionVariables, NoFetch, new Authentication()))
+ if (!execute.TryGetVersion( input.SolutionDirectory, out var versionVariables, input.NoFetch, new Authentication()))
{
- return;
+ return null;
}
- CreateTempAssemblyInfo(versionVariables);
+ return CreateTempAssemblyInfo(input, versionVariables);
}
- void CreateTempAssemblyInfo(VersionVariables versionVariables)
+ private static Output CreateTempAssemblyInfo( Input input, VersionVariables versionVariables)
{
- var fileExtension = GetFileExtension();
- var assemblyInfoFileName = $"GitVersionTaskAssemblyInfo.g.{fileExtension}";
-
- if (IntermediateOutputPath == null)
+ 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()
{
- assemblyInfoFileName = $"AssemblyInfo_{Path.GetFileNameWithoutExtension(ProjectFile)}_{Path.GetRandomFileName()}.g.{fileExtension}";
- }
-
- var workingDirectory = IntermediateOutputPath ?? TempFileTracker.TempPath;
-
- AssemblyInfoTempFilePath = Path.Combine(workingDirectory, assemblyInfoFileName);
+ AssemblyInfoTempFilePath = Path.Combine( fileWriteInfo.WorkingDirectory, fileWriteInfo.FileName )
+ };
- 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;
}
- string GetFileExtension()
+ public sealed class Input
{
- switch(Language)
- {
- case "C#":
- return "cs";
+ public string SolutionDirectory { get; set; }
- case "F#":
- return "fs";
+ public string ProjectFile { get; set; }
- case "VB":
- return "vb";
+ public string IntermediateOutputPath { get; set; }
- default:
- throw new Exception($"Unknown language detected: '{Language}'");
- }
+ 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 b2412132a9..777dca7192 100644
--- a/src/GitVersionTask/WriteVersionInfoToBuildLog.cs
+++ b/src/GitVersionTask/WriteVersionInfoToBuildLog.cs
@@ -3,61 +3,91 @@ namespace GitVersionTask
using System;
using System.Collections.Generic;
using GitVersion;
- using Microsoft.Build.Framework;
- public class WriteVersionInfoToBuildLog : GitVersionTaskBase
+ public static class WriteVersionInfoToBuildLog
{
- public WriteVersionInfoToBuildLog()
+
+ public static Output Execute(
+ Input input
+ )
{
- }
+ if ( !input.ValidateInput() )
+ {
+ throw new Exception( "Invalid input." );
+ }
- [Required]
- public string SolutionDirectory { get; set; }
+ var logger = new TaskLogger();
+ Logger.SetLoggers( logger.LogInfo, logger.LogInfo, logger.LogWarning, s => logger.LogError( s ) );
- public bool NoFetch { get; set; }
- public override bool Execute()
- {
+ Output output = null;
try
{
- InnerExecute();
- return true;
+ output = InnerExecute(logger, input);
}
catch (WarningException errorException)
{
- this.LogWarning(errorException.Message);
- return true;
+ logger.LogWarning(errorException.Message);
+ output = new Output();
}
catch (Exception exception)
{
- this.LogError("Error occurred: " + exception);
- return false;
+ logger.LogError("Error occurred: " + exception);
+ throw;
}
+ finally
+ {
+ Logger.Reset();
+ }
+
+ return output;
}
- void InnerExecute()
+ private static Output InnerExecute(
+ TaskLogger logger,
+ Input input
+ )
{
- VersionVariables result;
- if (!ExecuteCore.TryGetVersion(SolutionDirectory, out result, NoFetch, new Authentication()))
+ var execute = GitVersionTaskBase.CreateExecuteCore();
+ if (!execute.TryGetVersion(input.SolutionDirectory, out var result, input.NoFetch, new Authentication()))
{
- return;
+ return null;
}
- WriteIntegrationParameters(BuildServerList.GetApplicableBuildServers(), result);
+ WriteIntegrationParameters(logger, BuildServerList.GetApplicableBuildServers(), result);
+
+ return new Output();
}
- void WriteIntegrationParameters(IEnumerable applicableBuildServers, VersionVariables variables)
+ private static void WriteIntegrationParameters(TaskLogger logger, IEnumerable applicableBuildServers, VersionVariables variables)
{
foreach (var buildServer in applicableBuildServers)
{
- this.LogInfo(string.Format("Executing GenerateSetVersionMessage for '{0}'.", buildServer.GetType().Name));
- this.LogInfo(buildServer.GenerateSetVersionMessage(variables));
- this.LogInfo(string.Format("Executing GenerateBuildLogOutput for '{0}'.", buildServer.GetType().Name));
+ 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))
{
- this.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
+ }
}
}