84 lines
2.6 KiB
C#
84 lines
2.6 KiB
C#
|
|
|
|
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using ln.build.semver;
|
|
using Microsoft.VisualBasic;
|
|
|
|
namespace ln.build.semver
|
|
{
|
|
|
|
public class SemVersion
|
|
{
|
|
public int Major { get; set; }
|
|
public int Minor { get; set; }
|
|
public int Patch { get; set; }
|
|
public string PreRelease { get; set; } = String.Empty;
|
|
|
|
public bool IsPreRelease => !PreRelease?.Equals(string.Empty) ?? false;
|
|
public bool IsRelease => PreRelease?.Equals(string.Empty) ?? true;
|
|
|
|
public SemVersion(int major,int minor,int patch,string prerelease)
|
|
{
|
|
Major = major;
|
|
Minor = minor;
|
|
Patch = patch;
|
|
PreRelease = prerelease;
|
|
}
|
|
private SemVersion(){}
|
|
public SemVersion(SemVersion source)
|
|
:this(source.Major, source.Minor, source.Patch, source.PreRelease)
|
|
{ }
|
|
|
|
|
|
public void Increment(SemVerLevels level){
|
|
switch (level)
|
|
{
|
|
case SemVerLevels.MAJOR:
|
|
Major++;
|
|
Minor = 0;
|
|
Patch = 0;
|
|
break;
|
|
case SemVerLevels.MINOR:
|
|
Minor++;
|
|
Patch = 0;
|
|
break;
|
|
case SemVerLevels.PATCH:
|
|
Patch++;
|
|
break;
|
|
}
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
stringBuilder.AppendFormat("{0}.{1}.{2}", Major, Minor, Patch);
|
|
if (!PreRelease?.Equals(string.Empty) ?? false)
|
|
stringBuilder.AppendFormat("-{0}", PreRelease);
|
|
return stringBuilder.ToString();
|
|
}
|
|
|
|
|
|
public static Regex rexVersion = new Regex("^(?<major>\\d+).(?<minor>\\d+).(?<patch>\\d+)(-(?<prerelease>.+))?$");
|
|
public static SemVersion Parse(string versionString)
|
|
{
|
|
Match match = rexVersion.Match(versionString);
|
|
if (!match.Success)
|
|
throw new FormatException(String.Format("{0} is no valid SemVer", versionString));
|
|
|
|
SemVersion version = new SemVersion();
|
|
version.Major = int.Parse(match.Groups["major"].Value);
|
|
version.Minor = int.Parse(match.Groups["minor"].Value);
|
|
version.Patch = int.Parse(match.Groups["patch"].Value);
|
|
if (match.Groups["prerelease"].Success)
|
|
version.PreRelease = match.Groups["prerelease"].Value;
|
|
|
|
return version;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
} |