public VersionComparator(Version version, VersionFloatBehavior floatBehavior, string releasePrefix, VersionOperator @operator) { if (version == null) { throw new ArgumentNullException(nameof(version)); } _version = version; _floatBehavior = floatBehavior; _releasePrefix = releasePrefix; _operator = @operator; if (_releasePrefix == null && version.IsPrerelease) { // use the actual label if one was not given _releasePrefix = version.Release; } }
static Predicate <Version> GetPredicate(VersionOperator op) { switch (op) { case VersionOperator.GreaterThan: return(v => DeviceInfo.Version > v); case VersionOperator.GreaterThanOrEqualTo: return(v => DeviceInfo.Version >= v); case VersionOperator.LessThan: return(v => DeviceInfo.Version < v); case VersionOperator.LessThanOrEqualTo: return(v => DeviceInfo.Version <= v); case VersionOperator.EqualTo: default: return(v => DeviceInfo.Version == v); } }
public static string Token(this VersionOperator value) { switch (value) { case VersionOperator.EqualTo: return("="); case VersionOperator.GreaterThan: return(">"); case VersionOperator.GreaterThanOrEqual: return(">="); case VersionOperator.LessThan: return("<"); case VersionOperator.LessThanOrEqual: return("<="); default: return(""); } }
public VersionComparator(Version version, VersionFloatBehavior floatBehavior, VersionOperator @operator) : this(version, floatBehavior, null, @operator) { }
/// <summary> /// Parse a floating version into a FloatRange /// </summary> public static bool TryParse(string comparatorString, out VersionComparator comparator) { comparator = null; if (comparatorString == null) { return(false); } comparatorString = comparatorString.Trim(); if (IsNullOrEmpty(comparatorString)) { return(false); } VersionOperator @operator = VersionOperator.Equal; var versionString = comparatorString; if (comparatorString.StartsWith("==")) { @operator = VersionOperator.Equal; versionString = comparatorString.Substring(2, comparatorString.Length - 2).Trim(); } else if (comparatorString.StartsWith("!=")) { @operator = VersionOperator.NotEqual; versionString = comparatorString.Substring(2, comparatorString.Length - 2).Trim(); } else if (comparatorString.StartsWith("=")) { @operator = VersionOperator.Equal; versionString = comparatorString.Substring(1, comparatorString.Length - 1).Trim(); } else if (comparatorString.StartsWith(">=")) { @operator = VersionOperator.GreaterThanEqual; versionString = comparatorString.Substring(2, comparatorString.Length - 2).Trim(); } else if (comparatorString.StartsWith(">")) { @operator = VersionOperator.GreaterThan; versionString = comparatorString.Substring(1, comparatorString.Length - 1).Trim(); } else if (comparatorString.StartsWith("<=")) { @operator = VersionOperator.LessThanEqual; versionString = comparatorString.Substring(2, comparatorString.Length - 2).Trim(); } else if (comparatorString.StartsWith("<>")) { @operator = VersionOperator.NotEqual; versionString = comparatorString.Substring(2, comparatorString.Length - 2).Trim(); } else if (comparatorString.StartsWith("<")) { @operator = VersionOperator.LessThan; versionString = comparatorString.Substring(1, comparatorString.Length - 1).Trim(); } else if (comparatorString.EndsWith("+")) { @operator = VersionOperator.GreaterThanEqual; versionString = comparatorString.Substring(0, comparatorString.Length - 1).Trim(); } else if (comparatorString.EndsWith("-")) { @operator = VersionOperator.LessThanEqual; versionString = comparatorString.Substring(0, comparatorString.Length - 1).Trim(); } if (TryParse(versionString, @operator, out comparator)) { comparator._originalString = comparatorString; return(true); } return(false); }
public VersionComparator(Version version, VersionOperator @operator) : this(version, VersionFloatBehavior.None, @operator) { }
internal static bool TryParse(string versionString, VersionOperator @operator, out VersionComparator comparator) { comparator = null; if (versionString == null) { return(false); } versionString = versionString.Trim(); if (IsNullOrEmpty(versionString)) { return(false); } if (versionString == "*") { comparator = new VersionComparator(new Version(new System.Version(0, 0)), VersionFloatBehavior.Major, @operator) { _originalString = versionString }; return(true); } if (versionString.Length < 3) { return(false); } var realVersion = versionString; if (versionString[0] == 'v' || versionString[0] == 'V') { realVersion = versionString.Substring(1); } var hyphenIndex = realVersion.IndexOf('-'); var behavior = VersionFloatBehavior.None; // Has floating behavior if (realVersion.EndsWith(".x") || realVersion[realVersion.Length - 1] == '*') { var actualVersion = realVersion.Substring(0, realVersion.Length - 1); string releasePrefix = null; if (hyphenIndex == -1) { actualVersion = actualVersion.TrimEnd('.'); behavior = DetermineFloatBehavior(ref actualVersion); } else { behavior = VersionFloatBehavior.Prerelease; releasePrefix = actualVersion.Substring(hyphenIndex + 1); if (hyphenIndex == actualVersion.Length - 1) // ends with '-' { // remove the empty release label, the version will be release but // the behavior will have to account for this actualVersion = actualVersion.Substring(0, actualVersion.Length - 1); } if (actualVersion[actualVersion.Length - 1] == '.') { // ending with a . is not allowed actualVersion = actualVersion.Substring(0, actualVersion.Length - 1); } } Version version; if (Version.TryParse(actualVersion, out version)) { // there is no float range for this version comparator = new VersionComparator(version, behavior, releasePrefix, @operator) { _originalString = versionString }; } } else { if (hyphenIndex == -1 && (@operator == VersionOperator.LessThan || @operator == VersionOperator.LessThanEqual)) { behavior = DetermineFloatBehavior(ref realVersion); } // normal version parse Version version; if (Version.TryParse(realVersion, out version)) { // there is no float range for this version comparator = new VersionComparator(version, behavior, @operator) { _originalString = versionString }; } } return(comparator != null); }