private async Task PushPackageToFileSystem(Uri sourceUri, string pathToPackage, ILogger log, CancellationToken token) { var root = sourceUri.LocalPath; PackageIdentity packageIdentity = null; using (var reader = new PackageArchiveReader(pathToPackage)) { packageIdentity = reader.GetIdentity(); } if (IsV2LocalRepository(root)) { var pathResolver = new PackagePathResolver(root, useSideBySidePaths: true); var packageFileName = pathResolver.GetPackageFileName(packageIdentity); var fullPath = Path.Combine(root, packageFileName); File.Copy(pathToPackage, fullPath, overwrite: true); } else { var context = new OfflineFeedAddContext(pathToPackage, root, log, throwIfSourcePackageIsInvalid: true, throwIfPackageExistsAndInvalid: false, throwIfPackageExists: false, expand: true); await OfflineFeedUtility.AddPackageToSource(context, token); } }
private async Task PushPackageToFileSystem(Uri sourceUri, string pathToPackage, bool skipDuplicate, ILogger log, CancellationToken token) { var root = sourceUri.LocalPath; PackageIdentity packageIdentity = null; using (var reader = new PackageArchiveReader(pathToPackage)) { packageIdentity = reader.GetIdentity(); } if (IsV2LocalRepository(root)) { var pathResolver = new PackagePathResolver(sourceUri.AbsolutePath, useSideBySidePaths: true); var packageFileName = pathResolver.GetPackageFileName(packageIdentity); var fullPath = Path.Combine(root, packageFileName); File.Copy(pathToPackage, fullPath, overwrite: true); //Indicate that SkipDuplicate is currently not supported in this scenario. if (skipDuplicate) { log?.LogWarning(Strings.PushCommandSkipDuplicateNotImplemented); } } else { var packageExtractionContext = new PackageExtractionContext( PackageSaveMode.Defaultv3, PackageExtractionBehavior.XmlDocFileSaveMode, ClientPolicyContext.GetClientPolicy(Settings, log), log); var context = new OfflineFeedAddContext(pathToPackage, root, log, throwIfSourcePackageIsInvalid: true, throwIfPackageExistsAndInvalid: !skipDuplicate, throwIfPackageExists: !skipDuplicate, extractionContext: packageExtractionContext); await OfflineFeedUtility.AddPackageToSource(context, token); } }
private async Task PushPackageToFileSystem(Uri sourceUri, string pathToPackage, ILogger log, CancellationToken token) { var root = sourceUri.LocalPath; PackageIdentity packageIdentity = null; using (var reader = new PackageArchiveReader(pathToPackage)) { packageIdentity = reader.GetIdentity(); } if (IsV2LocalRepository(root)) { var pathResolver = new PackagePathResolver(root, useSideBySidePaths: true); var packageFileName = pathResolver.GetPackageFileName(packageIdentity); var fullPath = Path.Combine(root, packageFileName); File.Copy(pathToPackage, fullPath, overwrite: true); } else { var signedPackageVerifier = new PackageSignatureVerifier(SignatureVerificationProviderFactory.GetSignatureVerificationProviders()); var packageExtractionContext = new PackageExtractionContext( PackageSaveMode.Defaultv3, PackageExtractionBehavior.XmlDocFileSaveMode, log, signedPackageVerifier, SignedPackageVerifierSettings.GetClientPolicy(Settings, log)); var context = new OfflineFeedAddContext(pathToPackage, root, log, throwIfSourcePackageIsInvalid: true, throwIfPackageExistsAndInvalid: false, throwIfPackageExists: false, extractionContext: packageExtractionContext); await OfflineFeedUtility.AddPackageToSource(context, token); } }
public static async Task AddPackageToSource( OfflineFeedAddContext offlineFeedAddContext, CancellationToken token) { var packagePath = offlineFeedAddContext.PackagePath; var source = offlineFeedAddContext.Source; var logger = offlineFeedAddContext.Logger; using (var packageStream = File.OpenRead(packagePath)) { try { var packageReader = new PackageArchiveReader(packageStream, leaveStreamOpen: true); var packageIdentity = packageReader.GetIdentity(); bool isValidPackage; if (PackageExists(packageIdentity, source, out isValidPackage)) { // Package already exists. Verify if it is valid if (isValidPackage) { var message = string.Format( CultureInfo.CurrentCulture, Strings.AddPackage_PackageAlreadyExists, packageIdentity, source); if (offlineFeedAddContext.ThrowIfPackageExists) { throw new ArgumentException(message); } else { logger.LogMinimal(message); } } else { var message = string.Format(CultureInfo.CurrentCulture, Strings.AddPackage_ExistingPackageInvalid, packageIdentity, source); if (offlineFeedAddContext.ThrowIfPackageExistsAndInvalid) { throw new ArgumentException(message); } else { logger.LogWarning(message); } } } else { packageStream.Seek(0, SeekOrigin.Begin); var packageSaveMode = offlineFeedAddContext.Expand ? PackageSaveMode.Defaultv3 : PackageSaveMode.Nuspec | PackageSaveMode.Nupkg; var versionFolderPathContext = new VersionFolderPathContext( packageIdentity, source, logger, packageSaveMode: packageSaveMode, xmlDocFileSaveMode: PackageExtractionBehavior.XmlDocFileSaveMode); await PackageExtractor.InstallFromSourceAsync( stream => packageStream.CopyToAsync(stream), versionFolderPathContext, token); var message = string.Format( CultureInfo.CurrentCulture, Strings.AddPackage_SuccessfullyAdded, packagePath, source); logger.LogMinimal(message); } } // Mono will throw ArchiveException when package is invalid. // Reading Nuspec in invalid package on Mono will get PackagingException catch (Exception ex) when(ex is InvalidDataException || (RuntimeEnvironmentHelper.IsMono && (ex.GetType().FullName.Equals("SharpCompress.Common.ArchiveException") || ex is PackagingException))) { var message = string.Format( CultureInfo.CurrentCulture, Strings.NupkgPath_Invalid, packagePath); if (offlineFeedAddContext.ThrowIfSourcePackageIsInvalid) { throw new ArgumentException(message); } else { logger.LogWarning(message); } } } }
public static async Task AddPackageToSource( OfflineFeedAddContext offlineFeedAddContext, CancellationToken token) { if (offlineFeedAddContext == null) { throw new ArgumentNullException(nameof(offlineFeedAddContext)); } token.ThrowIfCancellationRequested(); var packagePath = offlineFeedAddContext.PackagePath; var source = offlineFeedAddContext.Source; var logger = offlineFeedAddContext.Logger; using (var packageStream = File.OpenRead(packagePath)) { try { var packageReader = new PackageArchiveReader(packageStream, leaveStreamOpen: true); var packageIdentity = packageReader.GetIdentity(); bool isValidPackage; if (PackageExists(packageIdentity, source, out isValidPackage)) { // Package already exists. Verify if it is valid if (isValidPackage) { var message = string.Format( CultureInfo.CurrentCulture, Strings.AddPackage_PackageAlreadyExists, packageIdentity, source); if (offlineFeedAddContext.ThrowIfPackageExists) { throw new ArgumentException(message); } else { logger.LogMinimal(message); } } else { var message = string.Format(CultureInfo.CurrentCulture, Strings.AddPackage_ExistingPackageInvalid, packageIdentity, source); if (offlineFeedAddContext.ThrowIfPackageExistsAndInvalid) { throw new ArgumentException(message); } else { logger.LogWarning(message); } } } else { var packageSaveMode = offlineFeedAddContext.Expand ? PackageSaveMode.Defaultv3 : PackageSaveMode.Nuspec | PackageSaveMode.Nupkg; var signedPackageVerifier = new PackageSignatureVerifier( SignatureVerificationProviderFactory.GetSignatureVerificationProviders(), SignedPackageVerifierSettings.Default); var packageExtractionContext = new PackageExtractionContext( packageSaveMode, PackageExtractionBehavior.XmlDocFileSaveMode, logger, signedPackageVerifier); var versionFolderPathResolver = new VersionFolderPathResolver(source); using (var packageDownloader = new LocalPackageArchiveDownloader( packagePath, packageIdentity, logger)) { // Set Empty parentId here. await PackageExtractor.InstallFromSourceAsync( packageIdentity, packageDownloader, versionFolderPathResolver, packageExtractionContext, token, Guid.Empty); } var message = string.Format( CultureInfo.CurrentCulture, Strings.AddPackage_SuccessfullyAdded, packagePath, source); logger.LogMinimal(message); } } // Mono will throw ArchiveException when package is invalid. // Reading Nuspec in invalid package on Mono will get PackagingException catch (Exception ex) when(ex is InvalidDataException || (RuntimeEnvironmentHelper.IsMono && (ex.GetType().FullName.Equals("SharpCompress.Common.ArchiveException") || ex is PackagingException))) { var message = string.Format( CultureInfo.CurrentCulture, Strings.NupkgPath_Invalid, packagePath); if (offlineFeedAddContext.ThrowIfSourcePackageIsInvalid) { throw new ArgumentException(message); } else { logger.LogWarning(message); } } } }
public static async Task AddPackageToSource( OfflineFeedAddContext offlineFeedAddContext, CancellationToken token) { var packagePath = offlineFeedAddContext.PackagePath; var source = offlineFeedAddContext.Source; var logger = offlineFeedAddContext.Logger; using (var packageStream = File.OpenRead(packagePath)) { try { var packageReader = new PackageArchiveReader(packageStream, leaveStreamOpen: true); var packageIdentity = packageReader.GetIdentity(); bool isValidPackage; if (PackageExists(packageIdentity, source, out isValidPackage)) { // Package already exists. Verify if it is valid if (isValidPackage) { var message = string.Format( CultureInfo.CurrentCulture, Strings.AddPackage_PackageAlreadyExists, packageIdentity, source); if (offlineFeedAddContext.ThrowIfPackageExists) { throw new ArgumentException(message); } else { logger.LogMinimal(message); } } else { var message = string.Format(CultureInfo.CurrentCulture, Strings.AddPackage_ExistingPackageInvalid, packageIdentity, source); if (offlineFeedAddContext.ThrowIfPackageExistsAndInvalid) { throw new ArgumentException(message); } else { logger.LogWarning(message); } } } else { packageStream.Seek(0, SeekOrigin.Begin); var packageSaveMode = offlineFeedAddContext.Expand ? PackageSaveMode.Defaultv3 : PackageSaveMode.Nuspec | PackageSaveMode.Nupkg; var versionFolderPathContext = new VersionFolderPathContext( packageIdentity, source, logger, fixNuspecIdCasing: false, packageSaveMode: packageSaveMode, normalizeFileNames: true, xmlDocFileSaveMode: PackageExtractionBehavior.XmlDocFileSaveMode); await PackageExtractor.InstallFromSourceAsync( stream => packageStream.CopyToAsync(stream), versionFolderPathContext, token); var message = string.Format( CultureInfo.CurrentCulture, Strings.AddPackage_SuccessfullyAdded, packagePath, source); logger.LogMinimal(message); } } catch (InvalidDataException) { var message = string.Format( CultureInfo.CurrentCulture, Strings.NupkgPath_Invalid, packagePath); if (offlineFeedAddContext.ThrowIfSourcePackageIsInvalid) { throw new ArgumentException(message); } else { logger.LogWarning(message); } } } }