public async Task <FindBestPackageVersionMatchOutput> FindBestPackageVersionMatchAsync(
            FindBestPackageVersionMatchInput input,
            CancellationToken cancellationToken)
        {
            var output = new FindBestPackageVersionMatchOutput
            {
                InputStatus = InputStatus.Missing,
                Input       = input,
            };

            if (input == null)
            {
                return(output);
            }

            var validatedPackageId    = InputValidator.PackageId(input.PackageId);
            var validatedVersionRange = InputValidator.VersionRange(input.VersionRange);

            if (validatedPackageId.IsMissing || validatedPackageId.IsMissing)
            {
                return(output);
            }

            if (validatedVersionRange.IsInvalid || validatedVersionRange.IsInvalid)
            {
                output.InputStatus = InputStatus.Invalid;
                return(output);
            }

            IEnumerable <NuGetVersion> versions;
            HashSet <NuGetVersion>     listed;

            using (var cache = new SourceCacheContext())
            {
                var resource = await _metadataResourceTask;
                var metadata = await resource.GetMetadataAsync(
                    input.PackageId,
                    includePrerelease : true,
                    includeUnlisted : true,
                    cache,
                    _nuGetLogger,
                    cancellationToken);

                listed   = new HashSet <NuGetVersion>(metadata.Where(x => x.IsListed).Select(x => x.Identity.Version));
                versions = metadata.Select(x => x.Identity.Version).ToList();
            }

            output.InputStatus  = InputStatus.Valid;
            output.PackageId    = validatedPackageId.Data;
            output.ShowUnlisted = input.ShowUnlisted;
            output.Result       = GetBestVersionMatch(validatedVersionRange.Data, versions.ToList(), listed, output.ShowUnlisted);

            return(output);
        }
示例#2
0
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var validated = InputValidator.VersionRange(value);

            if (validated.IsValid)
            {
                return(ValidationResult.Success);
            }
            else
            {
                return(new ValidationResult(validated.ErrorMessage, new[] { validationContext.MemberName }));
            }
        }
        public FindBestVersionMatchOutput FindBestVersionMatch(FindBestVersionMatchInput input)
        {
            var output = new FindBestVersionMatchOutput
            {
                InputStatus = InputStatus.Missing,
                Input       = input,
            };

            if (input == null)
            {
                return(output);
            }

            var validatedVersionRange = InputValidator.VersionRange(input.VersionRange);
            var validatedVersions     = InputValidator.Versions(input.Versions);

            if (validatedVersionRange.IsMissing || validatedVersions.IsMissing)
            {
                return(output);
            }

            if (validatedVersionRange.IsInvalid || validatedVersions.IsInvalid)
            {
                output.InputStatus = InputStatus.Invalid;
                return(output);
            }

            output.InputStatus = InputStatus.Valid;
            output.Result      = GetBestVersionMatch(
                validatedVersionRange.Data,
                validatedVersions.Data,
                listed: null,
                showUnlisted: true);

            return(output);
        }