/// <summary> /// Gets the string version in the given format. /// Returns the <see cref="SVersion.ErrorMessage"/> if it is not null. /// </summary> /// <param name="f">Format to use.</param> /// <param name="buildInfo">Not null to generate a post-release version.</param> /// <returns>Formated string (or <see cref="SVersion.ErrorMessage"/> if any).</returns> public string ToString(CSVersionFormat f, CIBuildDescriptor?buildInfo = null) { if (ErrorMessage != null) { return(ErrorMessage); } Debug.Assert(NormalizedText != null); // Fast path and cache for format with no build info. if (buildInfo == null) { if (f == CSVersionFormat.Normalized) { if (IsLongForm) { if (_cacheOtherForm == null) { _cacheOtherForm = ComputeShortFormVersion(Major, Minor, Patch, PrereleaseNameIdx, PrereleaseNumber, PrereleasePatch, BuildMetaData, null); } return(_cacheOtherForm); } return(NormalizedText); } if (f == CSVersionFormat.LongForm) { if (IsLongForm) { return(NormalizedText); } if (_cacheOtherForm == null) { _cacheOtherForm = ComputeLongFormVersion(Major, Minor, Patch, PrereleaseNameIdx, PrereleaseNumber, PrereleasePatch, BuildMetaData, null); } return(_cacheOtherForm); } } if (f == CSVersionFormat.FileVersion) { return(ToStringFileVersion(buildInfo != null)); } if (f == CSVersionFormat.LongForm) { return(ComputeLongFormVersion(Major, Minor, Patch, PrereleaseNameIdx, PrereleaseNumber, PrereleasePatch, BuildMetaData, buildInfo)); } else { Debug.Assert(f == CSVersionFormat.Normalized); Debug.Assert(SVersion.Parse(ComputeShortFormVersion(Major, Minor, Patch, PrereleaseNameIdx, PrereleaseNumber, PrereleasePatch, BuildMetaData, buildInfo)).PackageQuality == PackageQuality.CI); return(ComputeShortFormVersion(Major, Minor, Patch, PrereleaseNameIdx, PrereleaseNumber, PrereleasePatch, BuildMetaData, buildInfo)); } }
/// <summary> /// Gets the string version in the given format. /// Returns the <see cref="SVersion.ErrorMessage"/> if it is not null. /// </summary> /// <param name="f">Format to use.</param> /// <param name="buildInfo">Not null to generate a post-release version. This is not compatible with <see cref="CSVersionFormat.Normalized"/> format.</param> /// <returns>Formated string (or <see cref="SVersion.ErrorMessage"/> if any).</returns> public string ToString(CSVersionFormat f, CIBuildDescriptor buildInfo = null) { if (ErrorMessage != null) { return(ErrorMessage); } if (buildInfo != null && !buildInfo.IsValid) { throw new ArgumentException("buildInfo, when not null, must be valid."); } // Fast path and cache for NuGetPackage format with no build info. if (buildInfo == null && f == CSVersionFormat.ShortForm) { if (_cacheShortForm == null) { _cacheShortForm = ComputeShortFormVersion(Major, Minor, Patch, PrereleaseNameIdx, PrereleaseNumber, PrereleasePatch, String.Empty, null); } return(_cacheShortForm); } if (f == CSVersionFormat.FileVersion) { return(ToStringFileVersion(buildInfo != null)); } if (f == CSVersionFormat.ShortForm || f == CSVersionFormat.ShortFormWithBuildMetaData) { string suffix = f == CSVersionFormat.ShortFormWithBuildMetaData && BuildMetaData.Length > 0 ? "+" + BuildMetaData : String.Empty; return(ComputeShortFormVersion(Major, Minor, Patch, PrereleaseNameIdx, PrereleaseNumber, PrereleasePatch, suffix, buildInfo)); } else { Debug.Assert(f == CSVersionFormat.Normalized || f == CSVersionFormat.NormalizedWithBuildMetaData); string suffix = f == CSVersionFormat.NormalizedWithBuildMetaData && BuildMetaData.Length > 0 ? "+" + BuildMetaData : String.Empty; return(ComputeLongFormVersion(Major, Minor, Patch, PrereleaseName, PrereleaseNumber, PrereleasePatch, suffix, buildInfo)); } }