3 final class PhabricatorConfigManagementMigrateWorkflow
4 extends PhabricatorConfigManagementWorkflow
{
6 protected function didConstruct() {
9 ->setExamples('**migrate**')
11 'Migrate file-based configuration to more modern storage.'));
14 public function execute(PhutilArgumentParser
$args) {
15 $console = PhutilConsole
::getConsole();
18 $options = PhabricatorApplicationConfigOptions
::loadAllOptions();
19 $local_config = new PhabricatorConfigLocalSource();
20 $database_config = new PhabricatorConfigDatabaseSource('default');
21 $config_sources = PhabricatorEnv
::getConfigSourceStack()->getStack();
24 pht('Migrating file-based config to more modern config...'));
25 foreach ($config_sources as $config_source) {
26 if (!($config_source instanceof PhabricatorConfigFileSource
)) {
30 'Skipping config of source type %s...',
31 get_class($config_source)));
34 $console->writeOut("%s\n", pht('Migrating file source...'));
35 $all_keys = $config_source->getAllKeys();
36 foreach ($all_keys as $key => $value) {
37 $option = idx($options, $key);
39 $console->writeOut("%s\n", pht('Skipping obsolete option: %s', $key));
42 $in_local = $local_config->getKeys(array($option->getKey()));
46 pht('Skipping option "%s"; already in local config.', $key));
49 $is_locked = $option->getLocked();
51 $local_config->setKeys(array($option->getKey() => $value));
55 pht('Migrated option "%s" from file to local config.', $key));
57 $in_database = $database_config->getKeys(array($option->getKey()));
61 pht('Skipping option "%s"; already in database config.', $key));
64 $config_entry = PhabricatorConfigEntry
::loadConfigEntry($key);
65 $config_entry->setValue($value);
66 $config_entry->save();
70 pht('Migrated option "%s" from file to database config.', $key));
76 $console->writeOut("%s\n", pht('Done. Migrated %d keys.', $key_count));