Exemplo n.º 1
0
        public ComparatorSet(string spec)
        {
            _comparators = new List <SemverComparator> {
            };

            spec = spec.Trim();
            if (spec == "")
            {
                spec = "*";
            }

            int position = 0;
            int end      = spec.Length;

            while (position < end)
            {
                int iterStartPosition = position;

                // A comparator set might be an advanced range specifier
                // like ~1.2.3, ^1.2, or 1.*.
                // Check for these first before standard comparators:
                foreach (var desugarer in new Func <string, Tuple <int, SemverComparator[]> >[] {
                    Desugarer.HyphenRange,
                    Desugarer.TildeRange,
                    Desugarer.CaretRange,
                    Desugarer.StarRange,
                })
                {
                    var result = desugarer(spec.Substring(position));
                    if (result != null)
                    {
                        position += result.Item1;
                        _comparators.AddRange(result.Item2);
                    }
                }

                // Check for standard comparator with operator and version:
                var comparatorResult = SemverComparator.TryParse(spec.Substring(position));
                if (comparatorResult != null)
                {
                    position += comparatorResult.Item1;
                    _comparators.Add(comparatorResult.Item2);
                }

                if (position == iterStartPosition)
                {
                    // Didn't manage to read any valid comparators
                    throw new ArgumentException(String.Format("Invalid range specification: \"{0}\"", spec));
                }
            }
        }
Exemplo 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 });
            }
        }