Browse Source

Making shells return help if a ConsoleException is catched, like when passing bad parameters

Jose Lorenzo Rodriguez 15 years ago
parent
commit
fa1d7da56e
1 changed files with 22 additions and 17 deletions
  1. 22 17
      lib/Cake/Console/ShellDispatcher.php

+ 22 - 17
lib/Cake/Console/ShellDispatcher.php

@@ -171,25 +171,30 @@ class ShellDispatcher {
 			$command = $this->args[0];
 		}
 
-		if ($Shell instanceof Shell) {
-			$Shell->initialize();
-			$Shell->loadTasks();
-			return $Shell->runCommand($command, $this->args);
-		}
-		$methods = array_diff(get_class_methods($Shell), get_class_methods('Shell'));
-		$added = in_array($command, $methods);
-		$private = $command[0] == '_' && method_exists($Shell, $command);
-
-		if (!$private) {
-			if ($added) {
-				$this->shiftArgs();
-				$Shell->startup();
-				return $Shell->{$command}();
+		try {
+			if ($Shell instanceof Shell) {
+				$Shell->initialize();
+				$Shell->loadTasks();
+				return $Shell->runCommand($command, $this->args);
 			}
-			if (method_exists($Shell, 'main')) {
-				$Shell->startup();
-				return $Shell->main();
+			$methods = array_diff(get_class_methods($Shell), get_class_methods('Shell'));
+			$added = in_array($command, $methods);
+			$private = $command[0] == '_' && method_exists($Shell, $command);
+
+			if (!$private) {
+				if ($added) {
+					$this->shiftArgs();
+					$Shell->startup();
+					return $Shell->{$command}();
+				}
+				if (method_exists($Shell, 'main')) {
+					$Shell->startup();
+					return $Shell->main();
+				}
 			}
+		} catch(ConsoleException $e) {
+			$this->help();
+			$this->_stop(1);
 		}
 		throw new MissingShellMethodException(array('shell' => $shell, 'method' => $arg));
 	}