| File: RangeVersionSpecification.cs | Web Access |
| Project: src\sdk\src\TemplateEngine\Microsoft.TemplateEngine.Utils\Microsoft.TemplateEngine.Utils.csproj (Microsoft.TemplateEngine.Utils) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace Microsoft.TemplateEngine.Utils { public class RangeVersionSpecification : IVersionSpecification { public RangeVersionSpecification(string min, string max, bool isStartInclusive, bool isEndInclusive) { MinVersion = min; MaxVersion = max; IsStartInclusive = isStartInclusive; IsEndInclusive = isEndInclusive; } public string MinVersion { get; } public string MaxVersion { get; } public bool IsStartInclusive { get; } public bool IsEndInclusive { get; } public static bool TryParse(string range, out IVersionSpecification? specification) { bool startInclusive = false; bool endInclusive = false; if (range.StartsWith("[")) { startInclusive = true; } else if (!range.StartsWith("(")) { specification = null; return false; } if (range.EndsWith("]")) { endInclusive = true; } else if (!range.EndsWith(")")) { specification = null; return false; } string[] parts = range.Split('-'); if (parts.Length != 2) { specification = null; return false; } string startVersion = parts[0].Substring(1); string endVersion = parts[1].Substring(0, parts[1].Length - 1); if (IsWildcardVersion(startVersion) && IsWildcardVersion(endVersion)) { specification = null; return false; } else if (!IsWildcardVersion(startVersion) && !VersionStringHelpers.IsVersionWellFormed(startVersion)) { specification = null; return false; } else if (!IsWildcardVersion(endVersion) && !VersionStringHelpers.IsVersionWellFormed(endVersion)) { specification = null; return false; } specification = new RangeVersionSpecification(startVersion, endVersion, startInclusive, endInclusive); return true; } public bool CheckIfVersionIsValid(string versionToCheck) { bool isStartValid; bool isEndValid; if (!IsWildcardVersion(MinVersion)) { int? startComparison = VersionStringHelpers.CompareVersions(MinVersion, versionToCheck); if (startComparison == null) { return false; } isStartValid = IsStartInclusive ? startComparison.Value <= 0 : startComparison.Value < 0; } else { isStartValid = true; } if (!IsWildcardVersion(MaxVersion)) { int? endComparison = VersionStringHelpers.CompareVersions(versionToCheck, MaxVersion); if (endComparison == null) { return false; } isEndValid = IsEndInclusive ? endComparison.Value <= 0 : endComparison.Value < 0; } else { isEndValid = true; } return isStartValid && isEndValid; } public override string ToString() { return $"{(IsStartInclusive ? "[" : "(")}{MinVersion}-{MaxVersion}{(IsEndInclusive ? "]" : ")")}"; } private static bool IsWildcardVersion(string version) { return string.Equals(version, "*"); } } }