Changeset View
Changeset View
Standalone View
Standalone View
src/repository/remote/ArcanistRemoteRepositoryRefsHardpointQuery.php
- This file was added.
| <?php | |||||
| final class ArcanistRemoteRepositoryRefsHardpointQuery | |||||
| extends ArcanistRuntimeHardpointQuery { | |||||
| public function getHardpoints() { | |||||
| return array( | |||||
| ArcanistRemoteRef::HARDPOINT_REPOSITORYREFS, | |||||
| ); | |||||
| } | |||||
| protected function canLoadRef(ArcanistRef $ref) { | |||||
| return ($ref instanceof ArcanistRemoteRef); | |||||
| } | |||||
| public function loadHardpoint(array $refs, $hardpoint) { | |||||
| $api = $this->getRepositoryAPI(); | |||||
| $uris = array(); | |||||
| foreach ($refs as $remote) { | |||||
| $fetch_uri = $remote->getFetchURI(); | |||||
| if ($fetch_uri !== null) { | |||||
| $uris[] = $fetch_uri; | |||||
| } | |||||
| $push_uri = $remote->getPushURI(); | |||||
| if ($push_uri !== null) { | |||||
| $uris[] = $push_uri; | |||||
| } | |||||
| } | |||||
| if (!$uris) { | |||||
| yield $this->yieldValue($refs, array()); | |||||
| } | |||||
| $uris = array_fuse($uris); | |||||
| $uris = array_values($uris); | |||||
| $search_future = $this->newConduitSearch( | |||||
| 'diffusion.repository.search', | |||||
| array( | |||||
| 'uris' => $uris, | |||||
| ), | |||||
| array( | |||||
| 'uris' => true, | |||||
| )); | |||||
| $repository_info = (yield $this->yieldFuture($search_future)); | |||||
| $repository_refs = array(); | |||||
| foreach ($repository_info as $raw_result) { | |||||
| $repository_refs[] = ArcanistRepositoryRef::newFromConduit($raw_result); | |||||
| } | |||||
| $uri_map = array(); | |||||
| foreach ($repository_refs as $repository_ref) { | |||||
| foreach ($repository_ref->getURIs() as $repository_uri) { | |||||
| $repository_uri = $api->getNormalizedURI($repository_uri); | |||||
| $uri_map[$repository_uri] = $repository_ref; | |||||
| } | |||||
| } | |||||
| $results = array(); | |||||
| foreach ($refs as $key => $remote) { | |||||
| $result = array(); | |||||
| $fetch_uri = $remote->getFetchURI(); | |||||
| if ($fetch_uri !== null) { | |||||
| $fetch_uri = $api->getNormalizedURI($fetch_uri); | |||||
| if (isset($uri_map[$fetch_uri])) { | |||||
| $result[] = $uri_map[$fetch_uri]; | |||||
| } | |||||
| } | |||||
| $push_uri = $remote->getPushURI(); | |||||
| if ($push_uri !== null) { | |||||
| $push_uri = $api->getNormalizedURI($push_uri); | |||||
| if (isset($uri_map[$push_uri])) { | |||||
| $result[] = $uri_map[$push_uri]; | |||||
| } | |||||
| } | |||||
| $results[$key] = $result; | |||||
| } | |||||
| yield $this->yieldMap($results); | |||||
| } | |||||
| } | |||||