diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index c8763252..57fab9fa 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -30,6 +30,7 @@ phutil_register_library_map(array( 'ArcanistAnoidWorkflow' => 'workflow/ArcanistAnoidWorkflow.php', 'ArcanistArcConfigurationEngineExtension' => 'config/arc/ArcanistArcConfigurationEngineExtension.php', 'ArcanistArcToolset' => 'toolset/ArcanistArcToolset.php', + 'ArcanistArcWorkflow' => 'toolset/workflow/ArcanistArcWorkflow.php', 'ArcanistArrayCombineXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistArrayCombineXHPASTLinterRule.php', 'ArcanistArrayCombineXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistArrayCombineXHPASTLinterRuleTestCase.php', 'ArcanistArrayIndexSpacingXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistArrayIndexSpacingXHPASTLinterRule.php', @@ -213,7 +214,7 @@ phutil_register_library_map(array( 'ArcanistHLintLinter' => 'lint/linter/ArcanistHLintLinter.php', 'ArcanistHLintLinterTestCase' => 'lint/linter/__tests__/ArcanistHLintLinterTestCase.php', 'ArcanistHardpointLoader' => 'loader/ArcanistHardpointLoader.php', - 'ArcanistHelpWorkflow' => 'workflow/ArcanistHelpWorkflow.php', + 'ArcanistHelpWorkflow' => 'toolset/workflow/ArcanistHelpWorkflow.php', 'ArcanistHexadecimalNumericScalarCasingXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistHexadecimalNumericScalarCasingXHPASTLinterRule.php', 'ArcanistHexadecimalNumericScalarCasingXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistHexadecimalNumericScalarCasingXHPASTLinterRuleTestCase.php', 'ArcanistHgClientChannel' => 'hgdaemon/ArcanistHgClientChannel.php', @@ -968,6 +969,7 @@ phutil_register_library_map(array( 'ArcanistAnoidWorkflow' => 'ArcanistWorkflow', 'ArcanistArcConfigurationEngineExtension' => 'ArcanistConfigurationEngineExtension', 'ArcanistArcToolset' => 'ArcanistToolset', + 'ArcanistArcWorkflow' => 'ArcanistWorkflow', 'ArcanistArrayCombineXHPASTLinterRule' => 'ArcanistXHPASTLinterRule', 'ArcanistArrayCombineXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase', 'ArcanistArrayIndexSpacingXHPASTLinterRule' => 'ArcanistXHPASTLinterRule', diff --git a/src/toolset/workflow/ArcanistArcWorkflow.php b/src/toolset/workflow/ArcanistArcWorkflow.php new file mode 100644 index 00000000..91750fe9 --- /dev/null +++ b/src/toolset/workflow/ArcanistArcWorkflow.php @@ -0,0 +1,11 @@ +getToolsetKey(); + return ($key === 'arc'); + } + +} diff --git a/src/toolset/workflow/ArcanistHelpWorkflow.php b/src/toolset/workflow/ArcanistHelpWorkflow.php new file mode 100644 index 00000000..e7ac38fc --- /dev/null +++ b/src/toolset/workflow/ArcanistHelpWorkflow.php @@ -0,0 +1,18 @@ + array( - 'help' => pht('Print detailed information about each command.'), - ), - '*' => 'command', - ); - } - - public function run() { - - $arc_config = $this->getArcanistConfiguration(); - $workflows = $arc_config->buildAllWorkflows(); - ksort($workflows); - - $target = null; - if ($this->getArgument('command')) { - $target = head($this->getArgument('command')); - if (empty($workflows[$target])) { - throw new ArcanistUsageException( - pht( - "Unrecognized command '%s'. Try '%s'.", - $target, - 'arc help')); - } - } - - $cmdref = array(); - foreach ($workflows as $command => $workflow) { - if ($target && $target != $command) { - continue; - } - if (!$target && !$this->getArgument('full')) { - $cmdref[] = $workflow->getCommandSynopses(); - continue; - } - $optref = array(); - $arguments = $workflow->getArguments(); - - $config_arguments = $arc_config->getCustomArgumentsForCommand($command); - - // This juggling is to put the extension arguments after the normal - // arguments, and make sure the normal arguments aren't overwritten. - ksort($arguments); - ksort($config_arguments); - foreach ($config_arguments as $argument => $spec) { - if (empty($arguments[$argument])) { - $arguments[$argument] = $spec; - } - } - - foreach ($arguments as $argument => $spec) { - if ($argument == '*') { - continue; - } - if (!empty($spec['hide'])) { - continue; - } - if (isset($spec['param'])) { - if (isset($spec['short'])) { - $optref[] = phutil_console_format( - ' __--%s__ __%s__, __-%s__ __%s__', - $argument, - $spec['param'], - $spec['short'], - $spec['param']); - } else { - $optref[] = phutil_console_format( - ' __--%s__ __%s__', - $argument, - $spec['param']); - } - } else { - if (isset($spec['short'])) { - $optref[] = phutil_console_format( - ' __--%s__, __-%s__', - $argument, - $spec['short']); - } else { - $optref[] = phutil_console_format( - ' __--%s__', - $argument); - } - } - - if (isset($config_arguments[$argument])) { - $optref[] = ' '. - pht('(This is a custom option for this project.)'); - } - - if (isset($spec['supports'])) { - $optref[] = ' '. - pht('Supports: %s', implode(', ', $spec['supports'])); - } - - if (isset($spec['help'])) { - $docs = $spec['help']; - } else { - $docs = pht('This option is not documented.'); - } - $docs = phutil_console_wrap($docs, 14); - $optref[] = "{$docs}\n"; - } - if ($optref) { - $optref = implode("\n", $optref); - $optref = "\n\n".$optref; - } else { - $optref = "\n"; - } - - $cmdref[] = - $workflow->getCommandSynopses()."\n". - $workflow->getCommandHelp(). - $optref; - } - $cmdref = implode("\n\n", $cmdref); - - if ($target) { - echo "\n".$cmdref."\n"; - return; - } - - $self = 'arc'; - echo phutil_console_format(<<getArgument('full')) { - echo pht( - "Run '%s' to get commands and options descriptions.\n", - 'arc help --full'); - return; - } - - echo phutil_console_format(<<toolset = $toolset; + return $this; + } + + final public function getToolset() { + return $this->toolset; + } + + final public function setRuntime(ArcanistRuntime $runtime) { + $this->runtime = $runtime; + return $this; + } + + final public function getRuntime() { + return $this->runtime; + } + + final public function setConfigurationEngine( + ArcanistConfigurationEngine $engine) { + $this->configurationEngine = $engine; + return $this; + } + + final public function getConfigurationEngine() { + return $this->configurationEngine; + } + + final public function setConfigurationSourceList( + ArcanistConfigurationSourceList $list) { + $this->configurationSourceList = $list; + return $this; + } + + final public function getConfigurationSourceList() { + return $this->configurationSourceList; + } public function __construct() {} - - abstract public function run(); + public function run() { + throw new PhutilMethodNotImplementedException(); + } /** * Finalizes any cleanup operations that need to occur regardless of @@ -99,17 +142,21 @@ abstract class ArcanistWorkflow extends Phobject { * * @return string 6-space indented list of available command synopses. */ - abstract public function getCommandSynopses(); + public function getCommandSynopses() { + return array(); + } /** * Return console formatted string with command help printed in `arc help`. * * @return string 10-space indented help to use the command. */ - abstract public function getCommandHelp(); + public function getCommandHelp() { + return null; + } - final public function supportsToolset($toolset) { - return ($toolset === 'arc'); + public function supportsToolset(ArcanistToolset $toolset) { + return false; }