Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14037916
D16928.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Referenced Files
None
Subscribers
None
D16928.diff
View Options
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -350,6 +350,7 @@
'ArcanistSemicolonSpacingXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistSemicolonSpacingXHPASTLinterRule.php',
'ArcanistSemicolonSpacingXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistSemicolonSpacingXHPASTLinterRuleTestCase.php',
'ArcanistSetConfigWorkflow' => 'workflow/ArcanistSetConfigWorkflow.php',
+ 'ArcanistSetting' => 'configuration/ArcanistSetting.php',
'ArcanistSettings' => 'configuration/ArcanistSettings.php',
'ArcanistShellCompleteWorkflow' => 'workflow/ArcanistShellCompleteWorkflow.php',
'ArcanistSingleLintEngine' => 'lint/engine/ArcanistSingleLintEngine.php',
@@ -787,6 +788,7 @@
'ArcanistSemicolonSpacingXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistSemicolonSpacingXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
'ArcanistSetConfigWorkflow' => 'ArcanistWorkflow',
+ 'ArcanistSetting' => 'Phobject',
'ArcanistSettings' => 'Phobject',
'ArcanistShellCompleteWorkflow' => 'ArcanistWorkflow',
'ArcanistSingleLintEngine' => 'ArcanistLintEngine',
diff --git a/src/browse/workflow/ArcanistBrowseWorkflow.php b/src/browse/workflow/ArcanistBrowseWorkflow.php
--- a/src/browse/workflow/ArcanistBrowseWorkflow.php
+++ b/src/browse/workflow/ArcanistBrowseWorkflow.php
@@ -154,6 +154,9 @@
}
}
+ $pick_map = array();
+ $pick_selection = null;
+ $pick_id = 0;
if ($many_hits) {
foreach ($many_hits as $ref) {
$token = $ref->getToken();
@@ -166,8 +169,17 @@
$this->writeWarn(pht('AMBIGUOUS'), $message);
}
- $table = id(new PhutilConsoleTable())
- ->addColumn('argument', array('title' => pht('Argument')))
+ $is_single_ref = (count($refs) == 1);
+
+ $table = id(new PhutilConsoleTable());
+
+ if ($is_single_ref) {
+ $table->addColumn('pick', array('title' => pht('Pick')));
+ } else {
+ $table->addColumn('argument', array('title' => pht('Argument')));
+ }
+
+ $table
->addColumn('type', array('title' => pht('Type')))
->addColumn('uri', array('title' => pht('URI')));
@@ -178,7 +190,11 @@
}
foreach ($ref->getURIs() as $uri) {
+ ++$pick_id;
+ $pick_map[$pick_id] = $uri;
+
$row = array(
+ 'pick' => $pick_id,
'argument' => $token_display,
'type' => $uri->getType(),
'uri' => $uri->getURI(),
@@ -190,9 +206,17 @@
$table->draw();
- $this->writeInfo(
- pht('CHOOSE'),
- pht('Use "--types" to select between alternatives.'));
+ if ($is_single_ref) {
+ $pick_selection = phutil_console_select(
+ pht('Which URI do you want to open?'),
+ 1,
+ $pick_id);
+ $open_uris[] = $ref;
+ } else {
+ $this->writeInfo(
+ pht('CHOOSE'),
+ pht('Use "--types" to select between alternatives.'));
+ }
}
// If anything failed to resolve, this is also an error.
@@ -212,7 +236,17 @@
$uris = array();
foreach ($open_uris as $ref) {
- $ref_uri = head($ref->getURIs());
+ $ref_uris = $ref->getURIs();
+
+ if (count($ref_uris) > 1) {
+ foreach ($ref_uris as $uri_key => $uri) {
+ if ($pick_map[$pick_selection] !== $uri) {
+ unset($ref_uris[$uri_key]);
+ }
+ }
+ }
+
+ $ref_uri = head($ref_uris);
$uris[] = $ref_uri->getURI();
}
diff --git a/src/configuration/ArcanistSetting.php b/src/configuration/ArcanistSetting.php
new file mode 100644
--- /dev/null
+++ b/src/configuration/ArcanistSetting.php
@@ -0,0 +1,48 @@
+<?php
+
+abstract class ArcanistSetting
+ extends Phobject {
+
+ final public function getSettingKey() {
+ return $this->getPhobjectClassConstant('SETTINGKEY', 32);
+ }
+
+ public function getAliases() {
+ return array();
+ }
+
+ abstract public function getHelp();
+ abstract public function getType();
+
+ public function getExample() {
+ return null;
+ }
+
+ final public function getLegacyDictionary() {
+ $result = array(
+ 'type' => $this->getType(),
+ 'help' => $this->getHelp(),
+ );
+
+ $example = $this->getExample();
+ if ($example !== null) {
+ $result['example'] = $example;
+ }
+
+ $aliases = $this->getAliases();
+ if ($aliases) {
+ $result['legacy'] = head($aliases);
+ }
+
+ return $result;
+ }
+
+ final public static function getAllSettings() {
+ return id(new PhutilClassMapQuery())
+ ->setAncestorClass(__CLASS__)
+ ->setUniqueMethod('getSettingKey')
+ ->setSortMethod('getSettingKey')
+ ->execute();
+ }
+
+}
diff --git a/src/configuration/ArcanistSettings.php b/src/configuration/ArcanistSettings.php
--- a/src/configuration/ArcanistSettings.php
+++ b/src/configuration/ArcanistSettings.php
@@ -3,7 +3,7 @@
final class ArcanistSettings extends Phobject {
private function getOptions() {
- return array(
+ $legacy_builtins = array(
'default' => array(
'type' => 'string',
'help' => pht(
@@ -175,6 +175,16 @@
'Configured command aliases. Use "arc alias" to define aliases.'),
),
);
+
+ $settings = ArcanistSetting::getAllSettings();
+ foreach ($settings as $key => $setting) {
+ $settings[$key] = $setting->getLegacyDictionary();
+ }
+
+ $results = $settings + $legacy_builtins;
+ ksort($results);
+
+ return $results;
}
private function getOption($key) {
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Nov 11, 8:08 PM (2 d, 7 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6719119
Default Alt Text
D16928.diff (5 KB)
Attached To
Mode
D16928: Modularize Arcanist settings, let users pick between ambiguous interpretations of `arc browse ...`
Attached
Detach File
Event Timeline
Log In to Comment