protected function executeChecks() { $ancient_config = self::getAncientConfig(); $all_keys = PhabricatorEnv::getAllConfigKeys(); $all_keys = array_keys($all_keys); sort($all_keys); $defined_keys = PhabricatorApplicationConfigOptions::loadAllOptions(); foreach ($all_keys as $key) { if (isset($defined_keys[$key])) { continue; } if (isset($ancient_config[$key])) { $summary = pht('This option has been removed. You may delete it at your ' . 'convenience.'); $message = pht("The configuration option '%s' has been removed. You may delete " . "it at your convenience." . "\n\n%s", $key, $ancient_config[$key]); $short = pht('Obsolete Config'); $name = pht('Obsolete Configuration Option "%s"', $key); } else { $summary = pht('This option is not recognized. It may be misspelled.'); $message = pht("The configuration option '%s' is not recognized. It may be " . "misspelled, or it might have existed in an older version of " . "Phabricator. It has no effect, and should be corrected or deleted.", $key); $short = pht('Unknown Config'); $name = pht('Unknown Configuration Option "%s"', $key); } $issue = $this->newIssue('config.unknown.' . $key)->setShortName($short)->setName($name)->setSummary($summary); $stack = PhabricatorEnv::getConfigSourceStack(); $stack = $stack->getStack(); $found = array(); $found_local = false; $found_database = false; foreach ($stack as $source_key => $source) { $value = $source->getKeys(array($key)); if ($value) { $found[] = $source->getName(); if ($source instanceof PhabricatorConfigDatabaseSource) { $found_database = true; } if ($source instanceof PhabricatorConfigLocalSource) { $found_local = true; } } } $message = $message . "\n\n" . pht('This configuration value is defined in these %d ' . 'configuration source(s): %s.', count($found), implode(', ', $found)); $issue->setMessage($message); if ($found_local) { $command = csprintf('phabricator/ $ ./bin/config delete %s', $key); $issue->addCommand($command); } if ($found_database) { $issue->addPhabricatorConfig($key); } } $this->executeManiphestFieldChecks(); }
public function execute(PhutilArgumentParser $args) { $console = PhutilConsole::getConsole(); $key_count = 0; $options = PhabricatorApplicationConfigOptions::loadAllOptions(); $local_config = new PhabricatorConfigLocalSource(); $database_config = new PhabricatorConfigDatabaseSource('default'); $config_sources = PhabricatorEnv::getConfigSourceStack()->getStack(); $console->writeOut("%s\n", pht('Migrating file-based config to more modern config...')); foreach ($config_sources as $config_source) { if (!$config_source instanceof PhabricatorConfigFileSource) { $console->writeOut("%s\n", pht('Skipping config of source type %s...', get_class($config_source))); continue; } $console->writeOut("%s\n", pht('Migrating file source...')); $all_keys = $config_source->getAllKeys(); foreach ($all_keys as $key => $value) { $option = idx($options, $key); if (!$option) { $console->writeOut("%s\n", pht('Skipping obsolete option: %s', $key)); continue; } $in_local = $local_config->getKeys(array($option->getKey())); if ($in_local) { $console->writeOut("%s\n", pht('Skipping option "%s"; already in local config.', $key)); continue; } $is_locked = $option->getLocked(); if ($is_locked) { $local_config->setKeys(array($option->getKey() => $value)); $key_count++; $console->writeOut("%s\n", pht('Migrated option "%s" from file to local config.', $key)); } else { $in_database = $database_config->getKeys(array($option->getKey())); if ($in_database) { $console->writeOut("%s\n", pht('Skipping option "%s"; already in database config.', $key)); continue; } else { $config_entry = PhabricatorConfigEntry::loadConfigEntry($key); $config_entry->setValue($value); $config_entry->save(); $key_count++; $console->writeOut("%s\n", pht('Migrated option "%s" from file to database config.', $key)); } } } } $console->writeOut("%s\n", pht('Done. Migrated %d keys.', $key_count)); return 0; }
private function renderDefaults(PhabricatorConfigOption $option, PhabricatorConfigEntry $entry) { $stack = PhabricatorEnv::getConfigSourceStack(); $stack = $stack->getStack(); $table = array(); $table[] = phutil_tag('tr', array('class' => 'column-labels'), array(phutil_tag('th', array(), pht('Source')), phutil_tag('th', array(), pht('Value')))); foreach ($stack as $key => $source) { $value = $source->getKeys(array($option->getKey())); if (!array_key_exists($option->getKey(), $value)) { $value = phutil_tag('em', array(), pht('(empty)')); } else { $value = $this->getDisplayValue($option, $entry, $value[$option->getKey()]); } $table[] = phutil_tag('tr', array('class' => 'column-labels'), array(phutil_tag('th', array(), $source->getName()), phutil_tag('td', array(), $value))); } require_celerity_resource('config-options-css'); return phutil_tag('table', array('class' => 'config-option-table'), $table); }