mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-25 00:02:40 +01:00
Allow specifying runtime configuration with --set-config key=value
Summary: This is useful for wrapper scripts that want to customize arcanist's behavior without affecting the global configuration. This can be implemented with arcanist_configuration entry in .arcconfig, however it is currently limited to per-project settings, and this feature makes writing wrapper scripts a little easier. Test Plan: arc diff --set-config editor=vim (yeah yeah, crappy test case) Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley, #blessed_reviewers Subscribers: epriestley, Korvin Differential Revision: https://secure.phabricator.com/D9442
This commit is contained in:
parent
2ccf65353c
commit
5a02012706
4 changed files with 56 additions and 16 deletions
|
@ -8,9 +8,9 @@ require_once dirname(__FILE__).'/__init_script__.php';
|
|||
ini_set('memory_limit', -1);
|
||||
|
||||
$original_argv = $argv;
|
||||
$args = new PhutilArgumentParser($argv);
|
||||
$args->parseStandardArguments();
|
||||
$args->parsePartial(
|
||||
$base_args = new PhutilArgumentParser($argv);
|
||||
$base_args->parseStandardArguments();
|
||||
$base_args->parsePartial(
|
||||
array(
|
||||
array(
|
||||
'name' => 'load-phutil-library',
|
||||
|
@ -40,20 +40,26 @@ $args->parsePartial(
|
|||
'param' => 'timeout',
|
||||
'help' => 'Set Conduit timeout (in seconds).',
|
||||
),
|
||||
array(
|
||||
'name' => 'config',
|
||||
'param' => 'key=value',
|
||||
'repeat' => true,
|
||||
'help' =>
|
||||
'Specify a runtime configuration value. This will take precedence '.
|
||||
'over static values, and only affect the current arcanist invocation.'
|
||||
),
|
||||
));
|
||||
|
||||
$config_trace_mode = $args->getArg('trace');
|
||||
$config_trace_mode = $base_args->getArg('trace');
|
||||
|
||||
$force_conduit = $args->getArg('conduit-uri');
|
||||
$force_conduit_version = $args->getArg('conduit-version');
|
||||
$conduit_timeout = $args->getArg('conduit-timeout');
|
||||
$skip_arcconfig = $args->getArg('skip-arcconfig');
|
||||
$custom_arcrc = $args->getArg('arcrc-file');
|
||||
$load = $args->getArg('load-phutil-library');
|
||||
$help = $args->getArg('help');
|
||||
|
||||
$argv = $args->getUnconsumedArgumentVector();
|
||||
$args = array_values($argv);
|
||||
$force_conduit = $base_args->getArg('conduit-uri');
|
||||
$force_conduit_version = $base_args->getArg('conduit-version');
|
||||
$conduit_timeout = $base_args->getArg('conduit-timeout');
|
||||
$skip_arcconfig = $base_args->getArg('skip-arcconfig');
|
||||
$custom_arcrc = $base_args->getArg('arcrc-file');
|
||||
$load = $base_args->getArg('load-phutil-library');
|
||||
$help = $base_args->getArg('help');
|
||||
$args = array_values($base_args->getUnconsumedArgumentVector());
|
||||
|
||||
$working_directory = getcwd();
|
||||
$console = PhutilConsole::getConsole();
|
||||
|
@ -86,6 +92,8 @@ try {
|
|||
|
||||
$global_config = $configuration_manager->readUserArcConfig();
|
||||
$system_config = $configuration_manager->readSystemArcConfig();
|
||||
$runtime_config = $configuration_manager->applyRuntimeArcConfig($base_args);
|
||||
|
||||
if ($skip_arcconfig) {
|
||||
$working_copy = ArcanistWorkingCopyIdentity::newDummyWorkingCopy();
|
||||
} else {
|
||||
|
@ -142,6 +150,14 @@ try {
|
|||
$must_load = true,
|
||||
$lib_source = 'the "load" setting in ".arcconfig"',
|
||||
$working_copy);
|
||||
|
||||
// Load libraries in ".arcconfig". Libraries here must load.
|
||||
arcanist_load_libraries(
|
||||
idx($runtime_config, 'load', array()),
|
||||
$must_load = true,
|
||||
$lib_source = 'the --config "load=[...]" argument',
|
||||
$working_copy);
|
||||
|
||||
}
|
||||
|
||||
$user_config = $configuration_manager->readUserConfigurationFile();
|
||||
|
|
|
@ -305,6 +305,25 @@ final class ArcanistConfigurationManager {
|
|||
return $system_config;
|
||||
}
|
||||
|
||||
public function applyRuntimeArcConfig($args) {
|
||||
$arcanist_settings = new ArcanistSettings();
|
||||
$options = $args->getArg('config');
|
||||
|
||||
foreach ($options as $opt) {
|
||||
$opt_config = preg_split('/=/', $opt, 2);
|
||||
if (count($opt_config) !== 2) {
|
||||
throw new ArcanistUsageException("Argument was '{$opt}', but must be ".
|
||||
"'name=value'. For example, history.immutable=true");
|
||||
}
|
||||
|
||||
list($key, $value) = $opt_config;
|
||||
$value = $arcanist_settings->willWriteValue($key, $value);
|
||||
$this->setRuntimeConfig($key, $value);
|
||||
}
|
||||
|
||||
return $this->runtimeConfig;
|
||||
}
|
||||
|
||||
public function readDefaultConfig() {
|
||||
$settings = new ArcanistSettings();
|
||||
return $settings->getDefaultSettings();
|
||||
|
|
|
@ -594,6 +594,7 @@ abstract class ArcanistBaseWorkflow extends Phobject {
|
|||
$arc_config = $this->getArcanistConfiguration();
|
||||
$command = $this->getCommand();
|
||||
$spec += $arc_config->getCustomArgumentsForCommand($command);
|
||||
|
||||
return $spec;
|
||||
}
|
||||
|
||||
|
|
|
@ -199,6 +199,10 @@ EOTEXT
|
|||
__--conduit-timeout__ __timeout__
|
||||
Override the default Conduit timeout. Specified in seconds.
|
||||
|
||||
__--config__ __key=value__
|
||||
Specify a runtime configuration value. This will take precedence
|
||||
over static values, and only affect the current arcanist invocation.
|
||||
|
||||
__--skip-arcconfig__
|
||||
Skip the working copy configuration file
|
||||
|
||||
|
|
Loading…
Reference in a new issue