2020-04-10 05:28:55 -07:00
|
|
|
<?php
|
|
|
|
|
|
|
|
final class ArcanistGitWorkingCopyRevisionHardpointQuery
|
|
|
|
extends ArcanistWorkflowGitHardpointQuery {
|
|
|
|
|
|
|
|
public function getHardpoints() {
|
|
|
|
return array(
|
2020-04-11 06:16:22 -07:00
|
|
|
ArcanistWorkingCopyStateRef::HARDPOINT_REVISIONREFS,
|
2020-04-10 05:28:55 -07:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2020-04-11 06:16:22 -07:00
|
|
|
protected function canLoadRef(ArcanistRef $ref) {
|
|
|
|
return ($ref instanceof ArcanistWorkingCopyStateRef);
|
2020-04-10 05:28:55 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
public function loadHardpoint(array $refs, $hardpoint) {
|
|
|
|
yield $this->yieldRequests(
|
|
|
|
$refs,
|
|
|
|
array(
|
2020-04-11 06:16:22 -07:00
|
|
|
ArcanistWorkingCopyStateRef::HARDPOINT_COMMITREF,
|
2020-04-10 05:28:55 -07:00
|
|
|
));
|
|
|
|
|
|
|
|
$hashes = array();
|
|
|
|
$map = array();
|
|
|
|
foreach ($refs as $ref_key => $ref) {
|
|
|
|
$commit = $ref->getCommitRef();
|
|
|
|
|
|
|
|
$commit_hashes = array();
|
|
|
|
|
|
|
|
$commit_hashes[] = array(
|
|
|
|
'gtcm',
|
|
|
|
$commit->getCommitHash(),
|
|
|
|
);
|
|
|
|
|
|
|
|
if ($commit->getTreeHash()) {
|
|
|
|
$commit_hashes[] = array(
|
|
|
|
'gttr',
|
|
|
|
$commit->getTreeHash(),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($commit_hashes as $hash) {
|
|
|
|
$hashes[] = $hash;
|
|
|
|
$hash_key = $this->getHashKey($hash);
|
|
|
|
$map[$hash_key][$ref_key] = $ref;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$results = array_fill_keys(array_keys($refs), array());
|
|
|
|
if ($hashes) {
|
|
|
|
$revisions = (yield $this->yieldConduit(
|
|
|
|
'differential.query',
|
|
|
|
array(
|
|
|
|
'commitHashes' => $hashes,
|
|
|
|
)));
|
|
|
|
|
|
|
|
foreach ($revisions as $dict) {
|
|
|
|
$revision_hashes = idx($dict, 'hashes');
|
|
|
|
if (!$revision_hashes) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2020-04-11 06:16:22 -07:00
|
|
|
$revision_ref = ArcanistRevisionRef::newFromConduit($dict);
|
2020-04-10 05:28:55 -07:00
|
|
|
foreach ($revision_hashes as $revision_hash) {
|
|
|
|
$hash_key = $this->getHashKey($revision_hash);
|
|
|
|
$state_refs = idx($map, $hash_key, array());
|
|
|
|
foreach ($state_refs as $ref_key => $state_ref) {
|
|
|
|
$results[$ref_key][] = $revision_ref;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
yield $this->yieldMap($results);
|
|
|
|
}
|
|
|
|
|
|
|
|
private function getHashKey(array $hash) {
|
|
|
|
return $hash[0].':'.$hash[1];
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|