示例#1
0
 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;
     }
 }
示例#2
0
        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("");
            }
        }
示例#4
0
 public VersionComparator(Version version, VersionFloatBehavior floatBehavior, VersionOperator @operator)
     : this(version, floatBehavior, null, @operator)
 {
 }
示例#5
0
        /// <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);
        }
示例#6
0
 public VersionComparator(Version version, VersionOperator @operator)
     : this(version, VersionFloatBehavior.None, @operator)
 {
 }
示例#7
0
        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);
        }