mirror of
https://github.com/knah/VRCMelonAssistant.git
synced 2024-05-14 17:32:17 +12:00
Let SemVer handle four-digit version numbers
This commit is contained in:
parent
88c987d714
commit
a6321a9ecc
|
@ -46,6 +46,7 @@ namespace VRCMelonAssistant.Libs
|
||||||
new Regex(@"^(?<major>\d+)" +
|
new Regex(@"^(?<major>\d+)" +
|
||||||
@"(?>\.(?<minor>\d+))?" +
|
@"(?>\.(?<minor>\d+))?" +
|
||||||
@"(?>\.(?<patch>\d+))?" +
|
@"(?>\.(?<patch>\d+))?" +
|
||||||
|
@"(?>\.(?<extra>\d+))?" +
|
||||||
@"(?>\-(?<pre>[0-9A-Za-z\-\.]+))?" +
|
@"(?>\-(?<pre>[0-9A-Za-z\-\.]+))?" +
|
||||||
@"(?>\+(?<build>[0-9A-Za-z\-\.]+))?$",
|
@"(?>\+(?<build>[0-9A-Za-z\-\.]+))?$",
|
||||||
#if NETSTANDARD
|
#if NETSTANDARD
|
||||||
|
@ -82,11 +83,12 @@ namespace VRCMelonAssistant.Libs
|
||||||
/// <param name="patch">The patch version.</param>
|
/// <param name="patch">The patch version.</param>
|
||||||
/// <param name="prerelease">The prerelease version (e.g. "alpha").</param>
|
/// <param name="prerelease">The prerelease version (e.g. "alpha").</param>
|
||||||
/// <param name="build">The build metadata (e.g. "nightly.232").</param>
|
/// <param name="build">The build metadata (e.g. "nightly.232").</param>
|
||||||
public SemVersion(int major, int minor = 0, int patch = 0, string prerelease = "", string build = "")
|
public SemVersion(int major, int minor = 0, int patch = 0, int extra = 0, string prerelease = "", string build = "")
|
||||||
{
|
{
|
||||||
Major = major;
|
Major = major;
|
||||||
Minor = minor;
|
Minor = minor;
|
||||||
Patch = patch;
|
Patch = patch;
|
||||||
|
Extra = extra;
|
||||||
|
|
||||||
Prerelease = prerelease ?? "";
|
Prerelease = prerelease ?? "";
|
||||||
Build = build ?? "";
|
Build = build ?? "";
|
||||||
|
@ -151,10 +153,17 @@ namespace VRCMelonAssistant.Libs
|
||||||
else if (strict)
|
else if (strict)
|
||||||
throw new InvalidOperationException("Invalid version (no patch version given in strict mode)");
|
throw new InvalidOperationException("Invalid version (no patch version given in strict mode)");
|
||||||
|
|
||||||
|
var extraMatch = match.Groups["extra"];
|
||||||
|
int extra = 0;
|
||||||
|
if (extraMatch.Success)
|
||||||
|
extra = int.Parse(extraMatch.Value, CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
var prerelease = match.Groups["pre"].Value;
|
var prerelease = match.Groups["pre"].Value;
|
||||||
var build = match.Groups["build"].Value;
|
var build = match.Groups["build"].Value;
|
||||||
|
|
||||||
return new SemVersion(major, minor, patch, prerelease, build);
|
|
||||||
|
|
||||||
|
return new SemVersion(major, minor, patch, extra, prerelease, build);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -197,10 +206,18 @@ namespace VRCMelonAssistant.Libs
|
||||||
}
|
}
|
||||||
else if (strict) return false;
|
else if (strict) return false;
|
||||||
|
|
||||||
|
var extraMatch = match.Groups["extra"];
|
||||||
|
int extra = 0;
|
||||||
|
if (extraMatch.Success)
|
||||||
|
{
|
||||||
|
if (!int.TryParse(extraMatch.Value, NumberStyles.Integer, CultureInfo.InvariantCulture, out extra))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
var prerelease = match.Groups["pre"].Value;
|
var prerelease = match.Groups["pre"].Value;
|
||||||
var build = match.Groups["build"].Value;
|
var build = match.Groups["build"].Value;
|
||||||
|
|
||||||
semver = new SemVersion(major, minor, patch, prerelease, build);
|
semver = new SemVersion(major, minor, patch, extra, prerelease, build);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,13 +265,14 @@ namespace VRCMelonAssistant.Libs
|
||||||
/// To change only the patch version:
|
/// To change only the patch version:
|
||||||
/// <code>version.Change(patch: 4)</code>
|
/// <code>version.Change(patch: 4)</code>
|
||||||
/// </example>
|
/// </example>
|
||||||
public SemVersion Change(int? major = null, int? minor = null, int? patch = null,
|
public SemVersion Change(int? major = null, int? minor = null, int? patch = null, int? extra = null,
|
||||||
string prerelease = null, string build = null)
|
string prerelease = null, string build = null)
|
||||||
{
|
{
|
||||||
return new SemVersion(
|
return new SemVersion(
|
||||||
major ?? Major,
|
major ?? Major,
|
||||||
minor ?? Minor,
|
minor ?? Minor,
|
||||||
patch ?? Patch,
|
patch ?? Patch,
|
||||||
|
extra ?? Extra,
|
||||||
prerelease ?? Prerelease,
|
prerelease ?? Prerelease,
|
||||||
build ?? Build);
|
build ?? Build);
|
||||||
}
|
}
|
||||||
|
@ -283,6 +301,11 @@ namespace VRCMelonAssistant.Libs
|
||||||
/// </value>
|
/// </value>
|
||||||
public int Patch { get; }
|
public int Patch { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Handles the fourth number present in assembly versions
|
||||||
|
/// </summary>
|
||||||
|
public int Extra { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the prerelease version.
|
/// Gets the prerelease version.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -316,6 +339,12 @@ namespace VRCMelonAssistant.Libs
|
||||||
version.Append(Minor);
|
version.Append(Minor);
|
||||||
version.Append('.');
|
version.Append('.');
|
||||||
version.Append(Patch);
|
version.Append(Patch);
|
||||||
|
if (Extra != 0)
|
||||||
|
{
|
||||||
|
version.Append('.');
|
||||||
|
version.Append(Extra);
|
||||||
|
}
|
||||||
|
|
||||||
if (Prerelease.Length > 0)
|
if (Prerelease.Length > 0)
|
||||||
{
|
{
|
||||||
version.Append('-');
|
version.Append('-');
|
||||||
|
@ -409,6 +438,9 @@ namespace VRCMelonAssistant.Libs
|
||||||
r = Patch.CompareTo(other.Patch);
|
r = Patch.CompareTo(other.Patch);
|
||||||
if (r != 0) return r;
|
if (r != 0) return r;
|
||||||
|
|
||||||
|
r = Extra.CompareTo(other.Extra);
|
||||||
|
if (r != 0) return r;
|
||||||
|
|
||||||
return CompareComponent(Prerelease, other.Prerelease, true);
|
return CompareComponent(Prerelease, other.Prerelease, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue