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

@@ -60,13 +60,28 @@ namespace Orchard.Packaging.Commands {
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()) {
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() {
var orchardDirectory = Directory.GetParent(OrchardWebProj);
return orchardDirectory.Parent == null ? null : orchardDirectory.Parent.FullName;

View File

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

View File

@@ -1,6 +1,3 @@
using System.IO;
using Orchard.Environment.Extensions;
namespace Orchard.Packaging.Services {
public class PackageInfo {
public string ExtensionName { get; set; }
@@ -9,7 +6,8 @@ namespace Orchard.Packaging.Services {
public string ExtensionPath { get; set; }
}
public interface IPackageExpander : IDependency {
PackageInfo ExpandPackage(string packageId, string version, string location, string solutionFolder);
public interface IPackageInstaller : IDependency {
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 {
public interface IPackageManager : IDependency {
PackageData Harvest(string extensionName);
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 {
[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;
public PackageExpander(INotifier notifier) {
public PackageInstaller(INotifier notifier) {
_notifier = notifier;
T = NullLocalizer.Instance;
}
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 projectPath = Path.Combine(solutionFolder, "Orchard.Web"); // where to install packages (in the project's folder)
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
@@ -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 {
private readonly IExtensionManager _extensionManager;
private readonly IPackageBuilder _packageBuilder;
private readonly IPackageExpander _packageExpander;
private readonly IPackageInstaller _packageExpander;
public PackageManager(
IExtensionManager extensionManager,
IPackageBuilder packageBuilder,
IPackageExpander packageExpander) {
IPackageInstaller packageExpander) {
_extensionManager = extensionManager;
_packageBuilder = packageBuilder;
_packageExpander = packageExpander;
@@ -34,9 +34,12 @@ namespace Orchard.Packaging.Services {
}
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
}
}