コード例 #1
0
        private async Task <PackageInfo> GetBestMatchPackageVersionsAsync(string registry, bool includePrerelease, string packageId, SemVer.Range range)
        {
            PackageOption option = new PackageOption
            {
                packageId         = packageId,
                includePrerelease = includePrerelease,
                registry          = registry
            };

            Console.WriteLine($"Try to find best match: {packageId}: {range.ToString()}");

            IEnumerable <string> versionValues = await GetPackageVersionAsync(option.packageId, option.registry, option.includePrerelease);

            IEnumerable <SemVer.Version> versions = versionValues?.Select(x => new SemVer.Version(x, true));

            if (versions == null)
            {
                return(null);
            }

            SemVer.Version bestMatchVersion = range.MaxSatisfying(versions);

            if (bestMatchVersion == null)
            {
                bestMatchVersion = versions.OrderByDescending(x => x).FirstOrDefault();
            }

            return(new PackageInfo {
                packageId = packageId, packageVersion = bestMatchVersion
            });
        }
コード例 #2
0
ファイル: SemVerHelper.cs プロジェクト: qipa/UniGet
        public static int GetSatisfiedVersionIndex(this SemVer.Range versionRange, IList <SemVer.Version> versions)
        {
            if (versions.Count == 0)
            {
                return(-1);
            }

            var highest = (versionRange.ToString().Contains("*") ||
                           versionRange.ToString().Contains("x"));

            var selected = -1;

            for (int i = 0; i < versions.Count; i++)
            {
                if (versionRange.IsSatisfied(versions[i]))
                {
                    if (selected == -1)
                    {
                        selected = i;
                    }
                    else if (highest)
                    {
                        if (versions[selected] < versions[i])
                        {
                            selected = i;
                        }
                    }
                    else
                    {
                        if (versions[selected] > versions[i])
                        {
                            selected = i;
                        }
                    }
                }
            }

            return(selected);
        }