1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-19 12:00:55 +01:00
phorge-phorge/src/applications/config/management/PhabricatorConfigManagementGetWorkflow.php
Scott Kroll 84f741f408 Allow config get to work when db is not functional
Summary: Fixes T6554.

Test Plan:
Run `bin/config get mysql.host` when no db is functional. Should not get an exception, but should see:
```
lang=json
{
  "config" : [
    {
      "key"       : "mysql.host",
      "source"    : "local",
      "value"     : null,
      "status"    : "unset",
      "errorInfo" : null
    },
    {
      "key"       : "mysql.host",
      "source"    : "database",
      "value"     : null,
      "status"    : "error",
      "errorInfo" : "Database source is not configured properly"
    }
  ]
}
```

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: epriestley

Maniphest Tasks: T6554

Differential Revision: https://secure.phabricator.com/D10851
2014-11-14 09:12:20 -08:00

107 lines
2.7 KiB
PHP

<?php
final class PhabricatorConfigManagementGetWorkflow
extends PhabricatorConfigManagementWorkflow {
protected function didConstruct() {
$this
->setName('get')
->setExamples('**get** __key__')
->setSynopsis('Get a local configuration value.')
->setArguments(
array(
array(
'name' => 'args',
'wildcard' => true,
),
));
}
public function execute(PhutilArgumentParser $args) {
$console = PhutilConsole::getConsole();
$argv = $args->getArg('args');
if (count($argv) == 0) {
throw new PhutilArgumentUsageException(
'Specify a configuration key to get.');
}
$key = $argv[0];
if (count($argv) > 1) {
throw new PhutilArgumentUsageException(
'Too many arguments: expected one key.');
}
$options = PhabricatorApplicationConfigOptions::loadAllOptions();
if (empty($options[$key])) {
throw new PhutilArgumentUsageException(
"No such configuration key '{$key}'! Use `config list` to list all ".
"keys.");
}
$values = array();
$config = new PhabricatorConfigLocalSource();
$local_value = $config->getKeys(array($key));
if (empty($local_value)) {
$values['local'] = array(
'key' => $key,
'value' => null,
'status' => 'unset',
'errorInfo' => null,
);
} else {
$values['local'] = array(
'key' => $key,
'value' => reset($local_value),
'status' => 'set',
'errorInfo' => null,
);
}
try {
$database_config = new PhabricatorConfigDatabaseSource('default');
$database_value = $database_config->getKeys(array($key));
if (empty($database_value)) {
$values['database'] = array(
'key' => $key,
'value' => null,
'status' => 'unset',
'errorInfo' => null,
);
} else {
$values['database'] = array(
'key' => $key,
'value' => reset($database_value),
'status' => 'set',
'errorInfo' => null,
);
}
} catch (Exception $e) {
$values['database'] = array(
'key' => $key,
'value' => null,
'status' => 'error',
'errorInfo' => pht('Database source is not configured properly'),
);
}
$result = array();
foreach ($values as $source => $value) {
$result[] = array(
'key' => $value['key'],
'source' => $source,
'value' => $value['value'],
'status' => $value['status'],
'errorInfo' => $value['errorInfo'],
);
}
$result = array(
'config' => $result,
);
$json = new PhutilJSON();
$console->writeOut($json->encodeFormatted($result));
}
}