1
0
Fork 0

Allow the config command to read out values if no new value is provided

pull/1328/head
Jordi Boggiano 2012-11-13 13:08:38 +01:00
parent 24963fb4c8
commit 0d506228d6
1 changed files with 46 additions and 4 deletions

View File

@ -151,7 +151,8 @@ EOT
return 0; return 0;
} }
if (!$input->getArgument('setting-key')) { $settingKey = $input->getArgument('setting-key');
if (!$settingKey) {
return 0; return 0;
} }
@ -159,14 +160,56 @@ EOT
if (array() !== $input->getArgument('setting-value') && $input->getOption('unset')) { if (array() !== $input->getArgument('setting-value') && $input->getOption('unset')) {
throw new \RuntimeException('You can not combine a setting value with --unset'); throw new \RuntimeException('You can not combine a setting value with --unset');
} }
// list value
if (array() === $input->getArgument('setting-value') && !$input->getOption('unset')) { if (array() === $input->getArgument('setting-value') && !$input->getOption('unset')) {
throw new \RuntimeException('You must include a setting value or pass --unset to clear the value'); $data = $this->configFile->read();
if (preg_match('/^repos?(?:itories)?(?:\.(.+))?/', $settingKey, $matches)) {
if (empty($matches[1])) {
$value = isset($data['repositories']) ? $data['repositories'] : array();
} else {
if (!isset($data['repositories'][$matches[1]])) {
throw new \InvalidArgumentException('There is no '.$matches[1].' repository defined');
}
$value = $data['repositories'][$matches[1]];
}
} elseif (strpos($settingKey, '.')) {
$bits = explode('.', $settingKey);
$data = $data['config'];
foreach ($bits as $bit) {
if (isset($data[$bit])) {
$data = $data[$bit];
} elseif (isset($data[implode('.', $bits)])) {
// last bit can contain domain names and such so try to join whatever is left if it exists
$data = $data[implode('.', $bits)];
break;
} else {
throw new \RuntimeException($settingKey.' is not defined');
}
array_shift($bits);
}
$value = $data;
} elseif (isset($data['config'][$settingKey])) {
$value = $data['config'][$settingKey];
} else {
throw new \RuntimeException($settingKey.' is not defined');
}
if (is_array($value)) {
$value = json_encode($value);
}
$output->writeln($value);
return 0;
} }
$values = $input->getArgument('setting-value'); // what the user is trying to add/change $values = $input->getArgument('setting-value'); // what the user is trying to add/change
// handle repositories // handle repositories
if (preg_match('/^repos?(?:itories)?\.(.+)/', $input->getArgument('setting-key'), $matches)) { if (preg_match('/^repos?(?:itories)?\.(.+)/', $settingKey, $matches)) {
if ($input->getOption('unset')) { if ($input->getOption('unset')) {
return $this->configSource->removeRepository($matches[1]); return $this->configSource->removeRepository($matches[1]);
} }
@ -214,7 +257,6 @@ EOT
), ),
); );
$settingKey = $input->getArgument('setting-key');
foreach ($uniqueConfigValues as $name => $callbacks) { foreach ($uniqueConfigValues as $name => $callbacks) {
if ($settingKey === $name) { if ($settingKey === $name) {
if ($input->getOption('unset')) { if ($input->getOption('unset')) {