mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-14 02:44:52 +08:00
#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:
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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,43 +103,54 @@ 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 };
|
|
||||||
var projectManager = new ProjectManager(
|
|
||||||
sourcePackageRepository,
|
|
||||||
new DefaultPackagePathResolver(installedPackagesPath),
|
|
||||||
project,
|
|
||||||
new ExtensionReferenceRepository(project, sourcePackageRepository, _extensionManager)
|
|
||||||
) { Logger = logger };
|
|
||||||
|
|
||||||
// add the package to the project
|
try {
|
||||||
projectManager.RemovePackageReference(packageId);
|
var project = new FileBasedProjectSystem(applicationPath) {Logger = logger};
|
||||||
|
var projectManager = new ProjectManager(
|
||||||
|
sourcePackageRepository,
|
||||||
|
new DefaultPackagePathResolver(installedPackagesPath),
|
||||||
|
project,
|
||||||
|
new ExtensionReferenceRepository(project, sourcePackageRepository, _extensionManager)
|
||||||
|
) {Logger = logger};
|
||||||
|
|
||||||
var packageManager = new NuGetPackageManager(
|
// add the package to the project
|
||||||
sourcePackageRepository,
|
projectManager.RemovePackageReference(packageId);
|
||||||
new DefaultPackagePathResolver(applicationPath),
|
|
||||||
new PhysicalFileSystem(installedPackagesPath) { Logger = logger }
|
|
||||||
) { Logger = logger };
|
|
||||||
|
|
||||||
packageManager.UninstallPackage(packageId);
|
|
||||||
} else {
|
|
||||||
// otherwise delete the folder
|
|
||||||
|
|
||||||
string extensionPath = packageId.StartsWith(PackagingSourceManager.ThemesPrefix)
|
|
||||||
? "~/Themes/" + packageId.Substring(PackagingSourceManager.ThemesPrefix.Length)
|
|
||||||
: "~/Modules/" + packageId.Substring(PackagingSourceManager.ThemesPrefix.Length);
|
|
||||||
|
|
||||||
string extensionFullPath = HostingEnvironment.MapPath(extensionPath);
|
|
||||||
|
|
||||||
if (Directory.Exists(extensionFullPath)) {
|
|
||||||
Directory.Delete(extensionFullPath, true);
|
|
||||||
}
|
}
|
||||||
else {
|
catch {
|
||||||
throw new OrchardException(T("Package not found: ", packageId));
|
// Uninstalling the package at the solution level failed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
var packageManager = new NuGetPackageManager(
|
||||||
|
sourcePackageRepository,
|
||||||
|
new DefaultPackagePathResolver(applicationPath),
|
||||||
|
new PhysicalFileSystem(installedPackagesPath) {Logger = logger}
|
||||||
|
) {Logger = logger};
|
||||||
|
|
||||||
|
packageManager.UninstallPackage(packageId);
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
// Package doesnt exist anymore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure folder is deleted (themes scenario where there is no project)
|
||||||
|
string extensionPath = packageId.StartsWith(PackagingSourceManager.ThemesPrefix)
|
||||||
|
? "~/Themes/" + packageId.Substring(PackagingSourceManager.ThemesPrefix.Length)
|
||||||
|
: "~/Modules/" + packageId.Substring(PackagingSourceManager.ThemesPrefix.Length);
|
||||||
|
|
||||||
|
string extensionFullPath = HostingEnvironment.MapPath(extensionPath);
|
||||||
|
|
||||||
|
if (Directory.Exists(extensionFullPath)) {
|
||||||
|
Directory.Delete(extensionFullPath, true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw new OrchardException(T("Package not found: ", packageId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user