Page MenuHomePhabricator

D21168.id50401.diff
No OneTemporary

D21168.id50401.diff

diff --git a/src/parser/argument/PhutilArgumentParser.php b/src/parser/argument/PhutilArgumentParser.php
--- a/src/parser/argument/PhutilArgumentParser.php
+++ b/src/parser/argument/PhutilArgumentParser.php
@@ -77,6 +77,7 @@
private $tagline;
private $synopsis;
private $workflows;
+ private $helpWorkflows;
private $showHelp;
private $requireArgumentTerminator = false;
private $sawTerminator = false;
@@ -449,11 +450,13 @@
$flow = $corrected;
} else {
- $this->raiseUnknownWorkflow($flow, $corrected);
+ if (!$this->showHelp) {
+ $this->raiseUnknownWorkflow($flow, $corrected);
+ }
}
}
- $workflow = $this->workflows[$flow];
+ $workflow = idx($this->workflows, $flow);
if ($this->showHelp) {
// Make "cmd flow --help" behave like "cmd help flow", not "cmd help".
@@ -471,6 +474,10 @@
}
}
+ if (!$workflow) {
+ $this->raiseUnknownWorkflow($flow, $corrected);
+ }
+
$this->argv = array_values($argv);
if ($workflow->shouldParsePartial()) {
@@ -633,6 +640,12 @@
return $this;
}
+ public function setHelpWorkflows(array $help_workflows) {
+ $help_workflows = mpull($help_workflows, null, 'getName');
+ $this->helpWorkflows = $help_workflows;
+ return $this;
+ }
+
public function getWorkflows() {
return $this->workflows;
}
@@ -684,11 +697,16 @@
$out[] = null;
}
- if ($this->workflows) {
+ $workflows = $this->helpWorkflows;
+ if ($workflows === null) {
+ $workflows = $this->workflows;
+ }
+
+ if ($workflows) {
$has_help = false;
$out[] = $this->format('**%s**', pht('WORKFLOWS'));
$out[] = null;
- $flows = $this->workflows;
+ $flows = $workflows;
ksort($flows);
foreach ($flows as $workflow) {
if ($workflow->getName() == 'help') {
@@ -739,7 +757,12 @@
$indent = ($show_details ? 0 : 6);
- $workflow = idx($this->workflows, strtolower($workflow_name));
+ $workflows = $this->helpWorkflows;
+ if ($workflows === null) {
+ $workflows = $this->workflows;
+ }
+
+ $workflow = idx($workflows, strtolower($workflow_name));
if (!$workflow) {
$out[] = $this->indent(
$indent,
diff --git a/src/parser/argument/workflow/PhutilHelpArgumentWorkflow.php b/src/parser/argument/workflow/PhutilHelpArgumentWorkflow.php
--- a/src/parser/argument/workflow/PhutilHelpArgumentWorkflow.php
+++ b/src/parser/argument/workflow/PhutilHelpArgumentWorkflow.php
@@ -2,17 +2,6 @@
final class PhutilHelpArgumentWorkflow extends PhutilArgumentWorkflow {
- private $runtime;
-
- public function setRuntime($runtime) {
- $this->runtime = $runtime;
- return $this;
- }
-
- public function getRuntime() {
- return $this->runtime;
- }
-
protected function didConstruct() {
$this->setName('help');
$this->setExamples(<<<EOHELP
@@ -39,47 +28,6 @@
public function execute(PhutilArgumentParser $args) {
$with = $args->getArg('help-with-what');
- $runtime = $this->getRuntime();
- if ($runtime) {
- $toolset = $runtime->getToolset();
- if ($toolset->getToolsetKey() === 'arc') {
- $workflows = $args->getWorkflows();
-
- $legacy = array();
-
- $legacy[] = new ArcanistCloseRevisionWorkflow();
- $legacy[] = new ArcanistCommitWorkflow();
- $legacy[] = new ArcanistCoverWorkflow();
- $legacy[] = new ArcanistDiffWorkflow();
- $legacy[] = new ArcanistExportWorkflow();
- $legacy[] = new ArcanistGetConfigWorkflow();
- $legacy[] = new ArcanistSetConfigWorkflow();
- $legacy[] = new ArcanistInstallCertificateWorkflow();
- $legacy[] = new ArcanistLandWorkflow();
- $legacy[] = new ArcanistLintersWorkflow();
- $legacy[] = new ArcanistLintWorkflow();
- $legacy[] = new ArcanistListWorkflow();
- $legacy[] = new ArcanistPatchWorkflow();
- $legacy[] = new ArcanistPasteWorkflow();
- $legacy[] = new ArcanistTasksWorkflow();
- $legacy[] = new ArcanistTodoWorkflow();
- $legacy[] = new ArcanistUnitWorkflow();
- $legacy[] = new ArcanistWhichWorkflow();
-
- foreach ($legacy as $workflow) {
- // If this workflow has been updated but not removed from the list
- // above yet, just skip it.
- if ($workflow instanceof ArcanistArcWorkflow) {
- continue;
- }
-
- $workflows[] = $workflow->newLegacyPhutilWorkflow();
- }
-
- $args->setWorkflows($workflows);
- }
- }
-
if (!$with) {
$args->printHelpAndExit();
} else {
diff --git a/src/runtime/ArcanistRuntime.php b/src/runtime/ArcanistRuntime.php
--- a/src/runtime/ArcanistRuntime.php
+++ b/src/runtime/ArcanistRuntime.php
@@ -162,6 +162,9 @@
// TOOLSETS: Some day, stop falling through to the old "arc" runtime.
+ $help_workflows = $this->getHelpWorkflows($phutil_workflows);
+ $args->setHelpWorkflows($help_workflows);
+
try {
return $args->parseWorkflowsFull($phutil_workflows);
} catch (ArcanistMissingArgumentTerminatorException $terminator_exception) {
@@ -869,4 +872,41 @@
return $this->toolset;
}
+ private function getHelpWorkflows(array $workflows) {
+ if ($this->getToolset()->getToolsetKey() === 'arc') {
+ $legacy = array();
+
+ $legacy[] = new ArcanistCloseRevisionWorkflow();
+ $legacy[] = new ArcanistCommitWorkflow();
+ $legacy[] = new ArcanistCoverWorkflow();
+ $legacy[] = new ArcanistDiffWorkflow();
+ $legacy[] = new ArcanistExportWorkflow();
+ $legacy[] = new ArcanistGetConfigWorkflow();
+ $legacy[] = new ArcanistSetConfigWorkflow();
+ $legacy[] = new ArcanistInstallCertificateWorkflow();
+ $legacy[] = new ArcanistLandWorkflow();
+ $legacy[] = new ArcanistLintersWorkflow();
+ $legacy[] = new ArcanistLintWorkflow();
+ $legacy[] = new ArcanistListWorkflow();
+ $legacy[] = new ArcanistPatchWorkflow();
+ $legacy[] = new ArcanistPasteWorkflow();
+ $legacy[] = new ArcanistTasksWorkflow();
+ $legacy[] = new ArcanistTodoWorkflow();
+ $legacy[] = new ArcanistUnitWorkflow();
+ $legacy[] = new ArcanistWhichWorkflow();
+
+ foreach ($legacy as $workflow) {
+ // If this workflow has been updated but not removed from the list
+ // above yet, just skip it.
+ if ($workflow instanceof ArcanistArcWorkflow) {
+ continue;
+ }
+
+ $workflows[] = $workflow->newLegacyPhutilWorkflow();
+ }
+ }
+
+ return $workflows;
+ }
+
}
diff --git a/src/toolset/ArcanistWorkflowArgument.php b/src/toolset/ArcanistWorkflowArgument.php
--- a/src/toolset/ArcanistWorkflowArgument.php
+++ b/src/toolset/ArcanistWorkflowArgument.php
@@ -41,6 +41,11 @@
$spec['param'] = $parameter;
}
+ $help = $this->getHelp();
+ if ($help !== null) {
+ $spec['help'] = $help;
+ }
+
return $spec;
}
diff --git a/src/toolset/workflow/ArcanistHelpWorkflow.php b/src/toolset/workflow/ArcanistHelpWorkflow.php
--- a/src/toolset/workflow/ArcanistHelpWorkflow.php
+++ b/src/toolset/workflow/ArcanistHelpWorkflow.php
@@ -8,8 +8,7 @@
}
public function newPhutilWorkflow() {
- return id(new PhutilHelpArgumentWorkflow())
- ->setRuntime($this->getRuntime());
+ return new PhutilHelpArgumentWorkflow();
}
public function supportsToolset(ArcanistToolset $toolset) {

File Metadata

Mime Type
text/plain
Expires
Sun, Mar 16, 9:47 AM (1 w, 2 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7225700
Default Alt Text
D21168.id50401.diff (7 KB)

Event Timeline