refactor ShellDispatcher::parseParams(), fixes #4771

git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@7049 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
gwoo 2008-05-27 21:43:15 +00:00
parent a2b873d0f8
commit 047c5fc040
2 changed files with 46 additions and 24 deletions

View file

@ -441,38 +441,36 @@ class ShellDispatcher {
function parseParams($params) { function parseParams($params) {
$this->__parseParams($params); $this->__parseParams($params);
$app = 'app'; $defaults = array('app' => 'app', 'root' => dirname(dirname(dirname(__FILE__))), 'working' => null, 'webroot' => 'webroot');
$root = dirname(dirname(dirname(__FILE__)));
$this->params = str_replace('/', DS, $this->params); $params = array_merge($defaults, array_intersect_key($this->params, $defaults));
if (!empty($this->params['working']) && (!isset($this->args[0]) || isset($this->args[0]) && $this->args[0]{0} !== '.')) { $isWin = array_filter(array_map('strpos', $params, array('\\')));
if (empty($this->params['app'])) {
$root = dirname($this->params['working']); $params = str_replace('\\', '/', $params);
$app = basename($this->params['working']);
if (!empty($params['working']) && (!isset($this->args[0]) || isset($this->args[0]) && $this->args[0]{0} !== '.')) {
if ($params['app'] === 'app') {
$params['root'] = dirname($params['working']);
$params['app'] = basename($params['working']);
} else { } else {
$root = $this->params['working']; $params['root'] = $params['working'];
} }
unset($this->params['working']);
} }
if (!empty($this->params['app'])) { if($params['app'][0] == '/' || preg_match('/([a-z])(:)/i', $params['app'], $matches)) {
if($this->params['app'][0] == DS || preg_match('/([a-z])(:)/i', $this->params['app'], $matches)) { $params['root'] = dirname($params['app']);
$root = dirname($this->params['app']); } elseif (strpos($params['app'], '/')) {
} $params['root'] .= '/' . dirname($params['app']);
$app = basename($this->params['app']); }
unset($this->params['app']); $params['app'] = basename($params['app']);
$params['working'] = $params['root'] . '/' . $params['app'];
if (!empty($matches[0]) || !empty($isWin)) {
$params = str_replace('/', '\\', $params);
} }
if (empty($this->params['webroot'])) { $this->params = array_merge($this->params, $params);
$this->params['webroot'] = 'webroot';
}
$this->params = array_merge($this->params, array('app'=> $app, 'root'=> $root, 'working'=> $root . DS . $app));
if (!empty($matches[0])) {
$this->params = str_replace('/', DS, $this->params);
}
} }
/** /**
* Helper for recursively paraing params * Helper for recursively paraing params

View file

@ -272,6 +272,30 @@ class ShellDispatcherTest extends UnitTestCase {
$Dispatcher->params = $Dispatcher->args = array(); $Dispatcher->params = $Dispatcher->args = array();
$Dispatcher->parseParams($params); $Dispatcher->parseParams($params);
$this->assertEqual($expected, $Dispatcher->params); $this->assertEqual($expected, $Dispatcher->params);
$params = array(
'cake.php',
'-working',
'C:\wamp\www\apps',
'bake',
'-app',
'cake\app',
'-url',
'http://example.com/some/url/with/a/path'
);
$expected = array(
'app' => 'app',
'webroot' => 'webroot',
'working' => 'C:\wamp\www\apps\cake\app',
'root' => 'C:\wamp\www\apps\cake',
'url' => 'http://example.com/some/url/with/a/path'
);
$Dispatcher->params = $Dispatcher->args = array();
$Dispatcher->parseParams($params);
$this->assertEqual($expected, $Dispatcher->params);
} }
} }