Ejemplo n.º 1
0
        public static Tuple <int, SemverComparator[]> HyphenRange(string spec)
        {
            string pattern = String.Format(@"^\s*({0}+)\s+\-\s+({0}+)\s*", versionChars);

            var regex = new Regex(pattern);
            var match = regex.Match(spec);

            if (!match.Success)
            {
                return(null);
            }

            PartialVersion minPartialVersion = null;
            PartialVersion maxPartialVersion = null;

            // Parse versions from lower and upper ranges, which might
            // be partial versions.
            try
            {
                minPartialVersion = new PartialVersion(match.Groups[1].Value);
                maxPartialVersion = new PartialVersion(match.Groups[2].Value);
            }
            catch (ArgumentException)
            {
                return(null);
            }

            // Lower range has any non-supplied values replaced with zero
            var minVersion = minPartialVersion.ToZeroVersion();

            SemverComparator.Operator maxOperator = maxPartialVersion.IsFull()
                                ? SemverComparator.Operator.LessThanOrEqual : SemverComparator.Operator.LessThan;

            SemanticVersion maxVersion = null;

            // Partial upper range means supplied version values can't change
            if (!maxPartialVersion.Major.HasValue)
            {
                // eg. upper range = "*", then maxVersion remains null
                // and there's only a minimum
            }
            else if (!maxPartialVersion.Minor.HasValue)
            {
                maxVersion = new SemanticVersion(maxPartialVersion.Major.Value + 1, 0, 0);
            }
            else if (!maxPartialVersion.Patch.HasValue)
            {
                maxVersion = new SemanticVersion(maxPartialVersion.Major.Value, maxPartialVersion.Minor.Value + 1, 0);
            }
            else
            {
                // Fully specified max version
                maxVersion = maxPartialVersion.ToZeroVersion();
            }
            return(Tuple.Create(
                       match.Length,
                       minMaxComparators(minVersion, maxVersion, maxOperator)));
        }
Ejemplo n.º 2
0
        private static SemverComparator[] minMaxComparators(SemanticVersion minVersion, SemanticVersion maxVersion,
                                                            SemverComparator.Operator maxOperator = SemverComparator.Operator.LessThan)
        {
            var minComparator = new SemverComparator(
                SemverComparator.Operator.GreaterThanOrEqual,
                minVersion);

            if (maxVersion == null)
            {
                return(new[] { minComparator });
            }
            else
            {
                var maxComparator = new SemverComparator(
                    maxOperator, maxVersion);
                return(new[] { minComparator, maxComparator });
            }
        }