Skip to content

Commit c314a36

Browse files
author
epriestley
committedApr 29, 2016
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
1 parent da59938 commit c314a36

File tree

4 files changed

+131
-2
lines changed

4 files changed

+131
-2
lines changed
 

‎src/__phutil_library_map__.php

+3
Original file line numberDiff line numberDiff line change
@@ -793,6 +793,7 @@
793793
'DiffusionRepositoryURIViewController' => 'applications/diffusion/controller/DiffusionRepositoryURIViewController.php',
794794
'DiffusionRepositoryURIsIndexEngineExtension' => 'applications/diffusion/engineextension/DiffusionRepositoryURIsIndexEngineExtension.php',
795795
'DiffusionRepositoryURIsManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryURIsManagementPanel.php',
796+
'DiffusionRepositoryURIsSearchEngineAttachment' => 'applications/diffusion/engineextension/DiffusionRepositoryURIsSearchEngineAttachment.php',
796797
'DiffusionRequest' => 'applications/diffusion/request/DiffusionRequest.php',
797798
'DiffusionResolveRefsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionResolveRefsConduitAPIMethod.php',
798799
'DiffusionResolveUserQuery' => 'applications/diffusion/query/DiffusionResolveUserQuery.php',
@@ -5022,6 +5023,7 @@
50225023
'DiffusionRepositoryURIViewController' => 'DiffusionController',
50235024
'DiffusionRepositoryURIsIndexEngineExtension' => 'PhabricatorIndexEngineExtension',
50245025
'DiffusionRepositoryURIsManagementPanel' => 'DiffusionRepositoryManagementPanel',
5026+
'DiffusionRepositoryURIsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment',
50255027
'DiffusionRequest' => 'Phobject',
50265028
'DiffusionResolveRefsConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
50275029
'DiffusionResolveUserQuery' => 'Phobject',
@@ -7932,6 +7934,7 @@
79327934
'PhabricatorApplicationTransactionInterface',
79337935
'PhabricatorPolicyInterface',
79347936
'PhabricatorExtendedPolicyInterface',
7937+
'PhabricatorConduitResultInterface',
79357938
),
79367939
'PhabricatorRepositoryURIIndex' => 'PhabricatorRepositoryDAO',
79377940
'PhabricatorRepositoryURINormalizer' => 'Phobject',
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
final class DiffusionRepositoryURIsSearchEngineAttachment
4+
extends PhabricatorSearchEngineAttachment {
5+
6+
public function getAttachmentName() {
7+
return pht('Repository URIs');
8+
}
9+
10+
public function getAttachmentDescription() {
11+
return pht('Get a list of associated URIs for each repository.');
12+
}
13+
14+
public function willLoadAttachmentData($query, $spec) {
15+
$query->needURIs(true);
16+
}
17+
18+
public function getAttachmentForObject($object, $data, $spec) {
19+
$uris = array();
20+
foreach ($object->getURIs() as $uri) {
21+
$uris[] = array(
22+
'id' => $uri->getID(),
23+
'type' => phid_get_type($uri->getPHID()),
24+
'phid' => $uri->getPHID(),
25+
'fields' => $uri->getFieldValuesForConduit(),
26+
);
27+
}
28+
29+
return array(
30+
'uris' => $uris,
31+
);
32+
}
33+
34+
}

‎src/applications/repository/storage/PhabricatorRepository.php

+9-1
Original file line numberDiff line numberDiff line change
@@ -2454,6 +2454,10 @@ public function getFieldSpecificationsForConduit() {
24542454
->setKey('shortName')
24552455
->setType('string')
24562456
->setDescription(pht('Unique short name, if the repository has one.')),
2457+
id(new PhabricatorConduitSearchFieldSpecification())
2458+
->setKey('status')
2459+
->setType('string')
2460+
->setDescription(pht('Active or inactive status.')),
24572461
);
24582462
}
24592463

@@ -2463,11 +2467,15 @@ public function getFieldValuesForConduit() {
24632467
'vcs' => $this->getVersionControlSystem(),
24642468
'callsign' => $this->getCallsign(),
24652469
'shortName' => $this->getRepositorySlug(),
2470+
'status' => $this->getStatus(),
24662471
);
24672472
}
24682473

24692474
public function getConduitSearchAttachments() {
2470-
return array();
2475+
return array(
2476+
id(new DiffusionRepositoryURIsSearchEngineAttachment())
2477+
->setAttachmentKey('uris'),
2478+
);
24712479
}
24722480

24732481
}

‎src/applications/repository/storage/PhabricatorRepositoryURI.php

+85-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ final class PhabricatorRepositoryURI
55
implements
66
PhabricatorApplicationTransactionInterface,
77
PhabricatorPolicyInterface,
8-
PhabricatorExtendedPolicyInterface {
8+
PhabricatorExtendedPolicyInterface,
9+
PhabricatorConduitResultInterface {
910

1011
protected $repositoryPHID;
1112
protected $uri;
@@ -512,4 +513,87 @@ public function getExtendedPolicy($capability, PhabricatorUser $viewer) {
512513
return $extended;
513514
}
514515

516+
517+
/* -( PhabricatorConduitResultInterface )---------------------------------- */
518+
519+
520+
public function getFieldSpecificationsForConduit() {
521+
return array(
522+
id(new PhabricatorConduitSearchFieldSpecification())
523+
->setKey('repositoryPHID')
524+
->setType('phid')
525+
->setDescription(pht('The associated repository PHID.')),
526+
id(new PhabricatorConduitSearchFieldSpecification())
527+
->setKey('uri')
528+
->setType('map<string, string>')
529+
->setDescription(pht('The raw and effective URI.')),
530+
id(new PhabricatorConduitSearchFieldSpecification())
531+
->setKey('io')
532+
->setType('map<string, const>')
533+
->setDescription(
534+
pht('The raw, default, and effective I/O Type settings.')),
535+
id(new PhabricatorConduitSearchFieldSpecification())
536+
->setKey('display')
537+
->setType('map<string, const>')
538+
->setDescription(
539+
pht('The raw, default, and effective Display Type settings.')),
540+
id(new PhabricatorConduitSearchFieldSpecification())
541+
->setKey('credentialPHID')
542+
->setType('phid?')
543+
->setDescription(
544+
pht('The associated credential PHID, if one exists.')),
545+
id(new PhabricatorConduitSearchFieldSpecification())
546+
->setKey('disabled')
547+
->setType('bool')
548+
->setDescription(pht('True if the URI is disabled.')),
549+
id(new PhabricatorConduitSearchFieldSpecification())
550+
->setKey('builtin')
551+
->setType('map<string, string>')
552+
->setDescription(
553+
pht('Information about builtin URIs.')),
554+
id(new PhabricatorConduitSearchFieldSpecification())
555+
->setKey('dateCreated')
556+
->setType('int')
557+
->setDescription(
558+
pht('Epoch timestamp when the object was created.')),
559+
id(new PhabricatorConduitSearchFieldSpecification())
560+
->setKey('dateModified')
561+
->setType('int')
562+
->setDescription(
563+
pht('Epoch timestamp when the object was last updated.')),
564+
);
565+
}
566+
567+
public function getFieldValuesForConduit() {
568+
return array(
569+
'repositoryPHID' => $this->getRepositoryPHID(),
570+
'uri' => array(
571+
'raw' => $this->getURI(),
572+
'effective' => (string)$this->getDisplayURI(),
573+
),
574+
'io' => array(
575+
'raw' => $this->getIOType(),
576+
'default' => $this->getDefaultIOType(),
577+
'effective' => $this->getEffectiveIOType(),
578+
),
579+
'display' => array(
580+
'raw' => $this->getDisplayType(),
581+
'default' => $this->getDefaultDisplayType(),
582+
'effective' => $this->getEffectiveDisplayType(),
583+
),
584+
'credentialPHID' => $this->getCredentialPHID(),
585+
'disabled' => (bool)$this->getIsDisabled(),
586+
'builtin' => array(
587+
'protocol' => $this->getBuiltinProtocol(),
588+
'identifier' => $this->getBuiltinIdentifier(),
589+
),
590+
'dateCreated' => $this->getDateCreated(),
591+
'dateModified' => $this->getDateModified(),
592+
);
593+
}
594+
595+
public function getConduitSearchAttachments() {
596+
return array();
597+
}
598+
515599
}

0 commit comments

Comments
 (0)
Failed to load comments.