Page MenuHomePhabricator

D10490.id25214.diff
No OneTemporary

D10490.id25214.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1350,6 +1350,7 @@
'PhabricatorConfigManagementDeleteWorkflow' => 'applications/config/management/PhabricatorConfigManagementDeleteWorkflow.php',
'PhabricatorConfigManagementGetWorkflow' => 'applications/config/management/PhabricatorConfigManagementGetWorkflow.php',
'PhabricatorConfigManagementListWorkflow' => 'applications/config/management/PhabricatorConfigManagementListWorkflow.php',
+ 'PhabricatorConfigManagementMigrateWorkflow' => 'applications/config/management/PhabricatorConfigManagementMigrateWorkflow.php',
'PhabricatorConfigManagementSetWorkflow' => 'applications/config/management/PhabricatorConfigManagementSetWorkflow.php',
'PhabricatorConfigManagementWorkflow' => 'applications/config/management/PhabricatorConfigManagementWorkflow.php',
'PhabricatorConfigOption' => 'applications/config/option/PhabricatorConfigOption.php',
@@ -4234,6 +4235,7 @@
'PhabricatorConfigManagementDeleteWorkflow' => 'PhabricatorConfigManagementWorkflow',
'PhabricatorConfigManagementGetWorkflow' => 'PhabricatorConfigManagementWorkflow',
'PhabricatorConfigManagementListWorkflow' => 'PhabricatorConfigManagementWorkflow',
+ 'PhabricatorConfigManagementMigrateWorkflow' => 'PhabricatorConfigManagementWorkflow',
'PhabricatorConfigManagementSetWorkflow' => 'PhabricatorConfigManagementWorkflow',
'PhabricatorConfigManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorConfigOption' => array(
diff --git a/src/applications/config/management/PhabricatorConfigManagementDeleteWorkflow.php b/src/applications/config/management/PhabricatorConfigManagementDeleteWorkflow.php
--- a/src/applications/config/management/PhabricatorConfigManagementDeleteWorkflow.php
+++ b/src/applications/config/management/PhabricatorConfigManagementDeleteWorkflow.php
@@ -11,6 +11,11 @@
->setArguments(
array(
array(
+ 'name' => 'database',
+ 'help' => 'Delete configuration in the database instead of in '.
+ 'local configuration.'
+ ),
+ array(
'name' => 'args',
'wildcard' => true,
),
@@ -33,7 +38,13 @@
'Too many arguments: expected one key.');
}
- $config = new PhabricatorConfigLocalSource();
+
+ $use_database = $args->getArg('database');
+ if ($use_database) {
+ $config = new PhabricatorConfigDatabaseSource('default');
+ } else {
+ $config = new PhabricatorConfigLocalSource();
+ }
$values = $config->getKeys(array($key));
if (!$values) {
throw new PhutilArgumentUsageException(
diff --git a/src/applications/config/management/PhabricatorConfigManagementGetWorkflow.php b/src/applications/config/management/PhabricatorConfigManagementGetWorkflow.php
--- a/src/applications/config/management/PhabricatorConfigManagementGetWorkflow.php
+++ b/src/applications/config/management/PhabricatorConfigManagementGetWorkflow.php
@@ -40,7 +40,7 @@
"keys.");
}
- $config = new PhabricatorConfigLocalSource();
+ $config = new PhabricatorConfigDatabaseSource('default');
$values = $config->getKeys(array($key));
$result = array();
diff --git a/src/applications/config/management/PhabricatorConfigManagementMigrateWorkflow.php b/src/applications/config/management/PhabricatorConfigManagementMigrateWorkflow.php
new file mode 100644
--- /dev/null
+++ b/src/applications/config/management/PhabricatorConfigManagementMigrateWorkflow.php
@@ -0,0 +1,40 @@
+<?php
+
+final class PhabricatorConfigManagementMigrateWorkflow
+ extends PhabricatorConfigManagementWorkflow {
+
+ protected function didConstruct() {
+ $this
+ ->setName('migrate')
+ ->setExamples('**migrate**')
+ ->setSynopsis(
+ 'Copy all existent, non-locked local config values to the '.
+ 'database. Local config values will overwrite database config values.');
+ }
+
+ public function execute(PhutilArgumentParser $args) {
+ $options = PhabricatorApplicationConfigOptions::loadAllOptions();
+ ksort($options);
+
+ $local_config = new PhabricatorConfigLocalSource();
+ $database_config = new PhabricatorConfigDatabaseSource('default');
+
+ $console = PhutilConsole::getConsole();
+ foreach ($options as $option) {
+ $in_local = $local_config->getKeys(array($option->getKey()));
+ $is_locked = $option->getLocked();
+ if ($in_local && !$is_locked) {
+ $database_config->setKeys(array($option->getKey() => $in_local));
+ $console->writeOut('Migrated option '.$option->getKey().'.'."\n");
+ } else if ($in_local && $is_locked) {
+ $console->writeOut(
+ 'Locked option '.$option->getKey().' can not be migrated.'."\n");
+ } else {
+ // not in local so do nothing
+ }
+ }
+
+ return 0;
+ }
+
+}
diff --git a/src/applications/config/management/PhabricatorConfigManagementSetWorkflow.php b/src/applications/config/management/PhabricatorConfigManagementSetWorkflow.php
--- a/src/applications/config/management/PhabricatorConfigManagementSetWorkflow.php
+++ b/src/applications/config/management/PhabricatorConfigManagementSetWorkflow.php
@@ -11,6 +11,11 @@
->setArguments(
array(
array(
+ 'name' => 'database',
+ 'help' => 'Update configuration in the database instead of in '.
+ 'local configuration.'
+ ),
+ array(
'name' => 'args',
'wildcard' => true,
),
@@ -81,6 +86,12 @@
}
break;
}
+ $use_database = $args->getArg('database');
+ if ($option->getLocked() && $use_database) {
+ throw new PhutilArgumentUsageException(
+ "Config key '{$key}' is locked and can only be set in local ".
+ 'configuration.');
+ }
try {
$option->getGroup()->validateOption($option, $value);
@@ -89,7 +100,12 @@
throw new PhutilArgumentUsageException($validation->getMessage());
}
- $config = new PhabricatorConfigLocalSource();
+ if ($use_database) {
+ $config = new PhabricatorConfigDatabaseSource('default');
+ } else {
+ $config = new PhabricatorConfigLocalSource();
+ }
+
$config->setKeys(array($key => $value));
$console->writeOut(

File Metadata

Mime Type
text/plain
Expires
Sat, Jul 12, 10:46 AM (5 h, 47 m ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
8348882
Default Alt Text
D10490.id25214.diff (6 KB)

Event Timeline