diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 37f7d86654..58d44236bd 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -692,6 +692,7 @@ phutil_register_library_map(array( 'DiffusionRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php', 'DiffusionRawDiffQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRawDiffQueryConduitAPIMethod.php', 'DiffusionReadmeView' => 'applications/diffusion/view/DiffusionReadmeView.php', + 'DiffusionRefDatasource' => 'applications/diffusion/typeahead/DiffusionRefDatasource.php', 'DiffusionRefNotFoundException' => 'applications/diffusion/exception/DiffusionRefNotFoundException.php', 'DiffusionRefTableController' => 'applications/diffusion/controller/DiffusionRefTableController.php', 'DiffusionRefsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRefsQueryConduitAPIMethod.php', @@ -4566,6 +4567,7 @@ phutil_register_library_map(array( 'DiffusionRawDiffQuery' => 'DiffusionQuery', 'DiffusionRawDiffQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', 'DiffusionReadmeView' => 'DiffusionView', + 'DiffusionRefDatasource' => 'PhabricatorTypeaheadDatasource', 'DiffusionRefNotFoundException' => 'Exception', 'DiffusionRefTableController' => 'DiffusionController', 'DiffusionRefsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', diff --git a/src/applications/diffusion/typeahead/DiffusionRefDatasource.php b/src/applications/diffusion/typeahead/DiffusionRefDatasource.php new file mode 100644 index 0000000000..f98960e7cc --- /dev/null +++ b/src/applications/diffusion/typeahead/DiffusionRefDatasource.php @@ -0,0 +1,50 @@ +getViewer(); + $raw_query = $this->getRawQuery(); + + $query = id(new PhabricatorRepositoryRefCursorQuery()) + ->withDatasourceQuery($raw_query); + + $types = $this->getParameter('refTypes'); + if ($types) { + $query->withRefTypes($types); + } + + $repository_phids = $this->getParameter('repositoryPHIDs'); + if ($repository_phids) { + $query->withRepositoryPHIDs($repository_phids); + } + + $refs = $this->executeQuery($query); + + $results = array(); + foreach ($refs as $ref) { + $results[] = id(new PhabricatorTypeaheadResult()) + ->setName($ref->getRefName()) + ->setPHID($ref->getPHID()); + } + + return $results; + } + +} diff --git a/src/applications/repository/query/PhabricatorRepositoryRefCursorQuery.php b/src/applications/repository/query/PhabricatorRepositoryRefCursorQuery.php index 8f6e92e2a3..706fe801b6 100644 --- a/src/applications/repository/query/PhabricatorRepositoryRefCursorQuery.php +++ b/src/applications/repository/query/PhabricatorRepositoryRefCursorQuery.php @@ -8,6 +8,7 @@ final class PhabricatorRepositoryRefCursorQuery private $repositoryPHIDs; private $refTypes; private $refNames; + private $datasourceQuery; public function withIDs(array $ids) { $this->ids = $ids; @@ -34,6 +35,11 @@ final class PhabricatorRepositoryRefCursorQuery return $this; } + public function withDatasourceQuery($query) { + $this->datasourceQuery = $query; + return $this; + } + public function newResultObject() { return new PhabricatorRepositoryRefCursor(); } @@ -108,6 +114,13 @@ final class PhabricatorRepositoryRefCursorQuery $name_hashes); } + if (strlen($this->datasourceQuery)) { + $where[] = qsprintf( + $conn, + 'refNameRaw LIKE %>', + $this->datasourceQuery); + } + return $where; }