/// <summary> /// Asynchronously copies satellite files. /// </summary> /// <param name="packageIdentity">A package identity.</param> /// <param name="nuGetProjectContext">A NuGet project context.</param> /// <param name="token">A cancellation token.</param> /// <returns>A task that represents the asynchronous operation. /// The task result (<see cref="Task{TResult}.Result" />) returns a <see cref="bool" /> /// indication successfulness of the operation.</returns> /// <exception cref="ArgumentNullException">Thrown if <paramref name="packageIdentity" /> /// is <c>null</c>.</exception> /// <exception cref="ArgumentNullException">Thrown if <paramref name="nuGetProjectContext" /> /// is <c>null</c>.</exception> /// <exception cref="OperationCanceledException">Thrown if <paramref name="token" /> /// is cancelled.</exception> public async Task <bool> CopySatelliteFilesAsync( PackageIdentity packageIdentity, INuGetProjectContext nuGetProjectContext, CancellationToken token) { if (packageIdentity == null) { throw new ArgumentNullException(nameof(packageIdentity)); } if (nuGetProjectContext == null) { throw new ArgumentNullException(nameof(nuGetProjectContext)); } token.ThrowIfCancellationRequested(); var copiedSatelliteFiles = await PackageExtractor.CopySatelliteFilesAsync( packageIdentity, PackagePathResolver, GetPackageSaveMode(nuGetProjectContext), nuGetProjectContext.PackageExtractionContext, token); FileSystemUtility.PendAddFiles(copiedSatelliteFiles, Root, nuGetProjectContext); return(copiedSatelliteFiles.Any()); }
public async Task <bool> CopySatelliteFilesAsync(PackageIdentity packageIdentity, INuGetProjectContext nuGetProjectContext, CancellationToken token) { token.ThrowIfCancellationRequested(); var copiedSatelliteFiles = await PackageExtractor.CopySatelliteFilesAsync(packageIdentity, PackagePathResolver, PackageSaveMode, token); FileSystemUtility.PendAddFiles(copiedSatelliteFiles, Root, nuGetProjectContext); return(copiedSatelliteFiles.Any()); }
public async override Task <bool> InstallPackageAsync(PackageIdentity packageIdentity, Stream packageStream, INuGetProjectContext nuGetProjectContext, CancellationToken token) { if (packageIdentity == null) { throw new ArgumentNullException("packageIdentity"); } if (packageStream == null) { throw new ArgumentNullException("packageStream"); } if (nuGetProjectContext == null) { throw new ArgumentNullException("nuGetProjectContext"); } if (!packageStream.CanSeek) { throw new ArgumentException(Strings.PackageStreamShouldBeSeekable); } // 1. Check if the Package already exists at root, if so, return false if (PackageExists(packageIdentity)) { nuGetProjectContext.Log(MessageLevel.Warning, Strings.PackageAlreadyExistsInFolder, packageIdentity, Root); return(false); } nuGetProjectContext.Log(MessageLevel.Info, Strings.AddingPackageToFolder, packageIdentity, Root); // 2. Call PackageExtractor to extract the package into the root directory of this FileSystemNuGetProject packageStream.Seek(0, SeekOrigin.Begin); var addedPackageFilesList = new List <string>(await PackageExtractor.ExtractPackageAsync(packageStream, packageIdentity, PackagePathResolver, nuGetProjectContext.PackageExtractionContext, PackageSaveMode, token)); if (PackageSaveMode.HasFlag(PackageSaveModes.Nupkg)) { var packageFilePath = GetInstalledPackageFilePath(packageIdentity); if (File.Exists(packageFilePath)) { addedPackageFilesList.Add(packageFilePath); } } // Pend all the package files including the nupkg file FileSystemUtility.PendAddFiles(addedPackageFilesList, Root, nuGetProjectContext); nuGetProjectContext.Log(MessageLevel.Info, Strings.AddedPackageToFolder, packageIdentity, Root); return(true); }
/// <summary> /// Asynchronously copies satellite files. /// </summary> /// <param name="packageIdentity">A package identity.</param> /// <param name="nuGetProjectContext">A NuGet project context.</param> /// <param name="token">A cancellation token.</param> /// <returns>A task that represents the asynchronous operation. /// The task result (<see cref="Task{TResult}.Result" />) returns a <see cref="bool" /> /// indication successfulness of the operation.</returns> /// <exception cref="ArgumentNullException">Thrown if <paramref name="packageIdentity" /> /// is <c>null</c>.</exception> /// <exception cref="ArgumentNullException">Thrown if <paramref name="nuGetProjectContext" /> /// is <c>null</c>.</exception> /// <exception cref="OperationCanceledException">Thrown if <paramref name="token" /> /// is cancelled.</exception> public async Task <bool> CopySatelliteFilesAsync( PackageIdentity packageIdentity, INuGetProjectContext nuGetProjectContext, CancellationToken token) { if (packageIdentity == null) { throw new ArgumentNullException(nameof(packageIdentity)); } if (nuGetProjectContext == null) { throw new ArgumentNullException(nameof(nuGetProjectContext)); } token.ThrowIfCancellationRequested(); var packageExtractionContext = nuGetProjectContext.PackageExtractionContext; if (packageExtractionContext == null) { var signedPackageVerifier = new PackageSignatureVerifier( SignatureVerificationProviderFactory.GetSignatureVerificationProviders(), SignedPackageVerifierSettings.Default); packageExtractionContext = new PackageExtractionContext( PackageSaveMode.Defaultv2, PackageExtractionBehavior.XmlDocFileSaveMode, new LoggerAdapter(nuGetProjectContext), signedPackageVerifier); } var copiedSatelliteFiles = await PackageExtractor.CopySatelliteFilesAsync( packageIdentity, PackagePathResolver, GetPackageSaveMode(nuGetProjectContext), packageExtractionContext, token); FileSystemUtility.PendAddFiles(copiedSatelliteFiles, Root, nuGetProjectContext); return(copiedSatelliteFiles.Any()); }
public Task <bool> CopySatelliteFilesAsync(PackageIdentity packageIdentity, INuGetProjectContext nuGetProjectContext, CancellationToken token) { token.ThrowIfCancellationRequested(); PackageExtractionContext packageExtractionContext = nuGetProjectContext.PackageExtractionContext; if (packageExtractionContext == null) { packageExtractionContext = new PackageExtractionContext(new LoggerAdapter(nuGetProjectContext)); } var copiedSatelliteFiles = PackageExtractor.CopySatelliteFiles( packageIdentity, PackagePathResolver, GetPackageSaveMode(nuGetProjectContext), packageExtractionContext, token); FileSystemUtility.PendAddFiles(copiedSatelliteFiles, Root, nuGetProjectContext); return(Task.FromResult(copiedSatelliteFiles.Any())); }
public override Task <bool> InstallPackageAsync( PackageIdentity packageIdentity, DownloadResourceResult downloadResourceResult, INuGetProjectContext nuGetProjectContext, CancellationToken token) { if (packageIdentity == null) { throw new ArgumentNullException(nameof(packageIdentity)); } if (downloadResourceResult == null) { throw new ArgumentNullException(nameof(downloadResourceResult)); } if (nuGetProjectContext == null) { throw new ArgumentNullException(nameof(nuGetProjectContext)); } if (!downloadResourceResult.PackageStream.CanSeek) { throw new ArgumentException(Strings.PackageStreamShouldBeSeekable); } var packageFile = PackagePathResolver.GetInstallPath(packageIdentity); return(ConcurrencyUtilities.ExecuteWithFileLockedAsync(packageFile, action: cancellationToken => { // 1. Set a default package extraction context, if necessary. PackageExtractionContext packageExtractionContext = nuGetProjectContext.PackageExtractionContext; if (packageExtractionContext == null) { packageExtractionContext = new PackageExtractionContext(new LoggerAdapter(nuGetProjectContext)); } // 2. Check if the Package already exists at root, if so, return false if (PackageExists(packageIdentity, packageExtractionContext.PackageSaveMode)) { nuGetProjectContext.Log(MessageLevel.Info, Strings.PackageAlreadyExistsInFolder, packageIdentity, Root); return Task.FromResult(false); } nuGetProjectContext.Log(MessageLevel.Info, Strings.AddingPackageToFolder, packageIdentity, Path.GetFullPath(Root)); // 3. Call PackageExtractor to extract the package into the root directory of this FileSystemNuGetProject downloadResourceResult.PackageStream.Seek(0, SeekOrigin.Begin); var addedPackageFilesList = new List <string>(); if (downloadResourceResult.PackageReader != null) { addedPackageFilesList.AddRange( PackageExtractor.ExtractPackage( downloadResourceResult.PackageReader, downloadResourceResult.PackageStream, PackagePathResolver, packageExtractionContext, cancellationToken)); } else { addedPackageFilesList.AddRange( PackageExtractor.ExtractPackage( downloadResourceResult.PackageStream, PackagePathResolver, packageExtractionContext, cancellationToken)); } var packageSaveMode = GetPackageSaveMode(nuGetProjectContext); if (packageSaveMode.HasFlag(PackageSaveMode.Nupkg)) { var packageFilePath = GetInstalledPackageFilePath(packageIdentity); if (File.Exists(packageFilePath)) { addedPackageFilesList.Add(packageFilePath); } } // Pend all the package files including the nupkg file FileSystemUtility.PendAddFiles(addedPackageFilesList, Root, nuGetProjectContext); nuGetProjectContext.Log(MessageLevel.Info, Strings.AddedPackageToFolder, packageIdentity, Path.GetFullPath(Root)); return Task.FromResult(true); }, token: token)); }
/// <summary> /// Asynchronously installs a package. /// </summary> /// <param name="packageIdentity">A package identity.</param> /// <param name="downloadResourceResult">A download resource result.</param> /// <param name="nuGetProjectContext">A NuGet project context.</param> /// <param name="token">A cancellation token.</param> /// <returns>A task that represents the asynchronous operation. /// The task result (<see cref="Task{TResult}.Result" />) returns a <see cref="bool" /> /// indication successfulness of the operation.</returns> /// <exception cref="ArgumentNullException">Thrown if <paramref name="packageIdentity" /> /// is <c>null</c>.</exception> /// <exception cref="ArgumentNullException">Thrown if <paramref name="downloadResourceResult" /> /// is <c>null</c>.</exception> /// <exception cref="ArgumentNullException">Thrown if <paramref name="nuGetProjectContext" /> /// is <c>null</c>.</exception> /// <exception cref="ArgumentException">Thrown if the package stream for /// <paramref name="downloadResourceResult" /> is not seekable.</exception> public override Task <bool> InstallPackageAsync( PackageIdentity packageIdentity, DownloadResourceResult downloadResourceResult, INuGetProjectContext nuGetProjectContext, CancellationToken token) { if (packageIdentity == null) { throw new ArgumentNullException(nameof(packageIdentity)); } if (downloadResourceResult == null) { throw new ArgumentNullException(nameof(downloadResourceResult)); } if (nuGetProjectContext == null) { throw new ArgumentNullException(nameof(nuGetProjectContext)); } if (downloadResourceResult.Status == DownloadResourceResultStatus.Available && !downloadResourceResult.PackageStream.CanSeek) { throw new ArgumentException(Strings.PackageStreamShouldBeSeekable, nameof(downloadResourceResult)); } var packageDirectory = PackagePathResolver.GetInstallPath(packageIdentity); return(ConcurrencyUtilities.ExecuteWithFileLockedAsync( packageDirectory, action: async cancellationToken => { var packageExtractionContext = nuGetProjectContext.PackageExtractionContext; // 1. Check if the Package already exists at root, if so, return false if (PackageExists(packageIdentity, packageExtractionContext.PackageSaveMode)) { nuGetProjectContext.Log(MessageLevel.Info, Strings.PackageAlreadyExistsInFolder, packageIdentity, Root); return false; } nuGetProjectContext.Log(MessageLevel.Info, Strings.AddingPackageToFolder, packageIdentity, Path.GetFullPath(Root)); // 2. Call PackageExtractor to extract the package into the root directory of this FileSystemNuGetProject if (downloadResourceResult.Status == DownloadResourceResultStatus.Available) { downloadResourceResult.PackageStream.Seek(0, SeekOrigin.Begin); } var addedPackageFilesList = new List <string>(); if (downloadResourceResult.PackageReader != null) { if (downloadResourceResult.Status == DownloadResourceResultStatus.AvailableWithoutStream) { addedPackageFilesList.AddRange( await PackageExtractor.ExtractPackageAsync( downloadResourceResult.PackageSource, downloadResourceResult.PackageReader, PackagePathResolver, packageExtractionContext, cancellationToken, nuGetProjectContext.OperationId)); } else { addedPackageFilesList.AddRange( await PackageExtractor.ExtractPackageAsync( downloadResourceResult.PackageSource, downloadResourceResult.PackageReader, downloadResourceResult.PackageStream, PackagePathResolver, packageExtractionContext, cancellationToken, nuGetProjectContext.OperationId)); } } else { addedPackageFilesList.AddRange( await PackageExtractor.ExtractPackageAsync( downloadResourceResult.PackageSource, downloadResourceResult.PackageStream, PackagePathResolver, packageExtractionContext, cancellationToken, nuGetProjectContext.OperationId)); } var packageSaveMode = GetPackageSaveMode(nuGetProjectContext); if (packageSaveMode.HasFlag(PackageSaveMode.Nupkg)) { var packageFilePath = GetInstalledPackageFilePath(packageIdentity); if (File.Exists(packageFilePath)) { addedPackageFilesList.Add(packageFilePath); } } // Pend all the package files including the nupkg file FileSystemUtility.PendAddFiles(addedPackageFilesList, Root, nuGetProjectContext); nuGetProjectContext.Log(MessageLevel.Info, Strings.AddedPackageToFolder, packageIdentity, Path.GetFullPath(Root)); // Extra logging with source for verbosity detailed // Used by external tool CoreXT to track package provenance if (!string.IsNullOrEmpty(downloadResourceResult.PackageSource)) { nuGetProjectContext.Log(MessageLevel.Debug, Strings.AddedPackageToFolderFromSource, packageIdentity, Path.GetFullPath(Root), downloadResourceResult.PackageSource); } return true; }, token: token)); }