Adding package uninstall command

--HG--
branch : nuget
This commit is contained in:
Sebastien Ros
2010-11-11 13:50:32 -08:00
parent d1cc42e596
commit 92e7cbef4a
7 changed files with 63 additions and 20 deletions

View File

@@ -19,7 +19,7 @@ namespace Orchard.Tests.Modules.Packaging {
public class PackageExpanderTests : ContainerTestBase { public class PackageExpanderTests : ContainerTestBase {
protected override void Register(Autofac.ContainerBuilder builder) { protected override void Register(Autofac.ContainerBuilder builder) {
builder.RegisterType<PackageBuilder>().As<IPackageBuilder>(); builder.RegisterType<PackageBuilder>().As<IPackageBuilder>();
builder.RegisterType<PackageExpander>().As<IPackageExpander>(); builder.RegisterType<PackageInstaller>().As<IPackageInstaller>();
builder.RegisterInstance<IVirtualPathProvider>(new StubVirtualPathProvider(new StubFileSystem(new Clock()))); builder.RegisterInstance<IVirtualPathProvider>(new StubVirtualPathProvider(new StubFileSystem(new Clock())));
builder.RegisterType<InMemoryWebSiteFolder>().As<IWebSiteFolder>() builder.RegisterType<InMemoryWebSiteFolder>().As<IWebSiteFolder>()
.As<InMemoryWebSiteFolder>().InstancePerLifetimeScope(); .As<InMemoryWebSiteFolder>().InstancePerLifetimeScope();

View File

@@ -60,13 +60,28 @@ namespace Orchard.Packaging.Commands {
Context.Output.WriteLine(T("The project's location is not supported")); Context.Output.WriteLine(T("The project's location is not supported"));
} }
var packageInfo = _packageManager.Install(packageId, Version, Path.GetFullPath(location), solutionFolder); _packageManager.Install(packageId, Version, Path.GetFullPath(location), solutionFolder);
foreach(var message in _notifier.List()) { foreach(var message in _notifier.List()) {
Context.Output.WriteLine(message.Message); Context.Output.WriteLine(message.Message);
} }
} }
[CommandHelp("package uninstall <packageId> \r\n\t" + "Uninstall a module or a theme.")]
[CommandName("package uninstall")]
public void UninstallPackage(string packageId) {
var solutionFolder = GetSolutionFolder();
if ( solutionFolder == null ) {
Context.Output.WriteLine(T("The project's location is not supported"));
}
_packageManager.Uninstall(packageId, solutionFolder);
foreach ( var message in _notifier.List() ) {
Context.Output.WriteLine(message.Message);
}
}
private static string GetSolutionFolder() { private static string GetSolutionFolder() {
var orchardDirectory = Directory.GetParent(OrchardWebProj); var orchardDirectory = Directory.GetParent(OrchardWebProj);
return orchardDirectory.Parent == null ? null : orchardDirectory.Parent.FullName; return orchardDirectory.Parent == null ? null : orchardDirectory.Parent.FullName;

View File

@@ -82,13 +82,13 @@
<Compile Include="Services\AtomExtensions.cs" /> <Compile Include="Services\AtomExtensions.cs" />
<Compile Include="Services\FileBaseProjectSystem.cs" /> <Compile Include="Services\FileBaseProjectSystem.cs" />
<Compile Include="Services\IPackageBuilder.cs" /> <Compile Include="Services\IPackageBuilder.cs" />
<Compile Include="Services\IPackageExpander.cs" /> <Compile Include="Services\IPackageInstaller.cs" />
<Compile Include="Services\IPackageManager.cs" /> <Compile Include="Services\IPackageManager.cs" />
<Compile Include="Services\IPackagingSourceManager.cs" /> <Compile Include="Services\IPackagingSourceManager.cs" />
<Compile Include="Services\NugetLogger.cs" /> <Compile Include="Services\NugetLogger.cs" />
<Compile Include="Services\PackageBuilder.cs" /> <Compile Include="Services\PackageBuilder.cs" />
<Compile Include="Services\PackageData.cs" /> <Compile Include="Services\PackageData.cs" />
<Compile Include="Services\PackageExpander.cs" /> <Compile Include="Services\PackageInstaller.cs" />
<Compile Include="Services\PackageManager.cs" /> <Compile Include="Services\PackageManager.cs" />
<Compile Include="Services\PackagingEntry.cs" /> <Compile Include="Services\PackagingEntry.cs" />
<Compile Include="Services\PackagingSourceManager.cs" /> <Compile Include="Services\PackagingSourceManager.cs" />

View File

@@ -1,6 +1,3 @@
using System.IO;
using Orchard.Environment.Extensions;
namespace Orchard.Packaging.Services { namespace Orchard.Packaging.Services {
public class PackageInfo { public class PackageInfo {
public string ExtensionName { get; set; } public string ExtensionName { get; set; }
@@ -9,7 +6,8 @@ namespace Orchard.Packaging.Services {
public string ExtensionPath { get; set; } public string ExtensionPath { get; set; }
} }
public interface IPackageExpander : IDependency { public interface IPackageInstaller : IDependency {
PackageInfo ExpandPackage(string packageId, string version, string location, string solutionFolder); PackageInfo Install(string packageId, string version, string location, string solutionFolder);
void Uninstall(string packageId, string solutionFolder);
} }
} }

View File

@@ -1,9 +1,7 @@
using System;
using System.IO;
namespace Orchard.Packaging.Services { namespace Orchard.Packaging.Services {
public interface IPackageManager : IDependency { public interface IPackageManager : IDependency {
PackageData Harvest(string extensionName); PackageData Harvest(string extensionName);
PackageInfo Install(string packageId, string version, string location, string solutionFolder); PackageInfo Install(string packageId, string version, string location, string solutionFolder);
void Uninstall(string packageId, string solutionFolder);
} }
} }

View File

@@ -8,20 +8,23 @@ using NuGetPackageManager = NuGet.PackageManager;
namespace Orchard.Packaging.Services { namespace Orchard.Packaging.Services {
[OrchardFeature("PackagingServices")] [OrchardFeature("PackagingServices")]
public class PackageExpander : IPackageExpander { public class PackageInstaller : IPackageInstaller {
private const string PackagesPath = "packages";
private const string ProjectPath = "Orchard.Web";
private readonly INotifier _notifier; private readonly INotifier _notifier;
public PackageExpander(INotifier notifier) { public PackageInstaller(INotifier notifier) {
_notifier = notifier; _notifier = notifier;
T = NullLocalizer.Instance; T = NullLocalizer.Instance;
} }
public Localizer T { get; set; } public Localizer T { get; set; }
public PackageInfo ExpandPackage(string packageId, string version, string location, string solutionFolder) { public PackageInfo Install(string packageId, string version, string location, string solutionFolder) {
var packagesPath = Path.Combine(solutionFolder, "packages"); // where to download/uncompress packages var packagesPath = Path.Combine(solutionFolder, PackagesPath); // where to download/uncompress packages
var projectPath = Path.Combine(solutionFolder, "Orchard.Web"); // where to install packages (in the project's folder) var projectPath = Path.Combine(solutionFolder, ProjectPath); // where to install packages (in the project's folder)
var logger = new NugetLogger(_notifier); var logger = new NugetLogger(_notifier);
// instantiates the appropriate package repository // instantiates the appropriate package repository
@@ -61,5 +64,31 @@ namespace Orchard.Packaging.Services {
}; };
} }
public void Uninstall(string packageId, string solutionFolder) {
var packagesPath = Path.Combine(solutionFolder, PackagesPath); // where to download/uncompress packages
var projectPath = Path.Combine(solutionFolder, ProjectPath); // where to install packages (in the project's folder)
var logger = new NugetLogger(_notifier);
// instantiates the appropriate package repository
var packageRepository = PackageRepositoryFactory.Default.CreateRepository(new PackageSource("Default", packagesPath));
var packageManager = new NuGetPackageManager(
packageRepository,
new DefaultPackagePathResolver(packagesPath),
new PhysicalFileSystem(packagesPath) { Logger = logger }
) { Logger = logger };
// specifically tells to ignore dependencies
packageManager.UninstallPackage(packageId);
var projectManager = new ProjectManager(
new LocalPackageRepository(packagesPath), // source repository for the package to install
new DefaultPackagePathResolver(packagesPath),
new FileBasedProjectSystem(projectPath) { Logger = logger } // the location of the project (where to copy the content files)
) { Logger = logger };
// add the package to the project
projectManager.RemovePackageReference(packageId);
}
} }
} }

View File

@@ -7,12 +7,12 @@ namespace Orchard.Packaging.Services {
public class PackageManager : IPackageManager { public class PackageManager : IPackageManager {
private readonly IExtensionManager _extensionManager; private readonly IExtensionManager _extensionManager;
private readonly IPackageBuilder _packageBuilder; private readonly IPackageBuilder _packageBuilder;
private readonly IPackageExpander _packageExpander; private readonly IPackageInstaller _packageExpander;
public PackageManager( public PackageManager(
IExtensionManager extensionManager, IExtensionManager extensionManager,
IPackageBuilder packageBuilder, IPackageBuilder packageBuilder,
IPackageExpander packageExpander) { IPackageInstaller packageExpander) {
_extensionManager = extensionManager; _extensionManager = extensionManager;
_packageBuilder = packageBuilder; _packageBuilder = packageBuilder;
_packageExpander = packageExpander; _packageExpander = packageExpander;
@@ -34,9 +34,12 @@ namespace Orchard.Packaging.Services {
} }
public PackageInfo Install(string packageId, string version, string location, string solutionFolder) { public PackageInfo Install(string packageId, string version, string location, string solutionFolder) {
return _packageExpander.ExpandPackage(packageId, version, location, solutionFolder); return _packageExpander.Install(packageId, version, location, solutionFolder);
} }
public void Uninstall(string packageId, string solutionFolder) {
_packageExpander.Uninstall(packageId, solutionFolder);
}
#endregion #endregion
} }
} }