Better error message when package installation failed

Work Item: 17194

--HG--
branch : 1.x
This commit is contained in:
Renaud Paquay
2011-01-11 20:04:12 -08:00
parent de42a2d4a9
commit bc5ec3e014
3 changed files with 52 additions and 16 deletions

View File

@@ -80,7 +80,8 @@ namespace Orchard.Packaging.Controllers {
if (!url.StartsWith("http")) {
ModelState.AddModelError("Url", T("The Url is not valid").Text);
}
} else if (String.IsNullOrWhiteSpace(url)) {
}
else if (String.IsNullOrWhiteSpace(url)) {
ModelState.AddModelError("Url", T("Url is required").Text);
}
@@ -97,7 +98,8 @@ namespace Orchard.Packaging.Controllers {
if (String.IsNullOrWhiteSpace(title)) {
ModelState.AddModelError("Url", T("The feed has no title.").Text);
}
} catch {
}
catch {
ModelState.AddModelError("Url", T("The url of the feed or its content is not valid.").Text);
}
@@ -108,7 +110,8 @@ namespace Orchard.Packaging.Controllers {
_notifier.Information(T("The feed has been added successfully."));
return RedirectToAction("Sources");
} catch (Exception exception) {
}
catch (Exception exception) {
_notifier.Error(T("Adding feed failed: {0}", exception.Message));
return View(new PackagingAddSourceViewModel { Url = url });
}
@@ -138,7 +141,8 @@ namespace Orchard.Packaging.Controllers {
try {
var sourceExtensions = getList(source);
extensions = extensions == null ? sourceExtensions : extensions.Concat(sourceExtensions);
} catch (Exception ex) {
}
catch (Exception ex) {
Logger.Error(ex, "Error loading extensions from gallery source '{0}'. {1}.", source.FeedTitle, ex.Message);
_notifier.Error(T("Error loading extensions from gallery source '{0}'. {1}.", source.FeedTitle, ex.Message));
}
@@ -161,7 +165,15 @@ namespace Orchard.Packaging.Controllers {
return HttpNotFound();
}
try {
_packageManager.Install(packageId, version, source.FeedUrl, HostingEnvironment.MapPath("~/"));
}
catch (Exception exception) {
_notifier.Error(T("Package installation failed."));
for (Exception scan = exception; scan != null; scan = scan.InnerException) {
_notifier.Error(T("{0}", scan.Message));
}
}
return RedirectToAction(redirectTo == "Themes" ? "Themes" : "Modules");
}

View File

@@ -98,16 +98,15 @@ namespace Orchard.Packaging.Controllers {
file.SaveAs(fullFileName);
PackageInfo info = _packageManager.Install(new ZipPackage(fullFileName), _appDataFolderRoot.RootFolder, HostingEnvironment.MapPath("~/"));
System.IO.File.Delete(fullFileName);
_notifier.Information(T("Installed package \"{0}\", version {1} of type \"{2}\" at location \"{3}\"",
info.ExtensionName, info.ExtensionVersion, info.ExtensionType, info.ExtensionPath));
}
}
return this.RedirectLocal(returnUrl, "~/");
} catch (Exception exception) {
}
catch (Exception exception) {
_notifier.Error(T("Package uploading and installation failed."));
for (Exception scan = exception; scan != null; scan = scan.InnerException) {
_notifier.Error(T("Uploading module package failed: {0}", exception.Message));
_notifier.Error(T("{0}", scan.Message));
}
return Redirect(retryUrl);
@@ -124,7 +123,8 @@ namespace Orchard.Packaging.Controllers {
_notifier.Information(T("Uninstalled package \"{0}\"", id));
return this.RedirectLocal(returnUrl, "~/");
} catch (Exception exception) {
}
catch (Exception exception) {
for (Exception scan = exception; scan != null; scan = scan.InnerException) {
_notifier.Error(T("Uninstall failed: {0}", exception.Message));
}

View File

@@ -1,7 +1,11 @@
using System;
using System.Linq;
using System.Web.Hosting;
using NuGet;
using Orchard.Environment.Extensions;
using Orchard.Environment.Extensions.Models;
using Orchard.Localization;
using Orchard.UI.Notify;
namespace Orchard.Packaging.Services {
[OrchardFeature("PackagingServices")]
@@ -9,14 +13,35 @@ namespace Orchard.Packaging.Services {
private readonly IExtensionManager _extensionManager;
private readonly IPackageBuilder _packageBuilder;
private readonly IPackageInstaller _packageExpander;
private readonly INotifier _notifier;
public PackageManager(
IExtensionManager extensionManager,
IPackageBuilder packageBuilder,
IPackageInstaller packageExpander) {
IPackageInstaller packageExpander,
INotifier notifier) {
_extensionManager = extensionManager;
_packageBuilder = packageBuilder;
_packageExpander = packageExpander;
_notifier = notifier;
T = NullLocalizer.Instance;
}
public Localizer T { get; set; }
private PackageInfo DoInstall(Func<PackageInfo> installer) {
try {
return installer();
}
catch (Exception exception) {
var message = T(
"There was an error installing the requested package. " +
"This can happen if the server does not have write access to the '~/Modules' or '~/Themes' folder of the web site. " +
"If the site is running in shared hosted environement, adding write access to these folders sometimes needs to be done manually through the Hoster control panel. " +
"Once Themes and Modules have been installed, it is recommended to remove write access to these folders.");
throw new OrchardException(message, exception);
}
}
#region IPackageManager Members
@@ -34,13 +59,12 @@ namespace Orchard.Packaging.Services {
};
}
public PackageInfo Install(IPackage package, string location, string applicationPath)
{
return _packageExpander.Install(package, location, applicationPath);
public PackageInfo Install(IPackage package, string location, string applicationPath) {
return DoInstall(() => _packageExpander.Install(package, location, applicationPath));
}
public PackageInfo Install(string packageId, string version, string location, string applicationPath) {
return _packageExpander.Install(packageId, version, location, applicationPath);
return DoInstall(() => _packageExpander.Install(packageId, version, location, applicationPath));
}
public void Uninstall(string packageId, string applicationPath) {