diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/DotNetOpenAuth.BuildTasks/GetBuildVersion.cs | 48 | ||||
-rw-r--r-- | src/version.txt | 2 |
2 files changed, 47 insertions, 3 deletions
diff --git a/src/DotNetOpenAuth.BuildTasks/GetBuildVersion.cs b/src/DotNetOpenAuth.BuildTasks/GetBuildVersion.cs index 50bc89f..6df372f 100644 --- a/src/DotNetOpenAuth.BuildTasks/GetBuildVersion.cs +++ b/src/DotNetOpenAuth.BuildTasks/GetBuildVersion.cs @@ -29,6 +29,21 @@ namespace DotNetOpenAuth.BuildTasks { public string SimpleVersion { get; private set; } /// <summary> + /// Gets or sets the prerelease version, or empty if this is a final release. + /// </summary> + /// <value> + /// The prerelease version. + /// </value> + [Output] + public string PrereleaseVersion { get; set; } + + /// <summary> + /// Gets or sets the version string to use for NuGet packages containing OAuth 2 components. + /// </summary> + [Output] + public string OAuth2PackagesVersion { get; set; } + + /// <summary> /// Gets the Git revision control commit id for HEAD (the current source code version). /// </summary> [Output] @@ -53,7 +68,11 @@ namespace DotNetOpenAuth.BuildTasks { public override bool Execute() { try { - Version typedVersion = ReadVersionFromFile(); + Version typedVersion; + string prerelease, oauth2PackagesVersion; + this.ReadVersionFromFile(out typedVersion, out prerelease, out oauth2PackagesVersion); + this.PrereleaseVersion = prerelease; + this.OAuth2PackagesVersion = oauth2PackagesVersion; this.SimpleVersion = typedVersion.ToString(); this.BuildNumber = this.CalculateJDate(DateTime.Now); @@ -127,10 +146,21 @@ namespace DotNetOpenAuth.BuildTasks { return commitId.Trim(); } - private Version ReadVersionFromFile() { + private void ReadVersionFromFile(out Version typedVersion, out string prereleaseVersion, out string oauth2PackagesVersion) { string[] lines = File.ReadAllLines(VersionFile); string versionLine = lines[0]; - return new Version(versionLine); + prereleaseVersion = lines.Length >= 2 ? lines[1] : null; + oauth2PackagesVersion = lines.Length >= 3 ? lines[2] : null; + if (!String.IsNullOrEmpty(prereleaseVersion)) { + if (!prereleaseVersion.StartsWith("-")) { + // SemVer requires that prerelease suffixes begin with a hyphen, so add one if it's missing. + prereleaseVersion = "-" + prereleaseVersion; + } + + this.VerifyValidPrereleaseVersion(prereleaseVersion); + } + + typedVersion = new Version(versionLine); } private int CalculateJDate(DateTime date) { @@ -140,5 +170,17 @@ namespace DotNetOpenAuth.BuildTasks { int jdate = yearLastDigit * 1000 + dayOfYear; return jdate; } + + private void VerifyValidPrereleaseVersion(string prerelease) { + if (prerelease[0] != '-') { + throw new ArgumentOutOfRangeException("The prerelease string must begin with a hyphen."); + } + + for (int i = 1; i < prerelease.Length; i++) { + if (!char.IsLetterOrDigit(prerelease[i])) { + throw new ArgumentOutOfRangeException("The prerelease string must be alphanumeric."); + } + } + } } } diff --git a/src/version.txt b/src/version.txt index fcdb2e1..e25332a 100644 --- a/src/version.txt +++ b/src/version.txt @@ -1 +1,3 @@ 4.0.0 +beta2 +0.23.0-draft |