Allow callers to query information about repository URIs from diffusion.repository.search
Summary: Ref T10748. Adds a "uris" attachment with URI information. Test Plan: Queried URI information via Conduit, saw reasonable looking information. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10748 Differential Revision: https://secure.phabricator.com/D15822
This commit is contained in:
		| @@ -793,6 +793,7 @@ phutil_register_library_map(array( | ||||
|     'DiffusionRepositoryURIViewController' => 'applications/diffusion/controller/DiffusionRepositoryURIViewController.php', | ||||
|     'DiffusionRepositoryURIsIndexEngineExtension' => 'applications/diffusion/engineextension/DiffusionRepositoryURIsIndexEngineExtension.php', | ||||
|     'DiffusionRepositoryURIsManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryURIsManagementPanel.php', | ||||
|     'DiffusionRepositoryURIsSearchEngineAttachment' => 'applications/diffusion/engineextension/DiffusionRepositoryURIsSearchEngineAttachment.php', | ||||
|     'DiffusionRequest' => 'applications/diffusion/request/DiffusionRequest.php', | ||||
|     'DiffusionResolveRefsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionResolveRefsConduitAPIMethod.php', | ||||
|     'DiffusionResolveUserQuery' => 'applications/diffusion/query/DiffusionResolveUserQuery.php', | ||||
| @@ -5022,6 +5023,7 @@ phutil_register_library_map(array( | ||||
|     'DiffusionRepositoryURIViewController' => 'DiffusionController', | ||||
|     'DiffusionRepositoryURIsIndexEngineExtension' => 'PhabricatorIndexEngineExtension', | ||||
|     'DiffusionRepositoryURIsManagementPanel' => 'DiffusionRepositoryManagementPanel', | ||||
|     'DiffusionRepositoryURIsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', | ||||
|     'DiffusionRequest' => 'Phobject', | ||||
|     'DiffusionResolveRefsConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', | ||||
|     'DiffusionResolveUserQuery' => 'Phobject', | ||||
| @@ -7932,6 +7934,7 @@ phutil_register_library_map(array( | ||||
|       'PhabricatorApplicationTransactionInterface', | ||||
|       'PhabricatorPolicyInterface', | ||||
|       'PhabricatorExtendedPolicyInterface', | ||||
|       'PhabricatorConduitResultInterface', | ||||
|     ), | ||||
|     'PhabricatorRepositoryURIIndex' => 'PhabricatorRepositoryDAO', | ||||
|     'PhabricatorRepositoryURINormalizer' => 'Phobject', | ||||
|   | ||||
| @@ -0,0 +1,34 @@ | ||||
| <?php | ||||
|  | ||||
| final class DiffusionRepositoryURIsSearchEngineAttachment | ||||
|   extends PhabricatorSearchEngineAttachment { | ||||
|  | ||||
|   public function getAttachmentName() { | ||||
|     return pht('Repository URIs'); | ||||
|   } | ||||
|  | ||||
|   public function getAttachmentDescription() { | ||||
|     return pht('Get a list of associated URIs for each repository.'); | ||||
|   } | ||||
|  | ||||
|   public function willLoadAttachmentData($query, $spec) { | ||||
|     $query->needURIs(true); | ||||
|   } | ||||
|  | ||||
|   public function getAttachmentForObject($object, $data, $spec) { | ||||
|     $uris = array(); | ||||
|     foreach ($object->getURIs() as $uri) { | ||||
|       $uris[] = array( | ||||
|         'id' => $uri->getID(), | ||||
|         'type' => phid_get_type($uri->getPHID()), | ||||
|         'phid' => $uri->getPHID(), | ||||
|         'fields' => $uri->getFieldValuesForConduit(), | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     return array( | ||||
|       'uris' => $uris, | ||||
|     ); | ||||
|   } | ||||
|  | ||||
| } | ||||
| @@ -2454,6 +2454,10 @@ final class PhabricatorRepository extends PhabricatorRepositoryDAO | ||||
|         ->setKey('shortName') | ||||
|         ->setType('string') | ||||
|         ->setDescription(pht('Unique short name, if the repository has one.')), | ||||
|       id(new PhabricatorConduitSearchFieldSpecification()) | ||||
|         ->setKey('status') | ||||
|         ->setType('string') | ||||
|         ->setDescription(pht('Active or inactive status.')), | ||||
|     ); | ||||
|   } | ||||
|  | ||||
| @@ -2463,11 +2467,15 @@ final class PhabricatorRepository extends PhabricatorRepositoryDAO | ||||
|       'vcs' => $this->getVersionControlSystem(), | ||||
|       'callsign' => $this->getCallsign(), | ||||
|       'shortName' => $this->getRepositorySlug(), | ||||
|       'status' => $this->getStatus(), | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   public function getConduitSearchAttachments() { | ||||
|     return array(); | ||||
|     return array( | ||||
|       id(new DiffusionRepositoryURIsSearchEngineAttachment()) | ||||
|         ->setAttachmentKey('uris'), | ||||
|     ); | ||||
|   } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -5,7 +5,8 @@ final class PhabricatorRepositoryURI | ||||
|   implements | ||||
|     PhabricatorApplicationTransactionInterface, | ||||
|     PhabricatorPolicyInterface, | ||||
|     PhabricatorExtendedPolicyInterface { | ||||
|     PhabricatorExtendedPolicyInterface, | ||||
|     PhabricatorConduitResultInterface { | ||||
|  | ||||
|   protected $repositoryPHID; | ||||
|   protected $uri; | ||||
| @@ -512,4 +513,87 @@ final class PhabricatorRepositoryURI | ||||
|     return $extended; | ||||
|   } | ||||
|  | ||||
|  | ||||
| /* -(  PhabricatorConduitResultInterface  )---------------------------------- */ | ||||
|  | ||||
|  | ||||
|   public function getFieldSpecificationsForConduit() { | ||||
|     return array( | ||||
|       id(new PhabricatorConduitSearchFieldSpecification()) | ||||
|         ->setKey('repositoryPHID') | ||||
|         ->setType('phid') | ||||
|         ->setDescription(pht('The associated repository PHID.')), | ||||
|       id(new PhabricatorConduitSearchFieldSpecification()) | ||||
|         ->setKey('uri') | ||||
|         ->setType('map<string, string>') | ||||
|         ->setDescription(pht('The raw and effective URI.')), | ||||
|       id(new PhabricatorConduitSearchFieldSpecification()) | ||||
|         ->setKey('io') | ||||
|         ->setType('map<string, const>') | ||||
|         ->setDescription( | ||||
|           pht('The raw, default, and effective I/O Type settings.')), | ||||
|       id(new PhabricatorConduitSearchFieldSpecification()) | ||||
|         ->setKey('display') | ||||
|         ->setType('map<string, const>') | ||||
|         ->setDescription( | ||||
|           pht('The raw, default, and effective Display Type settings.')), | ||||
|       id(new PhabricatorConduitSearchFieldSpecification()) | ||||
|         ->setKey('credentialPHID') | ||||
|         ->setType('phid?') | ||||
|         ->setDescription( | ||||
|           pht('The associated credential PHID, if one exists.')), | ||||
|       id(new PhabricatorConduitSearchFieldSpecification()) | ||||
|         ->setKey('disabled') | ||||
|         ->setType('bool') | ||||
|         ->setDescription(pht('True if the URI is disabled.')), | ||||
|       id(new PhabricatorConduitSearchFieldSpecification()) | ||||
|         ->setKey('builtin') | ||||
|         ->setType('map<string, string>') | ||||
|         ->setDescription( | ||||
|           pht('Information about builtin URIs.')), | ||||
|       id(new PhabricatorConduitSearchFieldSpecification()) | ||||
|         ->setKey('dateCreated') | ||||
|         ->setType('int') | ||||
|         ->setDescription( | ||||
|           pht('Epoch timestamp when the object was created.')), | ||||
|       id(new PhabricatorConduitSearchFieldSpecification()) | ||||
|         ->setKey('dateModified') | ||||
|         ->setType('int') | ||||
|         ->setDescription( | ||||
|           pht('Epoch timestamp when the object was last updated.')), | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   public function getFieldValuesForConduit() { | ||||
|     return array( | ||||
|       'repositoryPHID' => $this->getRepositoryPHID(), | ||||
|       'uri' => array( | ||||
|         'raw' => $this->getURI(), | ||||
|         'effective' => (string)$this->getDisplayURI(), | ||||
|       ), | ||||
|       'io' => array( | ||||
|         'raw' => $this->getIOType(), | ||||
|         'default' => $this->getDefaultIOType(), | ||||
|         'effective' => $this->getEffectiveIOType(), | ||||
|       ), | ||||
|       'display' => array( | ||||
|         'raw' => $this->getDisplayType(), | ||||
|         'default' => $this->getDefaultDisplayType(), | ||||
|         'effective' => $this->getEffectiveDisplayType(), | ||||
|       ), | ||||
|       'credentialPHID' => $this->getCredentialPHID(), | ||||
|       'disabled' => (bool)$this->getIsDisabled(), | ||||
|       'builtin' => array( | ||||
|         'protocol' => $this->getBuiltinProtocol(), | ||||
|         'identifier' => $this->getBuiltinIdentifier(), | ||||
|       ), | ||||
|       'dateCreated' => $this->getDateCreated(), | ||||
|       'dateModified' => $this->getDateModified(), | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   public function getConduitSearchAttachments() { | ||||
|     return array(); | ||||
|   } | ||||
|  | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 epriestley
					epriestley