diff --git a/src/GitVersionTask.Tests/GetVersionTaskTests.cs b/src/GitVersionTask.Tests/GetVersionTaskTests.cs
index a3f6d5c7d1..22fbaf54e5 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,9 +10,8 @@ public class GetVersionTaskTests : TestBase
[Test]
public void OutputsShouldMatchVariableProvider()
{
- var taskProperties = typeof(GetVersion)
+ var taskProperties = typeof(GetVersion.Output)
.GetProperties()
- .Where(p => p.GetCustomAttributes(typeof(OutputAttribute), false).Any())
.Select(p => p.Name);
var variablesProperties = VersionVariables.AvailableVariables;
diff --git a/src/GitVersionTask.Tests/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..c25568137a 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]
@@ -41,7 +39,7 @@ public void VerifyIgnoreNonAssemblyInfoFile()
");
}
- InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "SomeOtherFile.cs" } }, projectFile);
+ InvalidFileChecker.CheckForInvalidFiles(new[] { "SomeOtherFile.cs" }, projectFile);
}
[Test]
@@ -57,7 +55,7 @@ public void VerifyAttributeFoundCSharp([Values("AssemblyVersion", "AssemblyFileV
", attribute);
}
- var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.cs" } }, projectFile), attribute);
+ var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new [] { "AssemblyInfo.cs" }, projectFile), attribute);
Assert.That(ex.Message, Is.EqualTo("File contains assembly version attributes which conflict with the attributes generated by GitVersion AssemblyInfo.cs"));
}
@@ -75,7 +73,7 @@ public void VerifyUnformattedAttributeFoundCSharp([Values("AssemblyVersion", "As
", attribute);
}
- var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.cs" } }, projectFile), attribute);
+ var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new [] { "AssemblyInfo.cs" }, projectFile), attribute);
Assert.That(ex.Message, Is.EqualTo("File contains assembly version attributes which conflict with the attributes generated by GitVersion AssemblyInfo.cs"));
}
@@ -92,7 +90,7 @@ public void VerifyCommentWorksCSharp([Values("AssemblyVersion", "AssemblyFileVer
", attribute);
}
- InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.cs" } }, projectFile);
+ InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.cs" }, projectFile);
}
[Test]
@@ -111,7 +109,7 @@ public class Temp
", attribute);
}
- InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.cs" } }, projectFile);
+ InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.cs" }, projectFile);
}
[Test]
@@ -129,7 +127,7 @@ public class {0}
", attribute);
}
- InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.cs" } }, projectFile);
+ InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.cs" }, projectFile);
}
[Test]
@@ -145,7 +143,7 @@ Imports System.Reflection
", attribute);
}
- var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.vb" } }, projectFile), attribute);
+ var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.vb" }, projectFile), attribute);
Assert.That(ex.Message, Is.EqualTo("File contains assembly version attributes which conflict with the attributes generated by GitVersion AssemblyInfo.vb"));
}
@@ -163,7 +161,7 @@ Imports System.Reflection
", attribute);
}
- var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.vb" } }, projectFile), attribute);
+ var ex = Assert.Throws(() => InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.vb" }, projectFile), attribute);
Assert.That(ex.Message, Is.EqualTo("File contains assembly version attributes which conflict with the attributes generated by GitVersion AssemblyInfo.vb"));
}
@@ -180,7 +178,7 @@ Imports System.Reflection
", attribute);
}
- InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.vb" } }, projectFile);
+ InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.vb" }, projectFile);
}
[Test]
@@ -198,7 +196,7 @@ End Class
", attribute);
}
- InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.vb" } }, projectFile);
+ InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.vb" }, projectFile);
}
[Test]
@@ -215,6 +213,6 @@ End Class
", attribute);
}
- InvalidFileChecker.CheckForInvalidFiles(new ITaskItem[] { new MockTaskItem { ItemSpec = "AssemblyInfo.vb" } }, projectFile);
+ InvalidFileChecker.CheckForInvalidFiles(new[] { "AssemblyInfo.vb" }, projectFile);
}
}
diff --git a/src/GitVersionTask.Tests/Mocks/MockBuildEngine.cs b/src/GitVersionTask.Tests/Mocks/MockBuildEngine.cs
deleted file mode 100644
index 710462eff5..0000000000
--- a/src/GitVersionTask.Tests/Mocks/MockBuildEngine.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using System;
-using System.Collections;
-using Microsoft.Build.Framework;
-
-class MockBuildEngine : IBuildEngine
-{
- public void LogErrorEvent(BuildErrorEventArgs e)
- { }
-
- public void LogWarningEvent(BuildWarningEventArgs e)
- { }
-
- public void LogMessageEvent(BuildMessageEventArgs e)
- { }
-
- public void LogCustomEvent(CustomBuildEventArgs e)
- {
- throw new NotImplementedException();
- }
-
- public bool BuildProjectFile(string projectFileName, string[] targetNames, IDictionary globalProperties, IDictionary targetOutputs)
- {
- throw new NotImplementedException();
- }
-
- public bool ContinueOnError
- {
- get { throw new NotImplementedException(); }
- }
-
- public int LineNumberOfTaskNode
- {
- get { throw new NotImplementedException(); }
- }
-
- public int ColumnNumberOfTaskNode
- {
- get { throw new NotImplementedException(); }
- }
-
- public string ProjectFileOfTaskNode
- {
- get { throw new NotImplementedException(); }
- }
-}
\ No newline at end of file
diff --git a/src/GitVersionTask.Tests/Mocks/MockTaskItem.cs b/src/GitVersionTask.Tests/Mocks/MockTaskItem.cs
deleted file mode 100644
index 45a98850b9..0000000000
--- a/src/GitVersionTask.Tests/Mocks/MockTaskItem.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-using System.Collections;
-using Microsoft.Build.Framework;
-
-namespace GitVersionTask.Tests.Mocks
-{
- class MockTaskItem : ITaskItem
- {
- public string ItemSpec { get; set; }
-
- public int MetadataCount { get; private set; }
-
- public ICollection MetadataNames { get; private set; }
-
- public IDictionary CloneCustomMetadata()
- {
- throw new NotImplementedException();
- }
-
- public void CopyMetadataTo(ITaskItem destinationItem)
- {
- throw new NotImplementedException();
- }
-
- public string GetMetadata(string metadataName)
- {
- throw new NotImplementedException();
- }
-
- public void RemoveMetadata(string metadataName)
- {
- throw new NotImplementedException();
- }
-
- public void SetMetadata(string metadataName, string metadataValue)
- {
- throw new NotImplementedException();
- }
- }
-}
\ No newline at end of file
diff --git a/src/GitVersionTask/GenerateGitVersionInformation.cs b/src/GitVersionTask/GenerateGitVersionInformation.cs
index 6cb61e7034..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..a556649cba 100644
--- a/src/GitVersionTask/GitVersionTask.csproj
+++ b/src/GitVersionTask/GitVersionTask.csproj
@@ -1,7 +1,7 @@
-
+
net461;netstandard2.0
@@ -17,16 +17,17 @@
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
-
+
-
+
build\
@@ -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..cd68978b34 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 = 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/UtilPack.Version.props b/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props
similarity index 57%
rename from src/GitVersionTask/UtilPack.Version.props
rename to src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props
index 109fbf9d1e..a00890c752 100644
--- a/src/GitVersionTask/UtilPack.Version.props
+++ b/src/GitVersionTask/NuGetUtils.MSBuild.Exec.Version.props
@@ -1,6 +1,6 @@
- 2.9.1
+ 2.0.5
diff --git a/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec b/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec
index b3436fdce8..4a95b6e0d8 100644
--- a/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec
+++ b/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec
@@ -1,4 +1,4 @@
-
+
GitVersionTask
@@ -17,15 +17,15 @@
Git Versioning GitVersion GitFlowVersion GitFlow GitHubFlow SemVer
-
+
-
+
-
+
@@ -33,6 +33,6 @@
-
+
diff --git a/src/GitVersionTask/NugetAssets/build/Infrastructure.props b/src/GitVersionTask/NugetAssets/build/Infrastructure.props
index e5ff8092e1..4ef57bf76a 100644
--- a/src/GitVersionTask/NugetAssets/build/Infrastructure.props
+++ b/src/GitVersionTask/NugetAssets/build/Infrastructure.props
@@ -1,5 +1,5 @@
-
-
+
+
@@ -9,22 +9,21 @@
$(GitVersionTaskBuildTools_FunctionalityDir)obj/
-
- $(PackageVersion_UtilPackNuGetMSBuild)
- $(MSBuildThisFileDirectory)../../../utilpack.nuget.msbuild/$(UtilPackVersion)/build/UtilPack.NuGet.MSBuild.props
+
+ $(PackageVersion_NuGetUtilsMSBuildExec)
+ $(MSBuildThisFileDirectory)../../../nugetutils.msbuild.exec/$(UtilPackVersion)/build/NuGetUtils.MSBuild.Exec.props
$([System.IO.Path]::GetFullPath('$(UtilPackNuGetMSBuildPropsPath)'))
- true
+ true
- .NETFramework
- 4.6.1
+ net461
$(UtilPackTaskFactoryParametersXML)
@@ -35,7 +34,7 @@
-
+
diff --git a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props
index 36b320e5a5..5e868860fb 100644
--- a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props
+++ b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props
@@ -1,4 +1,4 @@
-
+
$(MSBuildProjectDirectory)\..\
@@ -40,43 +40,55 @@
- $(UtilPackTaskFactoryParametersXML)
+
+ $(UtilPackTaskFactoryParametersXML)
+ Execute
+
- $(UtilPackTaskFactoryParametersXML)
+
+ $(UtilPackTaskFactoryParametersXML)
+ Execute
+
- $(UtilPackTaskFactoryParametersXML)
+
+ $(UtilPackTaskFactoryParametersXML)
+ Execute
+
- $(UtilPackTaskFactoryParametersXML)
+
+ $(UtilPackTaskFactoryParametersXML)
+ Execute
+
True
-
\ No newline at end of file
+
diff --git a/src/GitVersionTask/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..87744a9c01 100644
--- a/src/GitVersionTask/UpdateAssemblyInfo.cs
+++ b/src/GitVersionTask/UpdateAssemblyInfo.cs
@@ -1,58 +1,116 @@
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}";
- }
+ AssemblyInfoTempFilePath = Path.Combine( fileWriteInfo.WorkingDirectory, fileWriteInfo.FileName )
+ };
- var workingDirectory = IntermediateOutputPath ?? TempFileTracker.TempPath;
-
- 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/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
+ }
}
}