diff --git a/src/Cli/AppRunner.cs b/src/Cli/AppRunner.cs
index a342b64..8ce0ff8 100644
--- a/src/Cli/AppRunner.cs
+++ b/src/Cli/AppRunner.cs
@@ -98,8 +98,8 @@ namespace Cli
.Title("[red]Error evaluating version from newest tag.[/]\nAdd new version tag **AND** push to origin?)")
.PageSize(10)
.AddChoices(
- new Selection("yes", new Version(0, 1, 0)),
- new Selection("yes", new Version(0, 1, 0, 1)),
+ new Selection("yes", new Version(0, 1, 0, true)),
+ new Selection("yes", new Version(0, 1, 0, 1, true)),
new Selection("no", null)
)
);
diff --git a/src/Cli/Cli.csproj b/src/Cli/Cli.csproj
index 7a8d774..2c9a5ac 100644
--- a/src/Cli/Cli.csproj
+++ b/src/Cli/Cli.csproj
@@ -9,7 +9,7 @@
Novaloop.UpdateTag
Updates the tag of a repo to the next chosen version according the semver symantic.
semver;update-tag;tag;git
- 0.3.1
+ 0.4.0
Matthias Langhard
Novaloop AG
https://gitlab.com/novaloop-oss/novaloop.update-tag
diff --git a/src/Core/Models/Version.cs b/src/Core/Models/Version.cs
index f7ee780..6a5030d 100644
--- a/src/Core/Models/Version.cs
+++ b/src/Core/Models/Version.cs
@@ -13,37 +13,41 @@ namespace Application.Models
///
public class Version
{
- public Version(int major, int minor, int patch)
+ public Version(int major, int minor, int patch, bool hasVPrefix)
{
Major = major;
Minor = minor;
Patch = patch;
+ _hasVPrefix = hasVPrefix;
}
- public Version(int major, int minor, int patch, int? rc)
+ public Version(int major, int minor, int patch, int? rc, bool hasVPrefix)
{
Major = major;
Minor = minor;
Patch = patch;
Rc = rc;
+ _hasVPrefix = hasVPrefix;
}
- public Version(int major, int minor, int patch, string rc, string service)
+ public Version(int major, int minor, int patch, string rc, string service, bool hasVPrefix)
{
Major = major;
Minor = minor;
Patch = patch;
Rc = rc == null ? null : ExtractNumberFromRcString(rc);
Service = service ?? "";
+ _hasVPrefix = hasVPrefix;
}
- public Version(int major, int minor, int patch, int? rc, string service)
+ public Version(int major, int minor, int patch, int? rc, string service, bool hasVPrefix)
{
Major = major;
Minor = minor;
Patch = patch;
Rc = rc;
Service = service ?? "";
+ _hasVPrefix = hasVPrefix;
}
private static int? ExtractNumberFromRcString(string rc)
@@ -58,12 +62,16 @@ namespace Application.Models
public int Patch { get; private set; }
public int? Rc { get; private set; }
public string Service { get; private set; }
-
+ private readonly bool _hasVPrefix;
public override string ToString()
{
var sb = new StringBuilder();
- sb.Append('v');
+ if (_hasVPrefix)
+ {
+ sb.Append('v');
+ }
+
sb.Append(Major);
sb.Append('.');
sb.Append(Minor);
@@ -88,7 +96,7 @@ namespace Application.Models
private Version Copy()
{
- return new Version(Major, Minor, Patch, Rc, Service);
+ return new Version(Major, Minor, Patch, Rc, Service, _hasVPrefix);
}
public Version NextMajor()
@@ -191,7 +199,7 @@ namespace Application.Models
throw new ArgumentException("Cannot release RC. Not an RC.");
}
- var nextVersion = new Version(Major, Minor, Patch, (string)null, Service);
+ var nextVersion = new Version(Major, Minor, Patch, (string)null, Service, _hasVPrefix);
return nextVersion;
}
diff --git a/src/Infrastructure/Services/GitRepoReadService.cs b/src/Infrastructure/Services/GitRepoReadService.cs
index 6f8b99b..1a7808f 100644
--- a/src/Infrastructure/Services/GitRepoReadService.cs
+++ b/src/Infrastructure/Services/GitRepoReadService.cs
@@ -1,3 +1,4 @@
+using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Application.Interfaces;
@@ -27,21 +28,23 @@ namespace Infrastructure.Services
{
if (TryParse(tag.FriendlyName, out var semver))
{
- yield return new Version(semver.Major, semver.Minor, semver.Patch, semver.Prerelease, semver.Build);
+ yield return semver;
}
}
}
- private static bool TryParse(string version, out SemVersion semverVersion)
+ private static bool TryParse(string versionStr, out Version version)
{
try
{
- semverVersion = SemVersion.Parse(version.TrimStart('v').TrimStart('V'));
+ var semver = SemVersion.Parse(versionStr.TrimStart('v').TrimStart('V'));
+ var hasVPrefix = versionStr.StartsWith("v", StringComparison.InvariantCultureIgnoreCase);
+ version = new Version(semver.Major, semver.Minor, semver.Patch, semver.Prerelease, semver.Build, hasVPrefix);
return true;
}
catch
{
- semverVersion = null;
+ version = null;
return false;
}
}
diff --git a/tests/update-tag.tests/GetVersionInformationFromRepoTests.cs b/tests/update-tag.tests/GetVersionInformationFromRepoTests.cs
index f153d02..b41c22e 100644
--- a/tests/update-tag.tests/GetVersionInformationFromRepoTests.cs
+++ b/tests/update-tag.tests/GetVersionInformationFromRepoTests.cs
@@ -16,12 +16,12 @@ namespace UpdateTag.Tests
// Arrange
var mockedVersionList = new List
{
- new Version(0, 1, 5),
- new Version(0, 1, 7),
- new Version(0, 2, 0),
- new Version(0, 2, 0, 0),
- new Version(0, 2, 0, 1),
- new Version(0, 2, 0, 2)
+ new Version(0, 1, 5, false),
+ new Version(0, 1, 7, false),
+ new Version(0, 2, 0, false),
+ new Version(0, 2, 0, 0, false),
+ new Version(0, 2, 0, 1, false),
+ new Version(0, 2, 0, 2, false)
};
var gitRepoMock = new Mock();
gitRepoMock.Setup(m => m.GetAllVersions(It.IsAny()))
@@ -33,7 +33,31 @@ namespace UpdateTag.Tests
var versionInformation = await handler.Handle(query, CancellationToken.None);
// Assert
- Assert.Equal("v0.2.0", versionInformation.CurrentVersion.ToString());
+ Assert.Equal("0.2.0", versionInformation.CurrentVersion.ToString());
+ }
+
+ [Theory]
+ [InlineData(0, 2, 0, true, "v0.2.0")]
+ [InlineData(0, 2, 0, false, "0.2.0")]
+ public async void AddVPrefixToNextVersionIfCurrentVersionHasOne(int major, int minor, int patch, bool hasVPrefix,
+ string expectedVersionOutput)
+ {
+ // Arrange
+ var mockedVersionList = new List
+ {
+ new Version(major, minor, patch, hasVPrefix)
+ };
+ var gitRepoMock = new Mock();
+ gitRepoMock.Setup(m => m.GetAllVersions(It.IsAny()))
+ .Returns(mockedVersionList);
+ var handler = new GetVersionInformationFromRepo(gitRepoMock.Object);
+ var query = new GetVersionInformationFromRepo.Query("");
+
+ // Act
+ var versionInformation = await handler.Handle(query, CancellationToken.None);
+
+ // Assert
+ Assert.Equal(expectedVersionOutput, versionInformation.CurrentVersion.ToString());
}
}
}
\ No newline at end of file
diff --git a/tests/update-tag.tests/VersionInformationTests.cs b/tests/update-tag.tests/VersionInformationTests.cs
index 4c546e5..e719b87 100644
--- a/tests/update-tag.tests/VersionInformationTests.cs
+++ b/tests/update-tag.tests/VersionInformationTests.cs
@@ -11,15 +11,15 @@ namespace UpdateTag.Tests
{
// Arrange
- var version = new Version(1, 0, 1, 1);
+ var version = new Version(1, 0, 1, 1, false);
// Act
var versionInformation = new VersionInformation(version);
var versions = versionInformation.NextVersions.Select(nv => nv.Version.ToString()).ToList();
// Assert
- Assert.Contains("v1.0.1-RC.2", versions); // next rc
- Assert.Contains("v1.0.1", versions); // release rc
+ Assert.Contains("1.0.1-RC.2", versions); // next rc
+ Assert.Contains("1.0.1", versions); // release rc
Assert.Equal(2, versions.Count);
}
@@ -28,7 +28,7 @@ namespace UpdateTag.Tests
{
// Arrange
- var version = new Version(1, 0, 1);
+ var version = new Version(1, 0, 1, false);
// Act
var versionInformation = new VersionInformation(version);
@@ -36,12 +36,12 @@ namespace UpdateTag.Tests
// Assert
- Assert.Contains("v1.0.2-RC.0", versions); // patch RC
- Assert.Contains("v1.1.0-RC.0", versions); // minor RC
- Assert.Contains("v2.0.0-RC.0", versions); // major RC
- Assert.Contains("v1.0.2", versions); // next patch
- Assert.Contains("v1.1.0", versions); // next minor
- Assert.Contains("v2.0.0", versions); // next major
+ Assert.Contains("1.0.2-RC.0", versions); // patch RC
+ Assert.Contains("1.1.0-RC.0", versions); // minor RC
+ Assert.Contains("2.0.0-RC.0", versions); // major RC
+ Assert.Contains("1.0.2", versions); // next patch
+ Assert.Contains("1.1.0", versions); // next minor
+ Assert.Contains("2.0.0", versions); // next major
Assert.Equal(6, versions.Count);
}
}
diff --git a/tests/update-tag.tests/VersionTests.cs b/tests/update-tag.tests/VersionTests.cs
index 8b72bb4..4902c1a 100644
--- a/tests/update-tag.tests/VersionTests.cs
+++ b/tests/update-tag.tests/VersionTests.cs
@@ -6,82 +6,82 @@ namespace UpdateTag.Tests
public class VersionTests
{
[Theory]
- [InlineData(1, 0, 0, "", "", "v2.0.0")]
- [InlineData(1, 1, 0, "", "", "v2.0.0")]
- [InlineData(1, 1, 1, "", "", "v2.0.0")]
+ [InlineData(1, 0, 0, "", "", "2.0.0")]
+ [InlineData(1, 1, 0, "", "", "2.0.0")]
+ [InlineData(1, 1, 1, "", "", "2.0.0")]
public void NextMajor(int major, int minor, int patch, string rc, string service, string expected)
{
- var version = new Version(major, minor, patch, rc, service).NextMajor();
+ var version = new Version(major, minor, patch, rc, service, false).NextMajor();
Assert.Equal(expected, version.ToString());
}
[Theory]
- [InlineData(1, 0, 0, "", "", "v1.1.0")]
- [InlineData(1, 1, 0, "", "", "v1.2.0")]
- [InlineData(1, 1, 1, "", "", "v1.2.0")]
+ [InlineData(1, 0, 0, "", "", "1.1.0")]
+ [InlineData(1, 1, 0, "", "", "1.2.0")]
+ [InlineData(1, 1, 1, "", "", "1.2.0")]
public void NextMinor(int major, int minor, int patch, string rc, string service, string expected)
{
- var version = new Version(major, minor, patch, rc, service).NextMinor();
+ var version = new Version(major, minor, patch, rc, service, false).NextMinor();
Assert.Equal(expected, version.ToString());
}
[Theory]
- [InlineData(1, 0, 0, "", "", "v1.0.1")]
- [InlineData(1, 1, 0, "", "", "v1.1.1")]
- [InlineData(1, 1, 1, "", "", "v1.1.2")]
+ [InlineData(1, 0, 0, "", "", "1.0.1")]
+ [InlineData(1, 1, 0, "", "", "1.1.1")]
+ [InlineData(1, 1, 1, "", "", "1.1.2")]
public void NextPatch(int major, int minor, int patch, string rc, string service, string expected)
{
- var version = new Version(major, minor, patch, rc, service).NextPatch();
+ var version = new Version(major, minor, patch, rc, service, false).NextPatch();
Assert.Equal(expected, version.ToString());
}
[Theory]
- [InlineData(1, 1, 1, "RC.4", "", "v1.1.1-RC.5")]
- [InlineData(1, 1, 1, "RC.4", "ErpNext", "v1.1.1-RC.5+ErpNext")]
+ [InlineData(1, 1, 1, "RC.4", "", "1.1.1-RC.5")]
+ [InlineData(1, 1, 1, "RC.4", "ErpNext", "1.1.1-RC.5+ErpNext")]
public void NextRc(int major, int minor, int patch, string rc, string service, string expected)
{
- var version = new Version(major, minor, patch, rc, service).NextRc();
+ var version = new Version(major, minor, patch, rc, service, false).NextRc();
Assert.Equal(expected, version.ToString());
}
[Theory]
- [InlineData(1, 1, 1, null, "", "v1.1.2-RC.0")]
- [InlineData(1, 1, 1, null, "ErpNext", "v1.1.2-RC.0+ErpNext")]
+ [InlineData(1, 1, 1, null, "", "1.1.2-RC.0")]
+ [InlineData(1, 1, 1, null, "ErpNext", "1.1.2-RC.0+ErpNext")]
public void CreatePatchRc(int major, int minor, int patch, string rc, string service, string expected)
{
- var version = new Version(major, minor, patch, rc, service).CreatePatchRc();
+ var version = new Version(major, minor, patch, rc, service, false).CreatePatchRc();
Assert.Equal(expected, version.ToString());
}
[Theory]
- [InlineData(1, 1, 1, null, "", "v1.2.0-RC.0")]
- [InlineData(1, 1, 1, null, "ErpNext", "v1.2.0-RC.0+ErpNext")]
+ [InlineData(1, 1, 1, null, "", "1.2.0-RC.0")]
+ [InlineData(1, 1, 1, null, "ErpNext", "1.2.0-RC.0+ErpNext")]
public void CreateMinorRc(int major, int minor, int patch, string rc, string service, string expected)
{
- var version = new Version(major, minor, patch, rc, service).CreateMinorRc();
+ var version = new Version(major, minor, patch, rc, service, false).CreateMinorRc();
Assert.Equal(expected, version.ToString());
}
[Theory]
- [InlineData(1, 1, 1, null, "", "v2.0.0-RC.0")]
- [InlineData(1, 1, 1, null, "ErpNext", "v2.0.0-RC.0+ErpNext")]
+ [InlineData(1, 1, 1, null, "", "2.0.0-RC.0")]
+ [InlineData(1, 1, 1, null, "ErpNext", "2.0.0-RC.0+ErpNext")]
public void CreateMajroRc(int major, int minor, int patch, string rc, string service, string expected)
{
- var version = new Version(major, minor, patch, rc, service).CreateMajorRc();
+ var version = new Version(major, minor, patch, rc, service, false).CreateMajorRc();
Assert.Equal(expected, version.ToString());
}
[Theory]
- [InlineData(1, 1, 1, "RC.4", "", "v1.1.1")]
- [InlineData(1, 1, 1, "RC.4", "ErpNext", "v1.1.1+ErpNext")]
+ [InlineData(1, 1, 1, "RC.4", "", "1.1.1")]
+ [InlineData(1, 1, 1, "RC.4", "ErpNext", "1.1.1+ErpNext")]
public void ReleaseRc(int major, int minor, int patch, string rc, string service, string expected)
{
- var version = new Version(major, minor, patch, rc, service).ReleaseRc();
+ var version = new Version(major, minor, patch, rc, service, false).ReleaseRc();
Assert.Equal(expected, version.ToString());
}
}