From eaa7f6cfcc5b7abdd2ae827978cd116a31495e69 Mon Sep 17 00:00:00 2001
From: Dane Powell <git@danepowell.com>
Date: Thu, 24 Mar 2016 17:28:39 -0500
Subject: [PATCH] Issue #2693831 by Dane Powell: Added features-revert-all
 drush command.

---
 drush/features.drush.inc | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/drush/features.drush.inc b/drush/features.drush.inc
index 00cde35..529bdad 100644
--- a/drush/features.drush.inc
+++ b/drush/features.drush.inc
@@ -46,6 +46,14 @@ function features_drush_command() {
     'aliases' => array('fl'),
   );
 
+  $items['features-revert-all'] = array(
+    'description' => 'Reverts all installed features.',
+    'examples' => array(
+      "drush features-list-packages" => 'Display a list of all existing featurea and packages available to be generated.',
+    ),
+    'aliases' => array('fra'),
+  );
+
   $items['features-export'] = array(
     'description' => "Export the configuration on your site into a custom module.",
     'arguments' => array(
@@ -248,6 +256,32 @@ function drush_features_list_packages($package_name = '') {
 }
 
 /**
+ * Drush command callback for features-revert-all.
+ *
+ * @return bool
+ */
+function drush_features_revert_all() {
+  _drush_features_options();
+  /** @var \Drupal\features\FeaturesManagerInterface $manager */
+  $manager = \Drupal::service('features.manager');
+  $packages = $manager->getPackages();
+
+  $packages = $manager->filterPackages($packages);
+  $result = array();
+
+  foreach ($packages as $package) {
+    $overrides = $manager->detectOverrides($package);
+
+    if ($package->getStatus() == FeaturesManagerInterface::STATUS_INSTALLED) {
+      drush_print(dt('Reverting @module...', array('@module' => $package->getName())));
+      drush_features_import($package->getMachineName());
+    }
+  }
+
+  return TRUE;
+}
+
+/**
  * Provides Drush command callback for features-export.
  */
 function drush_features_export($packages = NULL) {
-- 
2.5.0

