public void Execute(NewPackageAction action, IExecutionContext context, CancellationToken cancelToken) { var nugetAware = action.Target.TryGetFeature <NuGetAwareProject>(); if (nugetAware != null) { var task = nugetAware.UninstallPackage( action.PackageIdentity, context, cancelToken); task.Wait(); return; } // Get the project manager var projectManager = action.Target.GetRequiredFeature <IProjectManager>(); // Get the package out of the project manager var package = projectManager.LocalRepository.FindPackage( action.PackageIdentity.Id, CoreConverters.SafeToSemanticVersion(action.PackageIdentity.Version)); Debug.Assert(package != null); // Add the package to the project projectManager.Logger = new ShimLogger(context); projectManager.Project.Logger = projectManager.Logger; projectManager.Execute(new PackageOperation( package, NuGet.PackageAction.Uninstall)); // Run uninstall.ps1 if present ActionHandlerHelpers.ExecutePowerShellScriptIfPresent( "uninstall.ps1", action.Target, package, projectManager.PackageManager.PathResolver.GetInstallPath(package), context); }
public void Execute(NewPackageAction action, IExecutionContext context, CancellationToken cancelToken) { string downloadUriStr = action.Package[Properties.PackageContent].ToString(); Uri downloadUri; if (String.IsNullOrEmpty(downloadUriStr)) { throw new InvalidOperationException(String.Format( CultureInfo.CurrentCulture, Strings.DownloadActionHandler_NoDownloadUrl, action.PackageIdentity)); } else if (!Uri.TryCreate(downloadUriStr, UriKind.Absolute, out downloadUri)) { throw new InvalidOperationException(String.Format( CultureInfo.CurrentCulture, Strings.DownloadActionHandler_InvalidDownloadUrl, action.PackageIdentity, downloadUriStr)); } // Get required features from the target var packageManager = action.Target.GetRequiredFeature <IPackageManager>(); var packageCache = action.Target.TryGetFeature <IPackageCacheRepository>(); // Load the package IPackage package = null; if (downloadUri.IsFile) { // To keep feature backward-compatbility. The .nupkg file on disk may have a shorter name than semantic version. // For example: TestPackage 2.0.0.0 may be saved as TestPackage.2.0.nupkg on disk. SemanticVersion originalVersion = new SemanticVersion(action.PackageIdentity.Version.ToString()); IEnumerable <SemanticVersion> possibleVersions = VersionUtility.GetPossibleVersions(originalVersion); foreach (SemanticVersion version in possibleVersions) { // Get other alternative download path string downloadPath = downloadUri.LocalPath.Replace(originalVersion.ToString(), version.ToString()); try { package = new OptimizedZipPackage(downloadPath); break; } catch (ArgumentException) { } } // Verify the version of OptimizedZipPackage is expected. if (package == null || package.Version != originalVersion) { throw new InvalidOperationException( String.Format(CultureInfo.CurrentCulture, NuGetResources.FileDoesNotExit, downloadUri.LocalPath)); } } else { package = GetPackage(packageCache, action.PackageIdentity, downloadUri); } NuGetTraceSources.ActionExecutor.Verbose( "download/loadedpackage", "[{0}] Loaded package.", action.PackageIdentity); // Now convert the action and use the V2 Execution logic since we // have a true V2 IPackage (either from the cache or an in-memory ZipPackage). packageManager.Logger = new ShimLogger(context); packageManager.Execute(new PackageOperation( package, NuGet.PackageAction.Install)); // Run init.ps1 if present. Init is run WITHOUT specifying a target framework. ActionHandlerHelpers.ExecutePowerShellScriptIfPresent( "init.ps1", action.Target, package, packageManager.PathResolver.GetInstallPath(package), context); }
public void Execute(NewPackageAction action, IExecutionContext context, CancellationToken cancelToken) { var nugetAware = action.Target.TryGetFeature <NuGetAwareProject>(); if (nugetAware != null) { // TODO: this is a hack to get the supported frameworks. Since action.Package // does not contain this info for now, we have to download the package to // get this info. var packageContent = action.Package[Properties.PackageContent].ToString(); var downloadUri = new Uri(packageContent); IPackage package; if (downloadUri.IsFile) { package = new OptimizedZipPackage(packageContent); } else { var packageCache = action.Target.GetRequiredFeature <IPackageCacheRepository>(); package = DownloadActionHandler.GetPackage( packageCache, action.PackageIdentity, downloadUri); } var frameworks = package.GetSupportedFrameworks(); var task = nugetAware.InstallPackage( action.PackageIdentity, frameworks, context, cancelToken); task.Wait(); } else { // TODO: PMC - Write Disclamer Texts // TODO: Dialog & PMC - open Readme.txt // Get the package manager and project manager from the target var packageManager = action.Target.GetRequiredFeature <IPackageManager>(); var projectManager = action.Target.GetRequiredFeature <IProjectManager>(); // Get the package from the shared repository var package = packageManager.LocalRepository.FindPackage( action.PackageIdentity.Id, CoreConverters.SafeToSemanticVersion(action.PackageIdentity.Version)); Debug.Assert(package != null); // The package had better be in the local repository!! // Ping the metrics service action.Source.RecordMetric( action.ActionType, action.PackageIdentity, action.DependentPackage, action.IsUpdate, action.Target); // Add the package to the project projectManager.Logger = new ShimLogger(context); projectManager.Project.Logger = projectManager.Logger; projectManager.Execute(new PackageOperation( package, NuGet.PackageAction.Install)); // Run install.ps1 if present ActionHandlerHelpers.ExecutePowerShellScriptIfPresent( "install.ps1", action.Target, package, packageManager.PathResolver.GetInstallPath(package), context); } }