#17169: Fixing theme uninstall under full trust and when the package in the package repository is not present.

--HG--
branch : 1.x
This commit is contained in:
andrerod
2011-01-05 18:43:41 -08:00
parent 43313886f3
commit a84b38a25e
3 changed files with 52 additions and 33 deletions

View File

@@ -4,6 +4,7 @@ using System.Web;
using System.Web.Hosting; using System.Web.Hosting;
using Orchard.Commands; using Orchard.Commands;
using Orchard.Environment.Extensions; using Orchard.Environment.Extensions;
using Orchard.Environment.Extensions.Models;
using Orchard.Packaging.Services; using Orchard.Packaging.Services;
using Orchard.UI.Notify; using Orchard.UI.Notify;
@@ -38,7 +39,11 @@ namespace Orchard.Packaging.Commands {
} }
// append "Orchard.[ExtensionType]" to prevent conflicts with other packages (e.g, TinyMce, jQuery, ...) // append "Orchard.[ExtensionType]" to prevent conflicts with other packages (e.g, TinyMce, jQuery, ...)
var filename = string.Format("Orchard.{0}.{1}.{2}.nupkg", packageData.ExtensionType, packageData.ExtensionName, packageData.ExtensionVersion); string extensionPrefix = DefaultExtensionTypes.IsTheme(packageData.ExtensionType) ?
PackagingSourceManager.ThemesPrefix :
PackagingSourceManager.ModulesPrefix;
var filename = string.Format("{0}{1}.{2}.nupkg", extensionPrefix, packageData.ExtensionName, packageData.ExtensionVersion);
if ( !Directory.Exists(path) ) { if ( !Directory.Exists(path) ) {
Directory.CreateDirectory(path); Directory.CreateDirectory(path);

View File

@@ -63,7 +63,11 @@ namespace Orchard.Packaging.Services {
} }
private static void SetCoreProperties(CreateContext context, ExtensionDescriptor extensionDescriptor) { private static void SetCoreProperties(CreateContext context, ExtensionDescriptor extensionDescriptor) {
context.Builder.Id = "Orchard." + extensionDescriptor.ExtensionType + "." + extensionDescriptor.Id; string idPrefix = DefaultExtensionTypes.IsTheme(extensionDescriptor.ExtensionType) ?
PackagingSourceManager.ThemesPrefix :
PackagingSourceManager.ModulesPrefix;
context.Builder.Id = idPrefix + extensionDescriptor.Id;
context.Builder.Version = new Version(extensionDescriptor.Version); context.Builder.Version = new Version(extensionDescriptor.Version);
context.Builder.Title = extensionDescriptor.Name ?? extensionDescriptor.Id; context.Builder.Title = extensionDescriptor.Name ?? extensionDescriptor.Id;
context.Builder.Description = extensionDescriptor.Description; context.Builder.Description = extensionDescriptor.Description;

View File

@@ -90,8 +90,7 @@ namespace Orchard.Packaging.Services {
// add the package to the project // add the package to the project
projectManager.AddPackageReference(package.Id, package.Version); projectManager.AddPackageReference(package.Id, package.Version);
return new PackageInfo return new PackageInfo {
{
ExtensionName = package.Title ?? package.Id, ExtensionName = package.Title ?? package.Id,
ExtensionVersion = package.Version.ToString(), ExtensionVersion = package.Version.ToString(),
ExtensionType = package.Id.StartsWith(PackagingSourceManager.ThemesPrefix) ? DefaultExtensionTypes.Theme : DefaultExtensionTypes.Module, ExtensionType = package.Id.StartsWith(PackagingSourceManager.ThemesPrefix) ? DefaultExtensionTypes.Theme : DefaultExtensionTypes.Module,
@@ -104,31 +103,43 @@ namespace Orchard.Packaging.Services {
var logger = new NugetLogger(_notifier); var logger = new NugetLogger(_notifier);
string solutionPath; string solutionPath;
// if we can access the parent directory, and the solution is inside, NuGet-uninstall the package here // if we can access the parent directory, and the solution is inside, NuGet-uninstall the package here
if (TryGetSolutionPath(applicationPath, out solutionPath)) { if (TryGetSolutionPath(applicationPath, out solutionPath)) {
var installedPackagesPath = Path.Combine(solutionPath, PackagesPath); var installedPackagesPath = Path.Combine(solutionPath, PackagesPath);
var sourcePackageRepository = new LocalPackageRepository(installedPackagesPath); var sourcePackageRepository = new LocalPackageRepository(installedPackagesPath);
var project = new FileBasedProjectSystem(applicationPath) { Logger = logger };
try {
var project = new FileBasedProjectSystem(applicationPath) {Logger = logger};
var projectManager = new ProjectManager( var projectManager = new ProjectManager(
sourcePackageRepository, sourcePackageRepository,
new DefaultPackagePathResolver(installedPackagesPath), new DefaultPackagePathResolver(installedPackagesPath),
project, project,
new ExtensionReferenceRepository(project, sourcePackageRepository, _extensionManager) new ExtensionReferenceRepository(project, sourcePackageRepository, _extensionManager)
) { Logger = logger }; ) {Logger = logger};
// add the package to the project // add the package to the project
projectManager.RemovePackageReference(packageId); projectManager.RemovePackageReference(packageId);
}
catch {
// Uninstalling the package at the solution level failed
}
try {
var packageManager = new NuGetPackageManager( var packageManager = new NuGetPackageManager(
sourcePackageRepository, sourcePackageRepository,
new DefaultPackagePathResolver(applicationPath), new DefaultPackagePathResolver(applicationPath),
new PhysicalFileSystem(installedPackagesPath) { Logger = logger } new PhysicalFileSystem(installedPackagesPath) {Logger = logger}
) { Logger = logger }; ) {Logger = logger};
packageManager.UninstallPackage(packageId); packageManager.UninstallPackage(packageId);
} else { }
// otherwise delete the folder catch {
// Package doesnt exist anymore
}
}
// Make sure folder is deleted (themes scenario where there is no project)
string extensionPath = packageId.StartsWith(PackagingSourceManager.ThemesPrefix) string extensionPath = packageId.StartsWith(PackagingSourceManager.ThemesPrefix)
? "~/Themes/" + packageId.Substring(PackagingSourceManager.ThemesPrefix.Length) ? "~/Themes/" + packageId.Substring(PackagingSourceManager.ThemesPrefix.Length)
: "~/Modules/" + packageId.Substring(PackagingSourceManager.ThemesPrefix.Length); : "~/Modules/" + packageId.Substring(PackagingSourceManager.ThemesPrefix.Length);
@@ -142,7 +153,6 @@ namespace Orchard.Packaging.Services {
throw new OrchardException(T("Package not found: ", packageId)); throw new OrchardException(T("Package not found: ", packageId));
} }
} }
}
private static bool TryGetSolutionPath(string applicationPath, out string parentPath) { private static bool TryGetSolutionPath(string applicationPath, out string parentPath) {
try { try {