1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-11-26 00:32:41 +01:00

Make arc shell-complete more robust.

Summary: Fixes T5122. Add some basic error handling to the `shell-complete` workflow.

Test Plan: `arc shell-complete` no longer throws errors.

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: epriestley, Korvin

Maniphest Tasks: T5122

Differential Revision: https://secure.phabricator.com/D9268
This commit is contained in:
Joshua Spence 2014-05-23 07:58:12 -07:00 committed by epriestley
parent f64dee022e
commit 85b8b2e5f8

View file

@ -30,8 +30,9 @@ EOTEXT
public function getArguments() {
return array(
'current' => array(
'help' => 'Current term in the argument list being completed.',
'param' => 'cursor_position',
'paramtype' => 'int',
'help' => 'Current term in the argument list being completed.',
),
'*' => 'argv',
);
@ -42,7 +43,6 @@ EOTEXT
}
public function run() {
$pos = $this->getArgument('current');
$argv = $this->getArgument('argv', array());
$argc = count($argv);
@ -50,6 +50,11 @@ EOTEXT
$pos = $argc - 1;
}
if ($pos > $argc) {
throw new ArcanistUsageException(
'Specified position is greater than the number of arguments provided.');
}
// Determine which revision control system the working copy uses, so we
// can filter out commands and flags which aren't supported. If we can't
// figure it out, just return all flags/commands.
@ -70,7 +75,7 @@ EOTEXT
$arc_config = $this->getArcanistConfiguration();
if ($pos == 1) {
if ($pos <= 1) {
$workflows = $arc_config->buildAllWorkflows();
$complete = array();
@ -81,8 +86,7 @@ EOTEXT
$supported = $workflow->getSupportedRevisionControlSystems();
$ok = (in_array('any', $supported)) ||
(in_array($vcs, $supported));
$ok = (in_array('any', $supported) || in_array($vcs, $supported));
if (!$ok) {
continue;
}
@ -146,7 +150,6 @@ EOTEXT
}
return 0;
} else {
$output = array();
foreach ($arguments as $argument => $spec) {
if ($argument == '*') {
@ -181,7 +184,7 @@ EOTEXT
$branches = ipull($branches, 'name');
$output = $branches;
} else {
$output = array("FILE");
$output = array('FILE');
}
}