diff --git a/GitVersionCore/BuildServers/BuildServerList.cs b/GitVersionCore/BuildServers/BuildServerList.cs index e2d86161ff..b39adbe40a 100644 --- a/GitVersionCore/BuildServers/BuildServerList.cs +++ b/GitVersionCore/BuildServers/BuildServerList.cs @@ -27,7 +27,8 @@ static IEnumerable DefaultSelector(Authentication authentication) { new ContinuaCi(authentication), new TeamCity(authentication), - new AppVeyor(authentication) + new AppVeyor(authentication), + new MyGet(authentication) }; } diff --git a/GitVersionCore/BuildServers/MyGet.cs b/GitVersionCore/BuildServers/MyGet.cs new file mode 100644 index 0000000000..9b45a9695a --- /dev/null +++ b/GitVersionCore/BuildServers/MyGet.cs @@ -0,0 +1,53 @@ +namespace GitVersion +{ + using System; + using System.Collections.Generic; + + public class MyGet : BuildServerBase + { + Authentication authentication; + + public MyGet(Authentication authentication) + { + this.authentication = authentication; + } + + public override bool CanApplyToCurrentContext() + { + var buildRunner = Environment.GetEnvironmentVariable("BuildRunner"); + + return !string.IsNullOrEmpty(buildRunner) + && buildRunner.Equals("MyGet", StringComparison.InvariantCultureIgnoreCase); + } + + public override void PerformPreProcessingSteps(string gitDirectory) + { + if (string.IsNullOrEmpty(gitDirectory)) + { + throw new WarningException("Failed to find .git directory on agent."); + } + + GitHelper.NormalizeGitDirectory(gitDirectory, authentication); + } + + public override string[] GenerateSetParameterMessage(string name, string value) + { + var messages = new List + { + string.Format("##myget[setParameter name='GitVersion.{0}' value='{1}']", name, ServiceMessageEscapeHelper.EscapeValue(value)) + }; + + if (string.Equals(name, "LegacySemVerPadded", StringComparison.InvariantCultureIgnoreCase)) + { + messages.Add(string.Format("##myget[buildNumber '{0}']", ServiceMessageEscapeHelper.EscapeValue(value))); + } + + return messages.ToArray(); + } + + public override string GenerateSetVersionMessage(string versionToUseForBuildNumber) + { + return null; + } + } +} diff --git a/GitVersionCore/BuildServers/TeamCity.cs b/GitVersionCore/BuildServers/TeamCity.cs index 957295615a..626cbd1043 100644 --- a/GitVersionCore/BuildServers/TeamCity.cs +++ b/GitVersionCore/BuildServers/TeamCity.cs @@ -30,32 +30,14 @@ public override string[] GenerateSetParameterMessage(string name, string value) { return new[] { - string.Format("##teamcity[setParameter name='GitVersion.{0}' value='{1}']", name, EscapeValue(value)), - string.Format("##teamcity[setParameter name='system.GitVersion.{0}' value='{1}']", name, EscapeValue(value)) + string.Format("##teamcity[setParameter name='GitVersion.{0}' value='{1}']", name, ServiceMessageEscapeHelper.EscapeValue(value)), + string.Format("##teamcity[setParameter name='system.GitVersion.{0}' value='{1}']", name, ServiceMessageEscapeHelper.EscapeValue(value)) }; } public override string GenerateSetVersionMessage(string versionToUseForBuildNumber) { - return string.Format("##teamcity[buildNumber '{0}']", EscapeValue(versionToUseForBuildNumber)); - } - - static string EscapeValue(string value) - { - if (value == null) - { - return null; - } - // List of escape values from http://confluence.jetbrains.com/display/TCD8/Build+Script+Interaction+with+TeamCity - - value = value.Replace("|", "||"); - value = value.Replace("'", "|'"); - value = value.Replace("[", "|["); - value = value.Replace("]", "|]"); - value = value.Replace("\r", "|r"); - value = value.Replace("\n", "|n"); - - return value; + return string.Format("##teamcity[buildNumber '{0}']", ServiceMessageEscapeHelper.EscapeValue(versionToUseForBuildNumber)); } } } diff --git a/GitVersionCore/GitVersionCore.csproj b/GitVersionCore/GitVersionCore.csproj index b0c7a48564..966ffc3d4d 100644 --- a/GitVersionCore/GitVersionCore.csproj +++ b/GitVersionCore/GitVersionCore.csproj @@ -62,6 +62,7 @@ + diff --git a/GitVersionCore/Helpers/DeleteHelper.cs b/GitVersionCore/Helpers/DeleteHelper.cs index 37888943d4..83ad19f277 100644 --- a/GitVersionCore/Helpers/DeleteHelper.cs +++ b/GitVersionCore/Helpers/DeleteHelper.cs @@ -2,6 +2,26 @@ { using System.IO; + public static class ServiceMessageEscapeHelper + { + public static string EscapeValue(string value) + { + if (value == null) + { + return null; + } + // List of escape values from http://confluence.jetbrains.com/display/TCD8/Build+Script+Interaction+with+TeamCity + + value = value.Replace("|", "||"); + value = value.Replace("'", "|'"); + value = value.Replace("[", "|["); + value = value.Replace("]", "|]"); + value = value.Replace("\r", "|r"); + value = value.Replace("\n", "|n"); + + return value; + } + } public static class DeleteHelper { public static void DeleteGitRepository(string directory) diff --git a/GitVersionTask.Tests/BuildServers/MyGetTests.cs b/GitVersionTask.Tests/BuildServers/MyGetTests.cs new file mode 100644 index 0000000000..e88d9b29a7 --- /dev/null +++ b/GitVersionTask.Tests/BuildServers/MyGetTests.cs @@ -0,0 +1,33 @@ +using GitVersion; +using NUnit.Framework; + +[TestFixture] +public class MyGetTests +{ + [Test] + public void Develop_branch() + { + var authentication = new Authentication(); + var versionBuilder = new MyGet(authentication); + var message = versionBuilder.GenerateSetVersionMessage("0.0.0-Unstable4"); + Assert.AreEqual(null, message); + } + + [Test] + public void EscapeValues() + { + var authentication = new Authentication(); + var versionBuilder = new MyGet(authentication); + var message = versionBuilder.GenerateSetParameterMessage("Foo", "0.8.0-unstable568 Branch:'develop' Sha:'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb'"); + Assert.AreEqual("##myget[setParameter name='GitVersion.Foo' value='0.8.0-unstable568 Branch:|'develop|' Sha:|'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb|'']", message[0]); + } + + [Test] + public void BuildNumber() + { + var authentication = new Authentication(); + var versionBuilder = new MyGet(authentication); + var message = versionBuilder.GenerateSetParameterMessage("LegacySemVerPadded", "0.8.0-unstable568"); + Assert.AreEqual("##myget[buildNumber '0.8.0-unstable568']", message[1]); + } +} \ No newline at end of file diff --git a/GitVersionTask.Tests/GitVersionTask.Tests.csproj b/GitVersionTask.Tests/GitVersionTask.Tests.csproj index 827779a5d3..8e29b8a7ca 100644 --- a/GitVersionTask.Tests/GitVersionTask.Tests.csproj +++ b/GitVersionTask.Tests/GitVersionTask.Tests.csproj @@ -89,6 +89,7 @@ +