Browse Source

Fix installing, uninstalling and updating solution level packages.

Can now install, uninstall and update a package such as OpenCover
which is installed in the solution but not in any project.

PackageViewModel class needs to be refactored to remove the code
duplication.

Also NuGet creates the .nuget/NuGet.config file automatically for the
solution level package. However it does not remove it when the
solution level package is uninstalled which may be a problem with the
NuGet addin.
nuget-3.0-ctp
Matt Ward 11 years ago
parent
commit
3415c613af
  1. 85
      src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs

85
src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs

@ -326,7 +326,13 @@ namespace ICSharpCode.PackageManagement @@ -326,7 +326,13 @@ namespace ICSharpCode.PackageManagement
installAction.IgnoreDependencies = false;
installAction.AllowPrereleaseVersions = parent.IncludePrerelease;
GetInstallOperationsForSolutionPackage(solutionRepository, installAction, package);
var packageManager = new PackageManager(
package.Repository,
solutionRepository.PackagePathResolver,
solutionRepository.FileSystem,
solutionRepository.Repository);
GetInstallOperationsForSolutionPackage(packageManager, solutionRepository, installAction, package);
if (LicensesAccepted()) {
InstallPackageIntoSolution(solutionRepository, installAction, package);
@ -340,6 +346,7 @@ namespace ICSharpCode.PackageManagement @@ -340,6 +346,7 @@ namespace ICSharpCode.PackageManagement
}
void GetInstallOperationsForSolutionPackage(
IPackageManager packageManager,
ISolutionPackageRepository solutionRepository,
InstallPackageAction installAction,
IPackageFromRepository installPackage)
@ -350,14 +357,15 @@ namespace ICSharpCode.PackageManagement @@ -350,14 +357,15 @@ namespace ICSharpCode.PackageManagement
DependencyVersion = DependencyVersion.Lowest,
AllowPrereleaseVersions = installAction.AllowPrereleaseVersions
};
resolver.AddOperation(NuGet.PackageAction.Install, package, null);
var projectManager = new NullProjectManager(packageManager);
resolver.AddOperation(NuGet.PackageAction.Install, package, projectManager);
// var resolverFactory = new PackageOperationsResolverFactory();
// var resolver = resolverFactory.CreateInstallPackageOperationResolver(
// solutionRepository.Repository,
// installPackage.Repository,
// logger,
// installAction);
// packageOperations = resolver.ResolveOperations(installPackage);
packageOperations = resolver.ResolveActions();
}
void InstallPackageIntoSolution(
@ -365,17 +373,10 @@ namespace ICSharpCode.PackageManagement @@ -365,17 +373,10 @@ namespace ICSharpCode.PackageManagement
InstallPackageAction installAction,
IPackageFromRepository installPackage)
{
// var packageManager = new PackageManager(
// installPackage.Repository,
// solutionRepository.PackagePathResolver,
// solutionRepository.FileSystem,
// solutionRepository.Repository);
//
// packageManager.InstallPackage(
// installPackage.Id,
// installPackage.Version,
// installAction.IgnoreDependencies,
// installAction.AllowPrereleaseVersions);
var executor = new ActionExecutor {
Logger = logger
};
executor.Execute(packageOperations);
}
protected virtual void TryUpdatingPackageInSolution()
@ -386,7 +387,13 @@ namespace ICSharpCode.PackageManagement @@ -386,7 +387,13 @@ namespace ICSharpCode.PackageManagement
updateAction.Package = package;
updateAction.AllowPrereleaseVersions = parent.IncludePrerelease;
GetUpdateOperationsForSolutionPackage(solutionRepository, updateAction, package);
var packageManager = new PackageManager(
package.Repository,
solutionRepository.PackagePathResolver,
solutionRepository.FileSystem,
solutionRepository.Repository);
GetUpdateOperationsForSolutionPackage(packageManager, solutionRepository, updateAction, package);
if (LicensesAccepted()) {
UpdateSolutionLevelPackage(solutionRepository, updateAction, package);
@ -405,6 +412,7 @@ namespace ICSharpCode.PackageManagement @@ -405,6 +412,7 @@ namespace ICSharpCode.PackageManagement
}
void GetUpdateOperationsForSolutionPackage(
IPackageManager packageManager,
ISolutionPackageRepository solutionRepository,
UpdatePackageAction updateAction,
IPackageFromRepository updatePackage)
@ -415,20 +423,24 @@ namespace ICSharpCode.PackageManagement @@ -415,20 +423,24 @@ namespace ICSharpCode.PackageManagement
// updatePackage.Repository,
// logger,
// updateAction);
// packageOperations = resolver.ResolveOperations(updatePackage);
var resolver = new ActionResolver {
Logger = logger,
AllowPrereleaseVersions = updateAction.AllowPrereleaseVersions,
IgnoreDependencies = !updateAction.UpdateDependencies
};
resolver.AddOperation(NuGet.PackageAction.Update, package, new NullProjectManager(packageManager));
packageOperations = resolver.ResolveActions();
}
void UpdateSolutionLevelPackage(
ISolutionPackageRepository solutionRepository,
ISolutionPackageRepository solutionRepository,
UpdatePackageAction updateAction,
IPackageFromRepository updatePackage)
{
// var packageManager = new PackageManager(
// updatePackage.Repository,
// solutionRepository.PackagePathResolver,
// solutionRepository.FileSystem,
// solutionRepository.Repository);
//
var executor = new ActionExecutor {
Logger = logger
};
executor.Execute(packageOperations);
// packageManager.UpdatePackage(
// updatePackage.Id,
// updateAction.UpdateDependencies,
@ -514,18 +526,29 @@ namespace ICSharpCode.PackageManagement @@ -514,18 +526,29 @@ namespace ICSharpCode.PackageManagement
protected void TryUninstallingPackageFromSolution(IPackage removePackage)
{
try {
throw new NotImplementedException("UninstallingPackageFromSolution");
// var solutionPackageRepository = PackageManagementServices.Solution.CreateSolutionPackageRepository();
// var packageManager = new PackageManager(
// solutionPackageRepository.Repository,
// solutionPackageRepository.PackagePathResolver,
// solutionPackageRepository.FileSystem);
//
var solutionPackageRepository = PackageManagementServices.Solution.CreateSolutionPackageRepository();
var packageManager = new PackageManager(
solutionPackageRepository.Repository,
solutionPackageRepository.PackagePathResolver,
solutionPackageRepository.FileSystem);
var resolver = new ActionResolver {
Logger = logger,
DependencyVersion = DependencyVersion.Lowest,
ForceRemove = false,
RemoveDependencies = false
};
resolver.AddOperation(NuGet.PackageAction.Uninstall, removePackage, new NullProjectManager(packageManager));
packageOperations = resolver.ResolveActions();
var executor = new ActionExecutor {
Logger = logger
};
executor.Execute(packageOperations);
// packageManager.UninstallPackage(removePackage);
//
// solutionPackageRepository.Repository.RemovePackage(removePackage);
//
// packageManagementEvents.OnParentPackageUninstalled(removePackage);
packageManagementEvents.OnParentPackageUninstalled(removePackage);
} catch (Exception ex) {
ReportError(ex);

Loading…
Cancel
Save