From 7f9fce290bc99e0b3ca18fc9c8264fd2a6b0f475 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Mon, 13 Oct 2014 16:46:42 -0700 Subject: [PATCH] Fixing update feature functionality. This fixes an issue when for some reason a migration update step fails and the user wants to try again, but the migrations aren't executed for the selected features. --- .../Orchard.Modules/Controllers/AdminController.cs | 5 ++++- .../Orchard.Modules/Views/Admin/Features.cshtml | 1 + src/Orchard/Data/Migration/DataMigrationManager.cs | 11 ++++++----- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Modules/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Modules/Controllers/AdminController.cs index 84a178432..8806abfdf 100644 --- a/src/Orchard.Web/Modules/Orchard.Modules/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Modules/Controllers/AdminController.cs @@ -221,7 +221,10 @@ namespace Orchard.Modules.Controllers { _moduleService.DisableFeatures(enabledFeatures, force == true); break; case FeaturesBulkAction.Update: - foreach (var feature in selectedFeatures.Where(x => x.NeedsUpdate)) { + var featuresThatNeedUpdate = _dataMigrationManager.GetFeaturesThatNeedUpdate(); + var selectedFeaturesThatNeedUpdate = selectedFeatures.Where(x => featuresThatNeedUpdate.Contains(x.Descriptor.Id)); + + foreach (var feature in selectedFeaturesThatNeedUpdate) { var id = feature.Descriptor.Id; try { _reportsCoordinator.Register("Data Migration", "Upgrade " + id, "Orchard installation"); diff --git a/src/Orchard.Web/Modules/Orchard.Modules/Views/Admin/Features.cshtml b/src/Orchard.Web/Modules/Orchard.Modules/Views/Admin/Features.cshtml index c2cf94af1..75c33d277 100644 --- a/src/Orchard.Web/Modules/Orchard.Modules/Views/Admin/Features.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Modules/Views/Admin/Features.cshtml @@ -30,6 +30,7 @@ @Html.SelectOption(Model.BulkAction, FeaturesBulkAction.None, T("Choose action...").ToString()) @Html.SelectOption(Model.BulkAction, FeaturesBulkAction.Enable, T("Enable").ToString()) @Html.SelectOption(Model.BulkAction, FeaturesBulkAction.Disable, T("Disable").ToString()) + @Html.SelectOption(Model.BulkAction, FeaturesBulkAction.Update, T("Update").ToString()) @Html.SelectOption(Model.BulkAction, FeaturesBulkAction.Toggle, T("Toggle").ToString()) diff --git a/src/Orchard/Data/Migration/DataMigrationManager.cs b/src/Orchard/Data/Migration/DataMigrationManager.cs index 2ce65beab..e95fdf672 100644 --- a/src/Orchard/Data/Migration/DataMigrationManager.cs +++ b/src/Orchard/Data/Migration/DataMigrationManager.cs @@ -22,7 +22,7 @@ namespace Orchard.Data.Migration { private readonly IContentDefinitionManager _contentDefinitionManager; private readonly ITransactionManager _transactionManager; - private List _processedFeatures; + private readonly List _processedFeatures; public DataMigrationManager( IEnumerable dataMigrations, @@ -118,11 +118,11 @@ namespace Orchard.Data.Migration { while (lookupTable.ContainsKey(current)) { try { - Logger.Information("Applying migration for {0} from version {1}", feature, current); + Logger.Information("Applying migration for {0} from version {1}.", feature, current); current = (int)lookupTable[current].Invoke(migration, new object[0]); } catch (Exception ex) { - Logger.Error(ex, "An unexpected error occurred while applying migration on {0} from version {1}", feature, current); + Logger.Error(ex, "An unexpected error occurred while applying migration on {0} from version {1}.", feature, current); throw; } } @@ -139,15 +139,16 @@ namespace Orchard.Data.Migration { } } catch (Exception e) { - Logger.Error(e, "Error while running migration version {0} for {1}", current, feature); + Logger.Error(e, "Error while running migration version {0} for {1}.", current, feature); _transactionManager.Cancel(); + throw new OrchardException(T("Error while running migration version {0} for {1}.", current, feature), e); } } } public void Uninstall(string feature) { - Logger.Information("Uninstalling feature: {0}", feature); + Logger.Information("Uninstalling feature: {0}.", feature); var migrations = GetDataMigrations(feature);