Correct Aphlict websocket URI construction after PHP8 compatibility changes
[phabricator.git] / src / applications / config / management / PhabricatorConfigManagementMigrateWorkflow.php
blob67b5733dc743323c20e41ff206e62ae7c148450d
1 <?php
3 final class PhabricatorConfigManagementMigrateWorkflow
4 extends PhabricatorConfigManagementWorkflow {
6 protected function didConstruct() {
7 $this
8 ->setName('migrate')
9 ->setExamples('**migrate**')
10 ->setSynopsis(pht(
11 'Migrate file-based configuration to more modern storage.'));
14 public function execute(PhutilArgumentParser $args) {
15 $console = PhutilConsole::getConsole();
16 $key_count = 0;
18 $options = PhabricatorApplicationConfigOptions::loadAllOptions();
19 $local_config = new PhabricatorConfigLocalSource();
20 $database_config = new PhabricatorConfigDatabaseSource('default');
21 $config_sources = PhabricatorEnv::getConfigSourceStack()->getStack();
22 $console->writeOut(
23 "%s\n",
24 pht('Migrating file-based config to more modern config...'));
25 foreach ($config_sources as $config_source) {
26 if (!($config_source instanceof PhabricatorConfigFileSource)) {
27 $console->writeOut(
28 "%s\n",
29 pht(
30 'Skipping config of source type %s...',
31 get_class($config_source)));
32 continue;
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);
38 if (!$option) {
39 $console->writeOut("%s\n", pht('Skipping obsolete option: %s', $key));
40 continue;
42 $in_local = $local_config->getKeys(array($option->getKey()));
43 if ($in_local) {
44 $console->writeOut(
45 "%s\n",
46 pht('Skipping option "%s"; already in local config.', $key));
47 continue;
49 $is_locked = $option->getLocked();
50 if ($is_locked) {
51 $local_config->setKeys(array($option->getKey() => $value));
52 $key_count++;
53 $console->writeOut(
54 "%s\n",
55 pht('Migrated option "%s" from file to local config.', $key));
56 } else {
57 $in_database = $database_config->getKeys(array($option->getKey()));
58 if ($in_database) {
59 $console->writeOut(
60 "%s\n",
61 pht('Skipping option "%s"; already in database config.', $key));
62 continue;
63 } else {
64 $config_entry = PhabricatorConfigEntry::loadConfigEntry($key);
65 $config_entry->setValue($value);
66 $config_entry->save();
67 $key_count++;
68 $console->writeOut(
69 "%s\n",
70 pht('Migrated option "%s" from file to database config.', $key));
76 $console->writeOut("%s\n", pht('Done. Migrated %d keys.', $key_count));
77 return 0;