Browse Source

Workaround for NuGet Core not deleting the .addin file of uninstalled package.

pull/32/head
Andreas Weizel 13 years ago
parent
commit
3aec8db722
  1. 11
      src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetPackageManager.cs
  2. 1
      src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/INuGetPackageManager.cs
  3. 23
      src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs
  4. 4
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs

11
src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetPackageManager.cs

@ -73,5 +73,16 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes
get; get;
set; set;
} }
public string LocalPackageDirectory
{
get;
set;
}
public string GetLocalPackageDirectory(IPackage package)
{
return LocalPackageDirectory;
}
} }
} }

1
src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/INuGetPackageManager.cs

@ -19,5 +19,6 @@ namespace ICSharpCode.AddInManager2.Model
} }
IPackageOperationResolver CreateInstallPackageOperationResolver(bool allowPrereleaseVersions); IPackageOperationResolver CreateInstallPackageOperationResolver(bool allowPrereleaseVersions);
void ExecuteOperation(PackageOperation operation); void ExecuteOperation(PackageOperation operation);
string GetLocalPackageDirectory(IPackage package);
} }
} }

23
src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs

@ -96,6 +96,11 @@ namespace ICSharpCode.AddInManager2.Model
_packageManager.ExecuteOperation(operation); _packageManager.ExecuteOperation(operation);
} }
public string GetLocalPackageDirectory(IPackage package)
{
return Path.Combine(PackageOutputDirectory, package.Id + "." + package.Version.Version.ToString());
}
private IPackageManager EnsurePackageManagerInstance() private IPackageManager EnsurePackageManagerInstance()
{ {
if (_packageManager != null) if (_packageManager != null)
@ -110,7 +115,7 @@ namespace ICSharpCode.AddInManager2.Model
} }
// Create new package manager instance // Create new package manager instance
_packageManager = new NuGetPackageManagerImplementation(_repositories.AllRegistered, _packageOutputDirectory); _packageManager = new NuGetPackageManagerImplementation(_repositories.AllRegistered, _packageOutputDirectory, this);
_packageManager.PackageInstalled += _packageEvents_NuGetPackageInstalled; _packageManager.PackageInstalled += _packageEvents_NuGetPackageInstalled;
_packageManager.PackageUninstalled += _packageEvents_NuGetPackageUninstalled; _packageManager.PackageUninstalled += _packageEvents_NuGetPackageUninstalled;
return _packageManager; return _packageManager;
@ -136,9 +141,12 @@ namespace ICSharpCode.AddInManager2.Model
private class NuGetPackageManagerImplementation : PackageManager private class NuGetPackageManagerImplementation : PackageManager
{ {
public NuGetPackageManagerImplementation(IPackageRepository sourceRepository, string path) private INuGetPackageManager _internalPackageManager;
public NuGetPackageManagerImplementation(IPackageRepository sourceRepository, string path, INuGetPackageManager internalPackageManager)
: base(sourceRepository, path) : base(sourceRepository, path)
{ {
_internalPackageManager = internalPackageManager;
} }
public void ExecuteOperation(PackageOperation operation) public void ExecuteOperation(PackageOperation operation)
@ -146,6 +154,17 @@ namespace ICSharpCode.AddInManager2.Model
// Allow to call this method from outside of the class // Allow to call this method from outside of the class
base.Execute(operation); base.Execute(operation);
} }
public override void UninstallPackage(IPackage package, bool forceRemove, bool removeDependencies)
{
base.UninstallPackage(package, forceRemove, removeDependencies);
string localPackageDirectory = _internalPackageManager.GetLocalPackageDirectory(package);
if (Directory.Exists(localPackageDirectory))
{
// Directory still exists after removing the package -> try to delete it explicitly
Directory.Delete(localPackageDirectory, true);
}
}
} }
} }
} }

4
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs

@ -411,9 +411,7 @@ namespace ICSharpCode.AddInManager2.ViewModel
if (IsPackageInstalled()) if (IsPackageInstalled())
{ {
// Package is already installed, but seems to be not registered as SD AddIn // Package is already installed, but seems to be not registered as SD AddIn
string assumedPackageOutputDir = AddInManager.Setup.InstallAddIn(_package, AddInManager.NuGet.GetLocalPackageDirectory(_package));
Path.Combine(AddInManager.NuGet.PackageOutputDirectory, _package.Id + "." + _package.Version.Version.ToString());
AddInManager.Setup.InstallAddIn(_package, assumedPackageOutputDir);
} }
else else
{ {

Loading…
Cancel
Save