Page MenuHomePhabricator

D18744.id44984.diff
No OneTemporary

D18744.id44984.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -439,6 +439,8 @@
'DifferentialDiffQuery' => 'applications/differential/query/DifferentialDiffQuery.php',
'DifferentialDiffRepositoryHeraldField' => 'applications/differential/herald/DifferentialDiffRepositoryHeraldField.php',
'DifferentialDiffRepositoryProjectsHeraldField' => 'applications/differential/herald/DifferentialDiffRepositoryProjectsHeraldField.php',
+ 'DifferentialDiffSearchConduitAPIMethod' => 'applications/differential/conduit/DifferentialDiffSearchConduitAPIMethod.php',
+ 'DifferentialDiffSearchEngine' => 'applications/differential/query/DifferentialDiffSearchEngine.php',
'DifferentialDiffTestCase' => 'applications/differential/storage/__tests__/DifferentialDiffTestCase.php',
'DifferentialDiffTransaction' => 'applications/differential/storage/DifferentialDiffTransaction.php',
'DifferentialDiffTransactionQuery' => 'applications/differential/query/DifferentialDiffTransactionQuery.php',
@@ -5435,6 +5437,7 @@
'HarbormasterBuildkiteBuildableInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorDestructibleInterface',
+ 'PhabricatorConduitResultInterface',
),
'DifferentialDiffAffectedFilesHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffAuthorHeraldField' => 'DifferentialDiffHeraldField',
@@ -5453,6 +5456,8 @@
'DifferentialDiffQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DifferentialDiffRepositoryHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffRepositoryProjectsHeraldField' => 'DifferentialDiffHeraldField',
+ 'DifferentialDiffSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',
+ 'DifferentialDiffSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DifferentialDiffTestCase' => 'PhutilTestCase',
'DifferentialDiffTransaction' => 'PhabricatorApplicationTransaction',
'DifferentialDiffTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
diff --git a/src/applications/differential/conduit/DifferentialDiffSearchConduitAPIMethod.php b/src/applications/differential/conduit/DifferentialDiffSearchConduitAPIMethod.php
new file mode 100644
--- /dev/null
+++ b/src/applications/differential/conduit/DifferentialDiffSearchConduitAPIMethod.php
@@ -0,0 +1,18 @@
+<?php
+
+final class DifferentialDiffSearchConduitAPIMethod
+ extends PhabricatorSearchEngineAPIMethod {
+
+ public function getAPIMethodName() {
+ return 'differential.diff.search';
+ }
+
+ public function newSearchEngine() {
+ return new DifferentialDiffSearchEngine();
+ }
+
+ public function getMethodSummary() {
+ return pht('Read information about diffs.');
+ }
+
+}
diff --git a/src/applications/differential/conduit/DifferentialQueryDiffsConduitAPIMethod.php b/src/applications/differential/conduit/DifferentialQueryDiffsConduitAPIMethod.php
--- a/src/applications/differential/conduit/DifferentialQueryDiffsConduitAPIMethod.php
+++ b/src/applications/differential/conduit/DifferentialQueryDiffsConduitAPIMethod.php
@@ -11,6 +11,16 @@
return pht('Query differential diffs which match certain criteria.');
}
+ public function getMethodStatus() {
+ return self::METHOD_STATUS_FROZEN;
+ }
+
+ public function getMethodStatusDescription() {
+ return pht(
+ 'This method is frozen and will eventually be deprecated. New code '.
+ 'should use "differential.diff.search" instead.');
+ }
+
protected function defineParamTypes() {
return array(
'ids' => 'optional list<uint>',
diff --git a/src/applications/differential/query/DifferentialDiffQuery.php b/src/applications/differential/query/DifferentialDiffQuery.php
--- a/src/applications/differential/query/DifferentialDiffQuery.php
+++ b/src/applications/differential/query/DifferentialDiffQuery.php
@@ -6,6 +6,7 @@
private $ids;
private $phids;
private $revisionIDs;
+ private $revisionPHIDs;
private $commitPHIDs;
private $hasRevision;
@@ -27,6 +28,11 @@
return $this;
}
+ public function withRevisionPHIDs(array $revision_phids) {
+ $this->revisionPHIDs = $revision_phids;
+ return $this;
+ }
+
public function withCommitPHIDs(array $phids) {
$this->commitPHIDs = $phids;
return $this;
@@ -160,6 +166,25 @@
}
}
+ if ($this->revisionPHIDs !== null) {
+ $viewer = $this->getViewer();
+
+ $revisions = id(new DifferentialRevisionQuery())
+ ->setViewer($viewer)
+ ->setParentQuery($this)
+ ->withPHIDs($this->revisionPHIDs)
+ ->execute();
+ $revision_ids = mpull($revisions, 'getID');
+ if (!$revision_ids) {
+ throw new PhabricatorEmptyQueryException();
+ }
+
+ $where[] = qsprintf(
+ $conn,
+ 'revisionID IN (%Ls)',
+ $revision_ids);
+ }
+
return $where;
}
diff --git a/src/applications/differential/query/DifferentialDiffSearchEngine.php b/src/applications/differential/query/DifferentialDiffSearchEngine.php
new file mode 100644
--- /dev/null
+++ b/src/applications/differential/query/DifferentialDiffSearchEngine.php
@@ -0,0 +1,79 @@
+<?php
+
+final class DifferentialDiffSearchEngine
+ extends PhabricatorApplicationSearchEngine {
+
+ public function getResultTypeDescription() {
+ return pht('Differential Diffs');
+ }
+
+ public function getApplicationClassName() {
+ return 'PhabricatorDifferentialApplication';
+ }
+
+ public function newQuery() {
+ return new DifferentialDiffQuery();
+ }
+
+ protected function buildQueryFromParameters(array $map) {
+ $query = $this->newQuery();
+
+ if ($map['revisionPHIDs']) {
+ $query->withRevisionPHIDs($map['revisionPHIDs']);
+ }
+
+ return $query;
+ }
+
+ protected function buildCustomSearchFields() {
+ return array(
+ id(new PhabricatorPHIDsSearchField())
+ ->setLabel(pht('Revisions'))
+ ->setKey('revisionPHIDs')
+ ->setAliases(array('revision', 'revisions', 'revisionPHID'))
+ ->setDescription(
+ pht('Find diffs attached to a particular revision.')),
+ );
+ }
+
+ protected function getURI($path) {
+ return '/differential/diff/'.$path;
+ }
+
+ protected function getBuiltinQueryNames() {
+ $names = array();
+
+ $names['all'] = pht('All Diffs');
+
+ return $names;
+ }
+
+ public function buildSavedQueryFromBuiltin($query_key) {
+ $query = $this->newSavedQuery();
+ $query->setQueryKey($query_key);
+
+ $viewer = $this->requireViewer();
+
+ switch ($query_key) {
+ case 'all':
+ return $query;
+ }
+
+ return parent::buildSavedQueryFromBuiltin($query_key);
+ }
+
+ protected function renderResultList(
+ array $revisions,
+ PhabricatorSavedQuery $query,
+ array $handles) {
+ assert_instances_of($revisions, 'DifferentialDiff');
+
+ $viewer = $this->requireViewer();
+
+ // NOTE: This is only exposed to Conduit, so we don't currently render
+ // results.
+
+ return id(new PhabricatorApplicationSearchResultView());
+ }
+
+}
diff --git a/src/applications/differential/storage/DifferentialDiff.php b/src/applications/differential/storage/DifferentialDiff.php
--- a/src/applications/differential/storage/DifferentialDiff.php
+++ b/src/applications/differential/storage/DifferentialDiff.php
@@ -9,7 +9,8 @@
HarbormasterCircleCIBuildableInterface,
HarbormasterBuildkiteBuildableInterface,
PhabricatorApplicationTransactionInterface,
- PhabricatorDestructibleInterface {
+ PhabricatorDestructibleInterface,
+ PhabricatorConduitResultInterface {
protected $revisionID;
protected $authorPHID;
@@ -740,4 +741,82 @@
$this->saveTransaction();
}
+
+/* -( PhabricatorConduitResultInterface )---------------------------------- */
+
+
+ public function getFieldSpecificationsForConduit() {
+ return array(
+ id(new PhabricatorConduitSearchFieldSpecification())
+ ->setKey('revisionPHID')
+ ->setType('phid')
+ ->setDescription(pht('Associated revision PHID.')),
+ id(new PhabricatorConduitSearchFieldSpecification())
+ ->setKey('authorPHID')
+ ->setType('phid')
+ ->setDescription(pht('Revision author PHID.')),
+ id(new PhabricatorConduitSearchFieldSpecification())
+ ->setKey('repositoryPHID')
+ ->setType('phid')
+ ->setDescription(pht('Associated repository PHID.')),
+ id(new PhabricatorConduitSearchFieldSpecification())
+ ->setKey('refs')
+ ->setType('map<string, wild>')
+ ->setDescription(pht('List of related VCS references.')),
+ );
+ }
+
+ public function getFieldValuesForConduit() {
+ $refs = array();
+
+ $branch = $this->getBranch();
+ if (strlen($branch)) {
+ $refs[] = array(
+ 'type' => 'branch',
+ 'name' => $branch,
+ );
+ }
+
+ $onto = $this->loadTargetBranch();
+ if (strlen($onto)) {
+ $refs[] = array(
+ 'type' => 'onto',
+ 'name' => $onto,
+ );
+ }
+
+ $base = $this->getSourceControlBaseRevision();
+ if (strlen($base)) {
+ $refs[] = array(
+ 'type' => 'base',
+ 'identifier' => $base,
+ );
+ }
+
+ $bookmark = $this->getBookmark();
+ if (strlen($bookmark)) {
+ $refs[] = array(
+ 'type' => 'bookmark',
+ 'name' => $bookmark,
+ );
+ }
+
+ $revision_phid = null;
+ if ($this->getRevisionID()) {
+ $revision_phid = $this->getRevision()->getPHID();
+ }
+
+ return array(
+ 'revisionPHID' => $revision_phid,
+ 'authorPHID' => $this->getAuthorPHID(),
+ 'repositoryPHID' => $this->getRepositoryPHID(),
+ 'refs' => $refs,
+ );
+ }
+
+ public function getConduitSearchAttachments() {
+ return array();
+ }
+
+
}

File Metadata

Mime Type
text/plain
Expires
Fri, Jul 18, 6:38 AM (5 d, 19 m ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
8489630
Default Alt Text
D18744.id44984.diff (9 KB)

Event Timeline