@@ -28,6 +28,21 @@ public GetBuildVersion() {
2828 [ Output ]
2929 public string SimpleVersion { get ; private set ; }
3030
31+ /// <summary>
32+ /// Gets or sets the prerelease version, or empty if this is a final release.
33+ /// </summary>
34+ /// <value>
35+ /// The prerelease version.
36+ /// </value>
37+ [ Output ]
38+ public string PrereleaseVersion { get ; set ; }
39+
40+ /// <summary>
41+ /// Gets or sets the version string to use for NuGet packages containing OAuth 2 components.
42+ /// </summary>
43+ [ Output ]
44+ public string OAuth2PackagesVersion { get ; set ; }
45+
3146 /// <summary>
3247 /// Gets the Git revision control commit id for HEAD (the current source code version).
3348 /// </summary>
@@ -53,7 +68,11 @@ public GetBuildVersion() {
5368
5469 public override bool Execute ( ) {
5570 try {
56- Version typedVersion = ReadVersionFromFile ( ) ;
71+ Version typedVersion ;
72+ string prerelease , oauth2PackagesVersion ;
73+ this . ReadVersionFromFile ( out typedVersion , out prerelease , out oauth2PackagesVersion ) ;
74+ this . PrereleaseVersion = prerelease ;
75+ this . OAuth2PackagesVersion = oauth2PackagesVersion ;
5776 this . SimpleVersion = typedVersion . ToString ( ) ;
5877 this . BuildNumber = this . CalculateJDate ( DateTime . Now ) ;
5978
@@ -127,10 +146,21 @@ private string GetGitHeadCommitId() {
127146 return commitId . Trim ( ) ;
128147 }
129148
130- private Version ReadVersionFromFile ( ) {
149+ private void ReadVersionFromFile ( out Version typedVersion , out string prereleaseVersion , out string oauth2PackagesVersion ) {
131150 string [ ] lines = File . ReadAllLines ( VersionFile ) ;
132151 string versionLine = lines [ 0 ] ;
133- return new Version ( versionLine ) ;
152+ prereleaseVersion = lines . Length >= 2 ? lines [ 1 ] : null ;
153+ oauth2PackagesVersion = lines . Length >= 3 ? lines [ 2 ] : null ;
154+ if ( ! String . IsNullOrEmpty ( prereleaseVersion ) ) {
155+ if ( ! prereleaseVersion . StartsWith ( "-" ) ) {
156+ // SemVer requires that prerelease suffixes begin with a hyphen, so add one if it's missing.
157+ prereleaseVersion = "-" + prereleaseVersion ;
158+ }
159+
160+ this . VerifyValidPrereleaseVersion ( prereleaseVersion ) ;
161+ }
162+
163+ typedVersion = new Version ( versionLine ) ;
134164 }
135165
136166 private int CalculateJDate ( DateTime date ) {
@@ -140,5 +170,17 @@ private int CalculateJDate(DateTime date) {
140170 int jdate = yearLastDigit * 1000 + dayOfYear ;
141171 return jdate ;
142172 }
173+
174+ private void VerifyValidPrereleaseVersion ( string prerelease ) {
175+ if ( prerelease [ 0 ] != '-' ) {
176+ throw new ArgumentOutOfRangeException ( "The prerelease string must begin with a hyphen." ) ;
177+ }
178+
179+ for ( int i = 1 ; i < prerelease . Length ; i ++ ) {
180+ if ( ! char . IsLetterOrDigit ( prerelease [ i ] ) ) {
181+ throw new ArgumentOutOfRangeException ( "The prerelease string must be alphanumeric." ) ;
182+ }
183+ }
184+ }
143185 }
144186}
0 commit comments