mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Adding package uninstall command
--HG-- branch : nuget
This commit is contained in:
@@ -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();
|
||||||
|
@@ -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;
|
||||||
|
@@ -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" />
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user