From b53c7339c4842b85193d62e0051af8ea37534f61 Mon Sep 17 00:00:00 2001 From: AD7six Date: Thu, 6 Aug 2009 23:40:57 +0200 Subject: [PATCH] mend --- app/tmp/cache/persistent/empty | 0 cake/console/cake.php | 68 +++++++++++++++++++------- cake/tests/cases/console/cake.test.php | 53 ++++++++++---------- vendors/css/empty | 0 vendors/js/empty | 0 5 files changed, 78 insertions(+), 43 deletions(-) delete mode 100755 app/tmp/cache/persistent/empty delete mode 100644 vendors/css/empty delete mode 100644 vendors/js/empty diff --git a/app/tmp/cache/persistent/empty b/app/tmp/cache/persistent/empty deleted file mode 100755 index e69de29bb..000000000 diff --git a/cake/console/cake.php b/cake/console/cake.php index ab4d6c891..e3e1c85ba 100644 --- a/cake/console/cake.php +++ b/cake/console/cake.php @@ -27,6 +27,7 @@ if (!defined('E_DEPRECATED')) { define('E_DEPRECATED', 8192); } + /** * Shell dispatcher * @@ -402,6 +403,7 @@ class ShellDispatcher { $this->stderr($title . "\n" . $message . "\n"); return false; } + /** * Get shell to use, either plugin shell or application shell * @@ -606,28 +608,58 @@ class ShellDispatcher { $this->stdout("Example: -app relative/path/to/myapp or -app /absolute/path/to/myapp"); $this->stdout("\nAvailable Shells:"); - $_shells = array(); + $shellList = array(); foreach ($this->shellPaths as $path) { - if (is_dir($path)) { - $shells = App::objects('file', $path); - $path = str_replace(CAKE_CORE_INCLUDE_PATH . DS . 'cake' . DS, 'CORE' . DS, $path); - $path = str_replace(APP, 'APP' . DS, $path); - $path = str_replace(ROOT, 'ROOT', $path); - $path = rtrim($path, DS); - $this->stdout("\n " . $path . ":"); - if (empty($shells)) { - $this->stdout("\t - none"); - } else { - sort($shells); - foreach ($shells as $shell) { - - if ($shell !== 'shell.php') { - $this->stdout("\t " . str_replace('.php', '', $shell)); - } - } + if (!is_dir($path)) { + continue; + } + $shells = App::objects('file', $path); + if (empty($shells)) { + continue; + } + if (preg_match('@plugins[\\\/]([^\\\/]*)@', $path, $matches)) { + $type = Inflector::camelize($matches[1]); + } elseif (preg_match('@([^\\\/]*)[\\\/]vendors[\\\/]@', $path, $matches)) { + $type = $matches[1]; + } elseif (strpos($path, CAKE_CORE_INCLUDE_PATH . DS . 'cake') === 0) { + $type = 'CORE'; + } else { + $type = 'app'; + } + foreach ($shells as $shell) { + if ($shell !== 'shell.php') { + $shell = str_replace('.php', '', $shell); + $shellList[$shell][$type] = $type; } } } + if ($shellList) { + ksort($shellList); + if (DS === '/') { + $width = exec('tput cols') - 2; + } + if (empty($width)) { + $width = 80; + } + $columns = max(1, floor($width / 30)); + $rows = ceil(count($shellList) / $columns); + + foreach($shellList as $shell => $types) { + sort($types); + $shellList[$shell] = str_pad($shell . ' [' . implode ($types, ', ') . ']', $width / $columns); + } + $out = array_chunk($shellList, $rows); + for($i = 0; $i < $rows; $i++) { + $row = ''; + for($j = 0; $j < $columns; $j++) { + if (!isset($out[$j][$i])) { + continue; + } + $row .= $out[$j][$i]; + } + $this->stdout(" " . $row); + } + } $this->stdout("\nTo run a command, type 'cake shell_name [args]'"); $this->stdout("To get help on a specific command, type 'cake shell_name help'"); } diff --git a/cake/tests/cases/console/cake.test.php b/cake/tests/cases/console/cake.test.php index de7d8793e..ef725f168 100644 --- a/cake/tests/cases/console/cake.test.php +++ b/cake/tests/cases/console/cake.test.php @@ -36,8 +36,8 @@ if (!class_exists('ShellDispatcher')) { ob_end_clean(); } - require_once CONSOLE_LIBS . 'shell.php'; + /** * TestShellDispatcher class * @@ -85,6 +85,7 @@ class TestShellDispatcher extends ShellDispatcher { * @access public */ var $TestShell; + /** * _initEnvironment method * @@ -138,6 +139,7 @@ class TestShellDispatcher extends ShellDispatcher { $this->stopped = 'Stopped with status: ' . $status; return $status; } + /** * getShell * @@ -148,6 +150,7 @@ class TestShellDispatcher extends ShellDispatcher { function getShell($plugin = null) { return $this->_getShell($plugin); } + /** * _getShell * @@ -439,7 +442,6 @@ class ShellDispatcherTest extends CakeTestCase { $Dispatcher->parseParams($params); $this->assertEqual($expected, $Dispatcher->params); - $params = array( 'cake.php', '-working', @@ -510,6 +512,7 @@ class ShellDispatcherTest extends CakeTestCase { $result = $Dispatcher->getShell('test_plugin'); $this->assertIsA($result, 'ExampleShell'); } + /** * Verify correct dispatch of Shell subclasses with a main method * @@ -600,6 +603,7 @@ class ShellDispatcherTest extends CakeTestCase { $result = $Dispatcher->dispatch(); $this->assertFalse($result); } + /** * Verify correct dispatch of Shell subclasses without a main method * @@ -671,6 +675,7 @@ class ShellDispatcherTest extends CakeTestCase { $result = $Dispatcher->dispatch(); $this->assertFalse($result); } + /** * Verify correct dispatch of custom classes with a main method * @@ -750,6 +755,7 @@ class ShellDispatcherTest extends CakeTestCase { $result = $Dispatcher->dispatch(); $this->assertFalse($result); } + /** * Verify correct dispatch of custom classes without a main method * @@ -819,6 +825,7 @@ class ShellDispatcherTest extends CakeTestCase { $result = $Dispatcher->dispatch(); $this->assertFalse($result); } + /** * Verify that a task is called instead of the shell if the first arg equals * the name of the task @@ -867,6 +874,7 @@ class ShellDispatcherTest extends CakeTestCase { $result = $Dispatcher->dispatch(); $this->assertTrue($result); } + /** * Verify shifting of arguments * @@ -906,39 +914,34 @@ class ShellDispatcherTest extends CakeTestCase { function testHelpCommand() { $Dispatcher =& new TestShellDispatcher(); - $expected = "/ CORE(\\\|\/)tests(\\\|\/)test_app(\\\|\/)plugins(\\\|\/)test_plugin(\\\|\/)vendors(\\\|\/)shells:"; - $expected .= "\n\t example"; - $expected .= "\n/"; + $expected = "/example \[.*TestPlugin, TestPluginTwo.*\]/"; $this->assertPattern($expected, $Dispatcher->stdout); - $expected = "/ CORE(\\\|\/)tests(\\\|\/)test_app(\\\|\/)plugins(\\\|\/)test_plugin_two(\\\|\/)vendors(\\\|\/)shells:"; - $expected .= "\n\t example"; - $expected .= "\n\t welcome"; - $expected .= "\n/"; + $expected = "/welcome \[.*TestPluginTwo.*\]/"; $this->assertPattern($expected, $Dispatcher->stdout); - $expected = "/ APP(\\\|\/)vendors(\\\|\/)shells:"; - $expected .= "\n/"; + $expected = "/acl \[.*CORE.*\]/"; $this->assertPattern($expected, $Dispatcher->stdout); - $expected = "/ ROOT(\\\|\/)vendors(\\\|\/)shells:"; - $expected .= "\n/"; + $expected = "/api \[.*CORE.*\]/"; $this->assertPattern($expected, $Dispatcher->stdout); - $expected = "/ CORE(\\\|\/)console(\\\|\/)libs:"; - $expected .= "\n\t acl"; - $expected .= "\n\t api"; - $expected .= "\n\t bake"; - $expected .= "\n\t console"; - $expected .= "\n\t i18n"; - $expected .= "\n\t schema"; - $expected .= "\n\t testsuite"; - $expected .= "\n/"; + $expected = "/bake \[.*CORE.*\]/"; $this->assertPattern($expected, $Dispatcher->stdout); - $expected = "/ CORE(\\\|\/)tests(\\\|\/)test_app(\\\|\/)vendors(\\\|\/)shells:"; - $expected .= "\n\t sample"; - $expected .= "\n/"; + $expected = "/console \[.*CORE.*\]/"; + $this->assertPattern($expected, $Dispatcher->stdout); + + $expected = "/i18n \[.*CORE.*\]/"; + $this->assertPattern($expected, $Dispatcher->stdout); + + $expected = "/schema \[.*CORE.*\]/"; + $this->assertPattern($expected, $Dispatcher->stdout); + + $expected = "/testsuite \[.*CORE.*\]/"; + $this->assertPattern($expected, $Dispatcher->stdout); + + $expected = "/sample \[.*test_app.*\]/"; $this->assertPattern($expected, $Dispatcher->stdout); } } diff --git a/vendors/css/empty b/vendors/css/empty deleted file mode 100644 index e69de29bb..000000000 diff --git a/vendors/js/empty b/vendors/js/empty deleted file mode 100644 index e69de29bb..000000000