| File: VersionStringHelpers.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 static class VersionStringHelpers { public static bool TryParseVersionSpecification(string versionString, out IVersionSpecification? specification) { if (string.IsNullOrEmpty(versionString)) { specification = null; return false; } else if (versionString.Contains("-")) { return RangeVersionSpecification.TryParse(versionString, out specification); } else { return ExactVersionSpecification.TryParse(versionString, out specification); } } // returns the relative order of the versions: // null if either is not a valid version. // -1 if version1 < version2 // 0 if version1 == version2 // 1 if version1 > version2 public static int? CompareVersions(string? version1, string? version2) { if (!TryParseVersionString(version1, out int[]? parts1) || !TryParseVersionString(version2, out int[]? parts2)) { return null; } for (int i = 0; i < 4; i++) { if (parts1![i] > parts2![i]) { return 1; } else if (parts1[i] < parts2[i]) { return -1; } } return 0; } public static bool IsVersionWellFormed(string? version) { return TryParseVersionString(version, out _); } // tries to parse a version into 4 int parts, zero-padding on the right if needed. // more than 4 parts, return false. // Not parse-able, return false. private static bool TryParseVersionString(string? version, out int[]? parsed) { if (string.IsNullOrEmpty(version)) { parsed = null; return false; } string[]? parts = version?.Split(new[] { '.' }); if (parts != null) { if (parts.Length is < 2 or > 4) { parsed = null; return false; } } parsed = new[] { 0, 0, 0, 0 }; for (int i = 0; i < parts?.Length; i++) { if (int.TryParse(parts[i], out int intPart)) { parsed[i] = intPart; } else { parsed = null; return false; } } return true; } } }