[Pkg-owncloud-commits] [owncloud] 53/223: Add support for repair step classes

David Prévot taffit at moszumanska.debian.org
Sun Jun 22 01:54:05 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository owncloud.

commit 6fcd1af4db2d1bf8d61fa0c627c308e7257294b9
Author: Vincent Petry <pvince81 at owncloud.com>
Date:   Tue Mar 25 12:51:16 2014 +0100

    Add support for repair step classes
    
    This also makes it possible to unit test each repair step class
    individually
---
 core/command/maintenance/repair.php | 13 +++++++++++
 lib/private/repair.php              | 46 ++++++++++++++++++++++++++++++++++---
 2 files changed, 56 insertions(+), 3 deletions(-)

diff --git a/core/command/maintenance/repair.php b/core/command/maintenance/repair.php
index 310c01f..43ae647 100644
--- a/core/command/maintenance/repair.php
+++ b/core/command/maintenance/repair.php
@@ -33,9 +33,22 @@ class Repair extends Command {
 	}
 
 	protected function execute(InputInterface $input, OutputInterface $output) {
+		\OC_DB::enableCaching(false);
+		$maintenanceMode = \OC_Config::getValue('maintenance', false);
+		\OC_Config::setValue('maintenance', true);
+
 		$this->repair->listen('\OC\Repair', 'step', function ($description) use ($output) {
 			$output->writeln(' - ' . $description);
 		});
+		$this->repair->listen('\OC\Repair', 'info', function ($description) use ($output) {
+			$output->writeln('     - ' . $description);
+		});
+		$this->repair->listen('\OC\Repair', 'error', function ($description) use ($output) {
+			$output->writeln('     - ERROR: ' . $description);
+		});
+
 		$this->repair->run();
+
+		\OC_Config::setValue('maintenance', $maintenanceMode);
 	}
 }
diff --git a/lib/private/repair.php b/lib/private/repair.php
index e9de3ba..4a155c4 100644
--- a/lib/private/repair.php
+++ b/lib/private/repair.php
@@ -11,11 +11,51 @@ namespace OC;
 use OC\Hooks\BasicEmitter;
 
 class Repair extends BasicEmitter {
+	private $stepClasses;
+
 	/**
-	 * run a series of repair steps for common problems
-	 * progress can be reported by emitting \OC\Repair::step events
+	 * Creates a new repair step runner
+	 *
+	 * @param array $stepClasses optional list of step classes
+	 */
+	public function __construct($stepClasses = array()) {
+		$this->stepClasses = $stepClasses;
+	}
+
+	/**
+	 * Run a series of repair steps for common problems
 	 */
 	public function run() {
-		$this->emit('\OC\Repair', 'step', array('No repair steps configured at the moment'));
+		$steps = array();
+
+		// instantiate all classes, just to make
+		// sure they all exist before starting
+		foreach ($this->stepClasses as $className) {
+			$steps[] = new $className();
+		}
+
+		$self = $this;
+		// run each repair step
+		foreach ($steps as $step) {
+			$this->emit('\OC\Repair', 'step', array($step->getName()));
+
+			$step->listen('\OC\Repair', 'error', function ($description) use ($self) {
+				$self->emit('\OC\Repair', 'error', array($description));
+			});
+			$step->listen('\OC\Repair', 'info', function ($description) use ($self) {
+				$self->emit('\OC\Repair', 'info', array($description));
+			});
+			$step->run();
+		}
+	}
+
+	/**
+	 * Add repair step class
+	 *
+	 * @param string $className name of a repair step class
+	 */
+	public function addStep($className) {
+		$this->stepClasses[] = $className;
 	}
+
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list