/// <summary> /// Full constructor. Used by <see cref="TryParse(string, bool)"/> and methods like <see cref="GetDirectSuccessors(bool, ReleaseTagVersion)"/>. /// </summary> /// <param name="tag">Original text version. Can be null: the <see cref="ReleaseTagFormat.Normalized"/> is automatically used to compute <see cref="OriginalTagText"/>.</param> /// <param name="major">Major (between 0 and 99999).</param> /// <param name="minor">Minor (between 0 and 99999).</param> /// <param name="patch">Patch (between 0 and 9999).</param> /// <param name="preReleaseName">Not null (empty for release). Can be any string [a-z]*.</param> /// <param name="preReleaseNameIdx">The index in StandardPreReleaseNames.</param> /// <param name="preReleaseNumber">Number between 0 (for release or first prerelease) and 99.</param> /// <param name="preReleaseFix">Number between 0 (not a fix, first actual fix starts at 1) and 99.</param> /// <param name="kind">One of the <see cref="ReleaseTagKind"/> value. Must be coherent with the other parameters.</param> ReleaseTagVersion(string tag, int major, int minor, int patch, string preReleaseName, int preReleaseNameIdx, int preReleaseNumber, int preReleaseFix, ReleaseTagKind kind) { Debug.Assert(_standardNames.Length == MaxPreReleaseNameIdx + 1); Debug.Assert(major >= 0 && major <= MaxMajor); Debug.Assert(minor >= 0 && minor <= MaxMinor); Debug.Assert(patch >= 0 && patch <= MaxPatch); Debug.Assert(preReleaseName != null); Debug.Assert(Regex.IsMatch(preReleaseName, "[a-z]*", RegexOptions.CultureInvariant)); Debug.Assert(preReleaseNameIdx >= -1); Debug.Assert((preReleaseName.Length == 0 && preReleaseNameIdx == -1) || (preReleaseName.Length > 0 && preReleaseNameIdx >= 0 && preReleaseNameIdx <= MaxPreReleaseNameIdx)); Debug.Assert(preReleaseNumber >= 0 && preReleaseNumber <= MaxPreReleaseNumber); Debug.Assert(PreReleasePatch >= 0 && PreReleasePatch <= MaxPreReleaseNumber); Debug.Assert(kind != ReleaseTagKind.Malformed); Major = major; Minor = minor; Patch = patch; PreReleaseNameFromTag = preReleaseName; PreReleaseNameIdx = preReleaseNameIdx; PreReleaseNumber = preReleaseNumber; PreReleasePatch = preReleaseFix; Kind = kind; Marker = kind.ToStringMarker(); OriginalTagText = tag ?? ToString(); // Debug.Assert(((Kind & ReleaseTagKind.PreRelease) != 0) == IsPreRelease); _orderedVersion = new SOrderedVersion() { Number = ComputeOrderedVersion(major, minor, patch, preReleaseNameIdx, preReleaseNumber, preReleaseFix) }; DefinitionStrength = ComputeDefinitionStrength(); }
/// <summary> /// Gets this version in a <see cref="CSVersionFormat.FileVersion"/> format. /// </summary> /// <param name="isCIBuild">True to indicate a CI build: the revision part (last part) is odd.</param> /// <returns>The Major.Minor.Build.Revision number where each part are between 0 and 65535.</returns> public string ToStringFileVersion(bool isCIBuild) { SOrderedVersion v = _orderedVersion; v.Number <<= 1; if (isCIBuild) { v.Revision |= 1; } return(string.Format(CultureInfo.InvariantCulture, "{0}.{1}.{2}.{3}", v.Major, v.Minor, v.Build, v.Revision)); }
CSVersion(string parsedText, int major, int minor, int patch, string prerelease, string buildMetaData, int preReleaseNameIdx, int preReleaseNumber, int preReleasePatch) : base(parsedText, major, minor, patch, prerelease, buildMetaData, null) { PrereleaseNameIdx = preReleaseNameIdx; PrereleaseNumber = preReleaseNumber; PrereleasePatch = preReleasePatch; _orderedVersion = new SOrderedVersion() { Number = ComputeOrderedVersion(major, minor, patch, preReleaseNameIdx, preReleaseNumber, preReleasePatch) }; InlineAssertInvariants(this); }
CSVersion(int major, int minor, int patch, string buildMetaData, int preReleaseNameIdx, int preReleaseNumber, int preReleasePatch, long number = 0) : base(null, major, minor, patch, ComputeStandardPreRelease(preReleaseNameIdx, preReleaseNumber, preReleasePatch), buildMetaData, null) { PrereleaseNameIdx = preReleaseNameIdx; PrereleaseNumber = preReleaseNumber; PrereleasePatch = preReleasePatch; _orderedVersion = new SOrderedVersion() { Number = number != 0 ? number : ComputeOrderedVersion(major, minor, patch, preReleaseNameIdx, preReleaseNumber, preReleasePatch) }; InlineAssertInvariants(this); }