mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-22 14:52:40 +01:00
Add "arc get-config" and "arc set-config" for managing ~/.arcrc values
Summary: The major thing I want to do here is allow you to set a default Phabricator URI, so we can make "arc paste", and "arc upload", "arc download" work anywhere. We can also relax the .arcconfig requirements (request from @csilvers). Test Plan: Get/set some values? iiam Reviewers: btrahan, vrana, jungejason Reviewed By: btrahan CC: aran Differential Revision: https://secure.phabricator.com/D2400
This commit is contained in:
parent
587368e9ea
commit
9f3a0963cb
6 changed files with 199 additions and 0 deletions
|
@ -46,6 +46,7 @@ phutil_register_library_map(array(
|
|||
'ArcanistExportWorkflow' => 'workflow/export',
|
||||
'ArcanistFilenameLinter' => 'lint/linter/filename',
|
||||
'ArcanistGeneratedLinter' => 'lint/linter/generated',
|
||||
'ArcanistGetConfigWorkflow' => 'workflow/get-config',
|
||||
'ArcanistGitAPI' => 'repository/api/git',
|
||||
'ArcanistGitHookPreReceiveWorkflow' => 'workflow/git-hook-pre-receive',
|
||||
'ArcanistHelpWorkflow' => 'workflow/help',
|
||||
|
@ -87,6 +88,7 @@ phutil_register_library_map(array(
|
|||
'ArcanistPyFlakesLinter' => 'lint/linter/pyflakes',
|
||||
'ArcanistPyLintLinter' => 'lint/linter/pylint',
|
||||
'ArcanistRepositoryAPI' => 'repository/api/base',
|
||||
'ArcanistSetConfigWorkflow' => 'workflow/set-config',
|
||||
'ArcanistShellCompleteWorkflow' => 'workflow/shell-complete',
|
||||
'ArcanistSpellingDefaultData' => 'lint/linter/spelling',
|
||||
'ArcanistSpellingLinter' => 'lint/linter/spelling',
|
||||
|
@ -145,6 +147,7 @@ phutil_register_library_map(array(
|
|||
'ArcanistExportWorkflow' => 'ArcanistBaseWorkflow',
|
||||
'ArcanistFilenameLinter' => 'ArcanistLinter',
|
||||
'ArcanistGeneratedLinter' => 'ArcanistLinter',
|
||||
'ArcanistGetConfigWorkflow' => 'ArcanistBaseWorkflow',
|
||||
'ArcanistGitAPI' => 'ArcanistRepositoryAPI',
|
||||
'ArcanistGitHookPreReceiveWorkflow' => 'ArcanistBaseWorkflow',
|
||||
'ArcanistHelpWorkflow' => 'ArcanistBaseWorkflow',
|
||||
|
@ -170,6 +173,7 @@ phutil_register_library_map(array(
|
|||
'ArcanistPhutilModuleLinter' => 'ArcanistLinter',
|
||||
'ArcanistPyFlakesLinter' => 'ArcanistLinter',
|
||||
'ArcanistPyLintLinter' => 'ArcanistLinter',
|
||||
'ArcanistSetConfigWorkflow' => 'ArcanistBaseWorkflow',
|
||||
'ArcanistShellCompleteWorkflow' => 'ArcanistBaseWorkflow',
|
||||
'ArcanistSpellingLinter' => 'ArcanistLinter',
|
||||
'ArcanistSpellingLinterTestCase' => 'ArcanistLinterTestCase',
|
||||
|
|
|
@ -927,6 +927,16 @@ abstract class ArcanistBaseWorkflow {
|
|||
}
|
||||
}
|
||||
|
||||
protected function readGlobalArcConfig() {
|
||||
return idx(self::readUserConfigurationFile(), 'config', array());
|
||||
}
|
||||
|
||||
protected function writeGlobalArcConfig(array $options) {
|
||||
$config = self::readUserConfigurationFile();
|
||||
$config['config'] = $options;
|
||||
self::writeUserConfigurationFile($config);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Write a message to stderr so that '--json' flags or stdout which is meant
|
||||
|
|
66
src/workflow/get-config/ArcanistGetConfigWorkflow.php
Normal file
66
src/workflow/get-config/ArcanistGetConfigWorkflow.php
Normal file
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright 2012 Facebook, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Read configuration settings.
|
||||
*
|
||||
* @group workflow
|
||||
*/
|
||||
final class ArcanistGetConfigWorkflow extends ArcanistBaseWorkflow {
|
||||
|
||||
public function getCommandSynopses() {
|
||||
return phutil_console_format(<<<EOTEXT
|
||||
**get-config** [__name__ ...]
|
||||
EOTEXT
|
||||
);
|
||||
}
|
||||
|
||||
public function getCommandHelp() {
|
||||
return phutil_console_format(<<<EOTEXT
|
||||
Supports: cli
|
||||
Reads an arc configuration option. With no arugment, reads all
|
||||
options.
|
||||
EOTEXT
|
||||
);
|
||||
}
|
||||
|
||||
public function getArguments() {
|
||||
return array(
|
||||
'*' => 'argv',
|
||||
);
|
||||
}
|
||||
|
||||
public function run() {
|
||||
$argv = $this->getArgument('argv');
|
||||
|
||||
$config = $this->readGlobalArcConfig();
|
||||
if ($argv) {
|
||||
$keys = $argv;
|
||||
} else {
|
||||
$keys = array_keys($config);
|
||||
sort($keys);
|
||||
}
|
||||
|
||||
foreach ($keys as $key) {
|
||||
echo "{$key} = ".idx($config, $key)."\n";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
15
src/workflow/get-config/__init__.php
Normal file
15
src/workflow/get-config/__init__.php
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
/**
|
||||
* This file is automatically generated. Lint this module to rebuild it.
|
||||
* @generated
|
||||
*/
|
||||
|
||||
|
||||
|
||||
phutil_require_module('arcanist', 'workflow/base');
|
||||
|
||||
phutil_require_module('phutil', 'console');
|
||||
phutil_require_module('phutil', 'utils');
|
||||
|
||||
|
||||
phutil_require_source('ArcanistGetConfigWorkflow.php');
|
89
src/workflow/set-config/ArcanistSetConfigWorkflow.php
Normal file
89
src/workflow/set-config/ArcanistSetConfigWorkflow.php
Normal file
|
@ -0,0 +1,89 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright 2012 Facebook, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Write configuration settings.
|
||||
*
|
||||
* @group workflow
|
||||
*/
|
||||
final class ArcanistSetConfigWorkflow extends ArcanistBaseWorkflow {
|
||||
|
||||
public function getCommandSynopses() {
|
||||
return phutil_console_format(<<<EOTEXT
|
||||
**set-config** __name__ __value__
|
||||
EOTEXT
|
||||
);
|
||||
}
|
||||
|
||||
public function getCommandHelp() {
|
||||
return phutil_console_format(<<<EOTEXT
|
||||
Supports: cli
|
||||
Sets an arc configuration option.
|
||||
|
||||
Values are written to '~/.arcrc' on Linux and Mac OS X, and an
|
||||
undisclosed location on Windows.
|
||||
EOTEXT
|
||||
);
|
||||
}
|
||||
|
||||
public function getArguments() {
|
||||
return array(
|
||||
'*' => 'argv',
|
||||
);
|
||||
}
|
||||
|
||||
public function run() {
|
||||
$argv = $this->getArgument('argv');
|
||||
if (count($argv) != 2) {
|
||||
throw new ArcanistUsageException("Specify a key and a value.");
|
||||
}
|
||||
|
||||
$config = $this->readGlobalArcConfig();
|
||||
|
||||
$key = $argv[0];
|
||||
$val = $argv[1];
|
||||
|
||||
$old = null;
|
||||
if (array_key_exists($key, $config)) {
|
||||
$old = $config[$key];
|
||||
}
|
||||
|
||||
if (!strlen($val)) {
|
||||
unset($config[$key]);
|
||||
$this->writeGlobalArcConfig($config);
|
||||
|
||||
if ($old === null) {
|
||||
echo "Deleted key '{$key}'.\n";
|
||||
} else {
|
||||
echo "Deleted key '{$key}' (was '{$old}').\n";
|
||||
}
|
||||
} else {
|
||||
$config[$key] = $val;
|
||||
$this->writeGlobalArcConfig($config);
|
||||
|
||||
if ($old === null) {
|
||||
echo "Set key '{$key}' = '{$val}'.\n";
|
||||
} else {
|
||||
echo "Set key '{$key}' = '{$val}' (was '{$old}').\n";
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
15
src/workflow/set-config/__init__.php
Normal file
15
src/workflow/set-config/__init__.php
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
/**
|
||||
* This file is automatically generated. Lint this module to rebuild it.
|
||||
* @generated
|
||||
*/
|
||||
|
||||
|
||||
|
||||
phutil_require_module('arcanist', 'exception/usage');
|
||||
phutil_require_module('arcanist', 'workflow/base');
|
||||
|
||||
phutil_require_module('phutil', 'console');
|
||||
|
||||
|
||||
phutil_require_source('ArcanistSetConfigWorkflow.php');
|
Loading…
Reference in a new issue