public Task <string> GetPackageUrl(PackageId packageId,
                                    NuGetVersion packageVersion,
                                    PackageSourceLocation packageSourceLocation = null,
                                    bool includePreview = false)
 {
     return(Task.FromResult("mock-url-" + packageId.ToString()));
 }
示例#2
0
        private async Task <(PackageSource, NuGetVersion)> GetPackageSourceAndVerion(PackageId packageId,
                                                                                     NuGetVersion packageVersion = null,
                                                                                     PackageSourceLocation packageSourceLocation = null,
                                                                                     bool includePreview = false)
        {
            CancellationToken cancellationToken = CancellationToken.None;

            IPackageSearchMetadata packageMetadata;

            IEnumerable <PackageSource> packagesSources = LoadNuGetSources(packageSourceLocation);
            PackageSource source;

            if (packageVersion is null)
            {
                (source, packageMetadata) = await GetLatestVersionInternalAsync(packageId.ToString(), packagesSources,
                                                                                includePreview, cancellationToken).ConfigureAwait(false);
            }
            else
            {
                packageVersion            = new NuGetVersion(packageVersion);
                (source, packageMetadata) =
                    await GetPackageMetadataAsync(packageId.ToString(), packageVersion, packagesSources,
                                                  cancellationToken).ConfigureAwait(false);
            }

            packageVersion = packageMetadata.Identity.Version;

            return(source, packageVersion);
        }
示例#3
0
        public async Task <string> DownloadPackageAsync(PackageId packageId,
                                                        NuGetVersion packageVersion = null,
                                                        PackageSourceLocation packageSourceLocation = null,
                                                        bool includePreview          = false,
                                                        DirectoryPath?downloadFolder = null)
        {
            CancellationToken cancellationToken = CancellationToken.None;

            if (_restoreActionConfig.Interactive)
            {
                DefaultCredentialServiceUtility.SetupDefaultCredentialService(_verboseLogger,
                                                                              _restoreActionConfig.Interactive);
            }

            (var source, var resolvedPackageVersion) = await GetPackageSourceAndVerion(packageId, packageVersion,
                                                                                       packageSourceLocation, includePreview);

            FindPackageByIdResource resource   = null;
            SourceRepository        repository = Repository.Factory.GetCoreV3(source);

            resource = await repository.GetResourceAsync <FindPackageByIdResource>(cancellationToken)
                       .ConfigureAwait(false);

            if (resource == null)
            {
                throw new NuGetPackageNotFoundException(
                          string.Format(LocalizableStrings.FailedToLoadNuGetSource, source.Source));
            }

            string nupkgPath = downloadFolder == null || !downloadFolder.HasValue
                ? Path.Combine(_packageInstallDir.Value, packageId.ToString(),
                               resolvedPackageVersion.ToNormalizedString(),
                               $"{packageId}.{resolvedPackageVersion.ToNormalizedString()}.nupkg")
                : Path.Combine(downloadFolder.Value.Value,
                               $"{packageId}.{resolvedPackageVersion.ToNormalizedString()}.nupkg");

            Directory.CreateDirectory(Path.GetDirectoryName(nupkgPath));
            using FileStream destinationStream = File.Create(nupkgPath);
            bool success = await resource.CopyNupkgToStreamAsync(
                packageId.ToString(),
                resolvedPackageVersion,
                destinationStream,
                _cacheSettings,
                _verboseLogger,
                cancellationToken);

            destinationStream.Close();

            if (!success)
            {
                throw new NuGetPackageInstallerException(
                          string.Format("Downloading {0} version {1} failed", packageId,
                                        packageVersion.ToNormalizedString()));
            }

            VerifySigning(nupkgPath);

            return(nupkgPath);
        }
        public Task <string> DownloadPackageAsync(PackageId packageId, NuGetVersion packageVersion,
                                                  PackageSourceLocation packageSourceLocation = null,
                                                  bool includePreview = false)
        {
            var mockPackagePath = Path.Combine(MockPackageDir, $"{packageId}.{packageVersion}.nupkg");

            File.WriteAllText(mockPackagePath, string.Empty);
            return(Task.FromResult(mockPackagePath));
        }
示例#5
0
        public async Task <string> GetPackageUrl(PackageId packageId,
                                                 NuGetVersion packageVersion = null,
                                                 PackageSourceLocation packageSourceLocation = null,
                                                 bool includePreview = false)
        {
            (var source, var resolvedPackageVersion) = await GetPackageSourceAndVerion(packageId, packageVersion, packageSourceLocation, includePreview);

            SourceRepository repository = GetSourceRepository(source);

            ServiceIndexResourceV3 serviceIndexResource = repository.GetResourceAsync <ServiceIndexResourceV3>().Result;
            IReadOnlyList <Uri>    packageBaseAddress   =
                serviceIndexResource?.GetServiceEntryUris(ServiceTypes.PackageBaseAddress);

            return(GetNupkgUrl(packageBaseAddress.First().ToString(), packageId, resolvedPackageVersion));
        }
示例#6
0
        private IEnumerable <PackageSource> LoadNuGetSources(PackageSourceLocation packageSourceLocation = null)
        {
            IEnumerable <PackageSource> defaultSources = new List <PackageSource>();
            string    currentDirectory = Directory.GetCurrentDirectory();
            ISettings settings;

            if (packageSourceLocation?.NugetConfig != null)
            {
                string nugetConfigParentDirectory =
                    packageSourceLocation.NugetConfig.Value.GetDirectoryPath().Value;
                string nugetConfigFileName = Path.GetFileName(packageSourceLocation.NugetConfig.Value.Value);
                settings = Settings.LoadSpecificSettings(nugetConfigParentDirectory,
                                                         nugetConfigFileName);
            }
            else
            {
                settings = Settings.LoadDefaultSettings(
                    packageSourceLocation?.RootConfigDirectory?.Value ?? currentDirectory);
            }

            PackageSourceProvider packageSourceProvider = new PackageSourceProvider(settings);

            defaultSources = packageSourceProvider.LoadPackageSources().Where(source => source.IsEnabled);


            if (packageSourceLocation?.AdditionalSourceFeed?.Any() ?? false)
            {
                foreach (string source in packageSourceLocation?.AdditionalSourceFeed)
                {
                    if (string.IsNullOrWhiteSpace(source))
                    {
                        continue;
                    }

                    PackageSource packageSource = new PackageSource(source);
                    if (packageSource.TrySourceAsUri == null)
                    {
                        _verboseLogger.LogWarning(string.Format(
                                                      LocalizableStrings.FailedToLoadNuGetSource,
                                                      source));
                        continue;
                    }

                    defaultSources = defaultSources.Append(packageSource);
                }
            }

            if (!packageSourceLocation?.SourceFeedOverrides.Any() ?? true)
            {
                if (!defaultSources.Any())
                {
                    throw new NuGetPackageInstallerException("No NuGet sources are defined or enabled");
                }

                return(defaultSources);
            }

            List <PackageSource> customSources = new List <PackageSource>();

            foreach (string source in packageSourceLocation?.SourceFeedOverrides)
            {
                if (string.IsNullOrWhiteSpace(source))
                {
                    continue;
                }

                PackageSource packageSource = new PackageSource(source);
                if (packageSource.TrySourceAsUri == null)
                {
                    _verboseLogger.LogWarning(string.Format(
                                                  LocalizableStrings.FailedToLoadNuGetSource,
                                                  source));
                    continue;
                }

                customSources.Add(packageSource);
            }

            IEnumerable <PackageSource> retrievedSources;

            if (packageSourceLocation != null && packageSourceLocation.SourceFeedOverrides.Any())
            {
                retrievedSources = customSources;
            }
            else
            {
                retrievedSources = defaultSources;
            }

            if (!retrievedSources.Any())
            {
                throw new NuGetPackageInstallerException("No NuGet sources are defined or enabled");
            }

            return(retrievedSources);
        }
 public Task <NuGetVersion> GetLatestPackageVerion(PackageId packageId, PackageSourceLocation packageSourceLocation = null, bool includePreview = false) => throw new NotImplementedException();
示例#8
0
        public async Task <string> DownloadPackageAsync(PackageId packageId,
                                                        NuGetVersion packageVersion = null,
                                                        PackageSourceLocation packageSourceLocation = null,
                                                        bool includePreview = false)
        {
            CancellationToken cancellationToken = CancellationToken.None;

            IPackageSearchMetadata packageMetadata;

            IEnumerable <PackageSource> packagesSources = LoadNuGetSources(packageSourceLocation);
            PackageSource source;

            if (packageVersion is null)
            {
                (source, packageMetadata) = await GetLatestVersionInternalAsync(packageId.ToString(), packagesSources,
                                                                                includePreview, cancellationToken).ConfigureAwait(false);
            }
            else
            {
                packageVersion            = new NuGetVersion(packageVersion);
                (source, packageMetadata) =
                    await GetPackageMetadataAsync(packageId.ToString(), packageVersion, packagesSources,
                                                  cancellationToken).ConfigureAwait(false);
            }

            packageVersion = packageMetadata.Identity.Version;

            FindPackageByIdResource resource   = null;
            SourceRepository        repository = Repository.Factory.GetCoreV3(source);

            resource = await repository.GetResourceAsync <FindPackageByIdResource>(cancellationToken)
                       .ConfigureAwait(false);

            if (resource == null)
            {
                throw new NuGetPackageInstallerException(
                          string.Format(LocalizableStrings.FailedToLoadNuGetSource, source.Source));
            }

            string nupkgPath = Path.Combine(_packageInstallDir.Value, packageId.ToString(),
                                            packageVersion.ToNormalizedString(),
                                            $"{packageId}.{packageVersion.ToNormalizedString()}.nupkg");

            Directory.CreateDirectory(Path.GetDirectoryName(nupkgPath));
            using FileStream destinationStream = File.Create(nupkgPath);
            bool success = await resource.CopyNupkgToStreamAsync(
                packageId.ToString(),
                packageVersion,
                destinationStream,
                _cacheSettings,
                _logger,
                cancellationToken);

            if (!success)
            {
                throw new NuGetPackageInstallerException(
                          $"Downloading {packageId} version {packageVersion.ToNormalizedString()} failed");
            }

            return(nupkgPath);
        }