Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15391416
D21168.id50401.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Referenced Files
None
Subscribers
None
D21168.id50401.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D21168: Make "arc <workflow> --help" work again for workflows which haven't updated yet
Attached
Detach File
Event Timeline
Log In to Comment