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

Upgrade (most) Differential API callsites to "differential.revision.search"

Summary: Ref T13490. The "RevisionRef" is currently based on "differential.query" data, but all calls other than the hash-based lookup can move to "differential.revision.search".

Test Plan: Ran revision workflows like `arc inspect` and `arc browse`.

Maniphest Tasks: T13490

Differential Revision: https://secure.phabricator.com/D21099
This commit is contained in:
epriestley 2020-04-13 04:58:04 -07:00
parent ab589ab31d
commit 4719341c27
7 changed files with 91 additions and 25 deletions

View file

@ -233,7 +233,24 @@ EOTEXT
} }
$ref_uri = head($ref_uris); $ref_uri = head($ref_uris);
$uris[] = $ref_uri->getURI();
// TODO: "ArcanistRevisionRef", at least, may return a relative URI.
// If we get a relative URI, guess the correct absolute URI based on
// the Conduit URI. This might not be correct for Conduit over SSH.
$raw_uri = $ref_uri->getURI();
$raw_uri = new PhutilURI($raw_uri);
if (!strlen($raw_uri->getDomain())) {
$base_uri = $this->getConduitEngine()
->getConduitURI();
$raw_uri = id(new PhutilURI($base_uri))
->setPath($raw_uri->getPath());
}
$raw_uri = phutil_string_cast($raw_uri);
$uris[] = $raw_uri;
} }
$this->openURIsInBrowser($uris); $this->openURIsInBrowser($uris);

View file

@ -60,7 +60,7 @@ final class ArcanistGitWorkingCopyRevisionHardpointQuery
continue; continue;
} }
$revision_ref = ArcanistRevisionRef::newFromConduit($dict); $revision_ref = ArcanistRevisionRef::newFromConduitQuery($dict);
foreach ($revision_hashes as $revision_hash) { foreach ($revision_hashes as $revision_hash) {
$hash_key = $this->getHashKey($revision_hash); $hash_key = $this->getHashKey($revision_hash);
$state_refs = idx($map, $hash_key, array()); $state_refs = idx($map, $hash_key, array());

View file

@ -53,8 +53,8 @@ final class ArcanistMessageRevisionHardpointQuery
$results = array(); $results = array();
if ($map) { if ($map) {
$revisions = (yield $this->yieldConduit( $revisions = (yield $this->yieldConduitSearch(
'differential.query', 'differential.revision.search',
array( array(
'ids' => array_keys($map), 'ids' => array_keys($map),
))); )));

View file

@ -26,28 +26,59 @@ final class ArcanistRevisionRef
return $ref; return $ref;
} }
public static function newFromConduitQuery(array $dict) {
// Mangle an older "differential.query" result to look like a modern
// "differential.revision.search" result.
$status_name = idx($dict, 'statusName');
switch ($status_name) {
case 'Abandoned':
case 'Closed':
$is_closed = true;
break;
default:
$is_closed = false;
break;
}
$dict['fields'] = array(
'uri' => idx($dict, 'uri'),
'title' => idx($dict, 'title'),
'authorPHID' => idx($dict, 'authorPHID'),
'status' => array(
'name' => $status_name,
'closed' => $is_closed,
),
);
return self::newFromConduit($dict);
}
public function getMonogram() { public function getMonogram() {
return 'D'.$this->getID(); return 'D'.$this->getID();
} }
public function getStatusDisplayName() { public function getStatusDisplayName() {
return idx($this->parameters, 'statusName'); return idxv($this->parameters, array('fields', 'status', 'name'));
} }
public function isClosed() { public function isClosed() {
// TODO: This should use sensible constants, not English language return idxv($this->parameters, array('fields', 'status', 'closed'));
// display text.
switch ($this->getStatusDisplayName()) {
case 'Abandoned':
case 'Closed':
return true;
}
return false;
} }
public function getURI() { public function getURI() {
return idx($this->parameters, 'uri'); $uri = idxv($this->parameters, array('fields', 'uri'));
if ($uri === null) {
// TODO: The "uri" field was added at the same time as this callsite,
// so we may not have it yet if the server is running an older version
// of Phabricator. Fake our way through.
$uri = '/'.$this->getMonogram();
}
return $uri;
} }
public function getFullName() { public function getFullName() {
@ -63,11 +94,11 @@ final class ArcanistRevisionRef
} }
public function getName() { public function getName() {
return idx($this->parameters, 'title'); return idxv($this->parameters, array('fields', 'title'));
} }
public function getAuthorPHID() { public function getAuthorPHID() {
return idx($this->parameters, 'authorPHID'); return idxv($this->parameters, array('fields', 'authorPHID'));
} }
public function addSource(ArcanistRevisionRefSource $source) { public function addSource(ArcanistRevisionRefSource $source) {

View file

@ -17,10 +17,10 @@ final class ArcanistRevisionSymbolHardpointQuery
$id_map = mpull($refs, 'getSymbol'); $id_map = mpull($refs, 'getSymbol');
$id_set = array_fuse($id_map); $id_set = array_fuse($id_map);
$revisions = (yield $this->yieldConduit( $revisions = (yield $this->yieldConduitSearch(
'differential.query', 'differential.revision.search',
array( array(
'ids' => $id_set, 'ids' => array_values($id_set),
))); )));
$refs = array(); $refs = array();

View file

@ -33,6 +33,16 @@ EOTEXT
); );
} }
protected function newPrompts() {
return array(
$this->newPrompt('arc.liberate.create')
->setDescription(
pht(
'Confirms creation of a new library.')),
);
}
public function runWorkflow() { public function runWorkflow() {
$log = $this->getLogEngine(); $log = $this->getLogEngine();
@ -154,10 +164,18 @@ EOTEXT
return; return;
} }
echo pht("The directory '%s' does not exist.", $path); echo tsprintf(
if (!phutil_console_confirm(pht('Do you want to create it?'))) { "%!\n%W\n",
throw new ArcanistUsageException(pht('Cancelled.')); pht('NEW LIBRARY'),
} pht(
'The directory "%s" does not exist. Do you want to create it?',
$path));
$query = pht('Create new library?');
$this->getPrompt('arc.liberate.create')
->setQuery($query)
->execute();
execx('mkdir -p %R', $path); execx('mkdir -p %R', $path);
} }

View file

@ -2140,7 +2140,7 @@ abstract class ArcanistWorkflow extends Phobject {
'Failed to open URI "%s" in browser ("%s"). '. 'Failed to open URI "%s" in browser ("%s"). '.
'Check your "browser" config option.', 'Check your "browser" config option.',
$uri, $uri,
$browser)); implode(' ', $browser)));
} }
} }
} }