From f2375457166c60b520af6379b36d00c842bbc3b1 Mon Sep 17 00:00:00 2001 From: Andre Rodrigues Date: Fri, 7 Jan 2011 09:58:17 -0800 Subject: [PATCH] Improving package uninstall help. Extracting BuildPackageId method. Cleaning up code for uninstall. Fixing out of sync help. --HG-- branch : 1.x --- .../Commands/PackagingCommands.cs | 7 +-- .../Services/ExtensionReferenceRepository.cs | 2 +- .../Services/PackageBuilder.cs | 9 +++- .../Services/PackageInstaller.cs | 46 ++++++++----------- 4 files changed, 30 insertions(+), 34 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Commands/PackagingCommands.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Commands/PackagingCommands.cs index 50c69ff98..43f6ad9a8 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Commands/PackagingCommands.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Commands/PackagingCommands.cs @@ -28,9 +28,9 @@ namespace Orchard.Packaging.Commands { Create a package for the extension (an extension being a module or a theme). The package will be output at the specified. - The default filename is Orchard.[Module|Theme]...nupkg. + The default filename is Orchard.[Modules|Themes]...nupkg. For example, ""package create SampleModule c:\temp"" will create the package - ""c:\temp\Orchard.Module.SampleModule.1.0.0.nupkg"".")] + ""c:\temp\Orchard.Modules.SampleModule.1.0.0.nupkg"".")] [CommandName("package create")] public void CreatePackage(string extensionName, string path) { var packageData = _packageManager.Harvest(extensionName); @@ -76,7 +76,8 @@ namespace Orchard.Packaging.Commands { } } - [CommandHelp("package uninstall \r\n\t" + "Uninstall a module or a theme.")] + [CommandHelp(@"package uninstall Uninstall a module or a theme. The should take the format Orchard.[Modules|Themes].. For example, ""package uninstall Orchard.Modules.SampleModule"" will uninstall the Module under the ""~/Modules/SampleModule"" directory and + ""package uninstall Orchard.Themes.SampleTheme"" will uninstall the Theme under the ""~/Themes/SampleTheme"" directory.")] [CommandName("package uninstall")] public void UninstallPackage(string packageId) { try { diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Services/ExtensionReferenceRepository.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Services/ExtensionReferenceRepository.cs index bce7ea1f5..1ea3a9f44 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Services/ExtensionReferenceRepository.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Services/ExtensionReferenceRepository.cs @@ -39,7 +39,7 @@ namespace Orchard.Packaging.Services { public override IQueryable GetPackages() { IEnumerable packages = from extension in _extensionManager.AvailableExtensions() - let id = "Orchard." + extension.ExtensionType + "." + extension.Id + let id = PackageBuilder.BuildPackageId(extension.Id, extension.ExtensionType) let version = Version.Parse(extension.Version) let package = SourceRepository.FindPackage(id, version) where package != null diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageBuilder.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageBuilder.cs index 3518b3a2f..9dcc5e7c7 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageBuilder.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageBuilder.cs @@ -20,6 +20,7 @@ namespace Orchard.Packaging.Services { private static readonly string[] _ignoredThemeExtensions = new[] { "obj", "pdb", "exclude" }; + private static readonly string[] _ignoredThemePaths = new[] { "/obj/" }; @@ -61,9 +62,13 @@ namespace Orchard.Packaging.Services { return context.Stream; } - + + public static string BuildPackageId(string extensionName, string extensionType) { + return PackagingSourceManager.GetExtensionPrefix(extensionType) + extensionName; + } + private static void SetCoreProperties(CreateContext context, ExtensionDescriptor extensionDescriptor) { - context.Builder.Id = PackagingSourceManager.GetExtensionPrefix(extensionDescriptor.ExtensionType) + extensionDescriptor.Id; + context.Builder.Id = BuildPackageId(extensionDescriptor.Id, extensionDescriptor.ExtensionType); context.Builder.Version = new Version(extensionDescriptor.Version); context.Builder.Title = extensionDescriptor.Name ?? extensionDescriptor.Id; context.Builder.Description = extensionDescriptor.Description; diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageInstaller.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageInstaller.cs index 04cf93569..454775b34 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageInstaller.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageInstaller.cs @@ -99,15 +99,27 @@ namespace Orchard.Packaging.Services { } public void Uninstall(string packageId, string applicationPath) { - bool removed = false; - - // this logger is used to render NuGet's log on the notifier - var logger = new NugetLogger(_notifier); - string solutionPath; + string extensionFullPath = string.Empty; + + if (packageId.StartsWith(PackagingSourceManager.ThemesPrefix)) { + extensionFullPath = HostingEnvironment.MapPath("~/Themes/" + packageId.Substring(PackagingSourceManager.ThemesPrefix.Length)); + } else if (packageId.StartsWith(PackagingSourceManager.ModulesPrefix)) { + extensionFullPath = HostingEnvironment.MapPath("~/Modules/" + packageId.Substring(PackagingSourceManager.ModulesPrefix.Length)); + } + + if (string.IsNullOrEmpty(extensionFullPath) || + !Directory.Exists(extensionFullPath)) { + + throw new OrchardException(T("Package not found: {0}", packageId)); + } // if we can access the parent directory, and the solution is inside, NuGet-uninstall the package here if (TryGetSolutionPath(applicationPath, out solutionPath)) { + + // this logger is used to render NuGet's log on the notifier + var logger = new NugetLogger(_notifier); + var installedPackagesPath = Path.Combine(solutionPath, PackagesPath); var sourcePackageRepository = new LocalPackageRepository(installedPackagesPath); @@ -135,7 +147,6 @@ namespace Orchard.Packaging.Services { ) {Logger = logger}; packageManager.UninstallPackage(packageId); - removed = true; } catch { // Package doesnt exist anymore @@ -143,29 +154,8 @@ namespace Orchard.Packaging.Services { } // If the package was not installed through nuget we still need to try to uninstall it by removing its directory - - // Remove theme if found - string extensionFullPath = packageId.StartsWith(PackagingSourceManager.ThemesPrefix) - ? HostingEnvironment.MapPath("~/Themes/" + packageId.Substring(PackagingSourceManager.ThemesPrefix.Length)) - : HostingEnvironment.MapPath("~/Themes/" + packageId); - - if (Directory.Exists(extensionFullPath)) { + if(Directory.Exists(extensionFullPath)) { Directory.Delete(extensionFullPath, true); - removed = true; - } - - // Remove module if found - extensionFullPath = packageId.StartsWith(PackagingSourceManager.ModulesPrefix) - ? HostingEnvironment.MapPath("~/Modules/" + packageId.Substring(PackagingSourceManager.ModulesPrefix.Length)) - : HostingEnvironment.MapPath("~/Modules/" + packageId); - - if (Directory.Exists(extensionFullPath)) { - Directory.Delete(extensionFullPath, true); - removed = true; - } - - if (!removed) { - throw new OrchardException(T("Package not found: {0}", packageId)); } }