Path: blob/master/src/applications/config/management/PhabricatorConfigManagementMigrateWorkflow.php
12256 views
<?php12final class PhabricatorConfigManagementMigrateWorkflow3extends PhabricatorConfigManagementWorkflow {45protected function didConstruct() {6$this7->setName('migrate')8->setExamples('**migrate**')9->setSynopsis(pht(10'Migrate file-based configuration to more modern storage.'));11}1213public function execute(PhutilArgumentParser $args) {14$console = PhutilConsole::getConsole();15$key_count = 0;1617$options = PhabricatorApplicationConfigOptions::loadAllOptions();18$local_config = new PhabricatorConfigLocalSource();19$database_config = new PhabricatorConfigDatabaseSource('default');20$config_sources = PhabricatorEnv::getConfigSourceStack()->getStack();21$console->writeOut(22"%s\n",23pht('Migrating file-based config to more modern config...'));24foreach ($config_sources as $config_source) {25if (!($config_source instanceof PhabricatorConfigFileSource)) {26$console->writeOut(27"%s\n",28pht(29'Skipping config of source type %s...',30get_class($config_source)));31continue;32}33$console->writeOut("%s\n", pht('Migrating file source...'));34$all_keys = $config_source->getAllKeys();35foreach ($all_keys as $key => $value) {36$option = idx($options, $key);37if (!$option) {38$console->writeOut("%s\n", pht('Skipping obsolete option: %s', $key));39continue;40}41$in_local = $local_config->getKeys(array($option->getKey()));42if ($in_local) {43$console->writeOut(44"%s\n",45pht('Skipping option "%s"; already in local config.', $key));46continue;47}48$is_locked = $option->getLocked();49if ($is_locked) {50$local_config->setKeys(array($option->getKey() => $value));51$key_count++;52$console->writeOut(53"%s\n",54pht('Migrated option "%s" from file to local config.', $key));55} else {56$in_database = $database_config->getKeys(array($option->getKey()));57if ($in_database) {58$console->writeOut(59"%s\n",60pht('Skipping option "%s"; already in database config.', $key));61continue;62} else {63$config_entry = PhabricatorConfigEntry::loadConfigEntry($key);64$config_entry->setValue($value);65$config_entry->save();66$key_count++;67$console->writeOut(68"%s\n",69pht('Migrated option "%s" from file to database config.', $key));70}71}72}73}7475$console->writeOut("%s\n", pht('Done. Migrated %d keys.', $key_count));76return 0;77}7879}808182