@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Allow commits to be queried by repository using the `tagged(...)` typehaead function

Summary:
Fixes T12322. Allows you to search for commits using the `tagged(...)` repository function, so you can find "any commmit in any repository tagged with android" or similar.

I moved the function from Differential (which was the application using it) to Diffusion (which is more accurately the application which provides it).

I fixed a bug where searching for `tagged(xyz)` would have no effect (constraint was ignored) if there were no repositories tagged with "xyz". The fix isn't perfectly clean, but should work properly for the moment.

Test Plan:
- Searched with `tagged(...)` in Diffusion and Differential.
- Searched by repository.
- Searched with `tagged(...)` for a project with no tagged repositories.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T12322

Differential Revision: https://secure.phabricator.com/D17426

+14 -6
+2 -2
src/__phutil_library_map__.php
··· 482 482 'DifferentialReleephRequestFieldSpecification' => 'applications/releeph/differential/DifferentialReleephRequestFieldSpecification.php', 483 483 'DifferentialRemarkupRule' => 'applications/differential/remarkup/DifferentialRemarkupRule.php', 484 484 'DifferentialReplyHandler' => 'applications/differential/mail/DifferentialReplyHandler.php', 485 - 'DifferentialRepositoryDatasource' => 'applications/differential/typeahead/DifferentialRepositoryDatasource.php', 486 485 'DifferentialRepositoryField' => 'applications/differential/customfield/DifferentialRepositoryField.php', 487 486 'DifferentialRepositoryLookup' => 'applications/differential/query/DifferentialRepositoryLookup.php', 488 487 'DifferentialRequiredSignaturesField' => 'applications/differential/customfield/DifferentialRequiredSignaturesField.php', ··· 827 826 'DiffusionRepositoryEditDeleteController' => 'applications/diffusion/controller/DiffusionRepositoryEditDeleteController.php', 828 827 'DiffusionRepositoryEditEngine' => 'applications/diffusion/editor/DiffusionRepositoryEditEngine.php', 829 828 'DiffusionRepositoryEditUpdateController' => 'applications/diffusion/controller/DiffusionRepositoryEditUpdateController.php', 829 + 'DiffusionRepositoryFunctionDatasource' => 'applications/diffusion/typeahead/DiffusionRepositoryFunctionDatasource.php', 830 830 'DiffusionRepositoryHistoryManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryHistoryManagementPanel.php', 831 831 'DiffusionRepositoryListController' => 'applications/diffusion/controller/DiffusionRepositoryListController.php', 832 832 'DiffusionRepositoryManageController' => 'applications/diffusion/controller/DiffusionRepositoryManageController.php', ··· 5211 5211 'DifferentialReleephRequestFieldSpecification' => 'Phobject', 5212 5212 'DifferentialRemarkupRule' => 'PhabricatorObjectRemarkupRule', 5213 5213 'DifferentialReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', 5214 - 'DifferentialRepositoryDatasource' => 'PhabricatorTypeaheadCompositeDatasource', 5215 5214 'DifferentialRepositoryField' => 'DifferentialCoreCustomField', 5216 5215 'DifferentialRepositoryLookup' => 'Phobject', 5217 5216 'DifferentialRequiredSignaturesField' => 'DifferentialCoreCustomField', ··· 5575 5574 'DiffusionRepositoryEditDeleteController' => 'DiffusionRepositoryManageController', 5576 5575 'DiffusionRepositoryEditEngine' => 'PhabricatorEditEngine', 5577 5576 'DiffusionRepositoryEditUpdateController' => 'DiffusionRepositoryManageController', 5577 + 'DiffusionRepositoryFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', 5578 5578 'DiffusionRepositoryHistoryManagementPanel' => 'DiffusionRepositoryManagementPanel', 5579 5579 'DiffusionRepositoryListController' => 'DiffusionController', 5580 5580 'DiffusionRepositoryManageController' => 'DiffusionController',
+1 -1
src/applications/audit/query/PhabricatorCommitSearchEngine.php
··· 85 85 ->setKey('repositoryPHIDs') 86 86 ->setConduitKey('repositories') 87 87 ->setAliases(array('repository', 'repositories', 'repositoryPHID')) 88 - ->setDatasource(new DiffusionRepositoryDatasource()), 88 + ->setDatasource(new DiffusionRepositoryFunctionDatasource()), 89 89 id(new PhabricatorSearchDatasourceField()) 90 90 ->setLabel(pht('Packages')) 91 91 ->setKey('packagePHIDs')
+1 -1
src/applications/differential/query/DifferentialRevisionSearchEngine.php
··· 75 75 ->setLabel(pht('Repositories')) 76 76 ->setKey('repositoryPHIDs') 77 77 ->setAliases(array('repository', 'repositories', 'repositoryPHID')) 78 - ->setDatasource(new DifferentialRepositoryDatasource()) 78 + ->setDatasource(new DiffusionRepositoryFunctionDatasource()) 79 79 ->setDescription( 80 80 pht('Find revisions from specific repositories.')), 81 81 id(new PhabricatorSearchSelectField())
+1 -1
src/applications/differential/typeahead/DifferentialRepositoryDatasource.php src/applications/diffusion/typeahead/DiffusionRepositoryFunctionDatasource.php
··· 1 1 <?php 2 2 3 - final class DifferentialRepositoryDatasource 3 + final class DiffusionRepositoryFunctionDatasource 4 4 extends PhabricatorTypeaheadCompositeDatasource { 5 5 6 6 public function getBrowseTitle() {
+9 -1
src/applications/diffusion/typeahead/DiffusionTaggedRepositoriesFunctionDatasource.php
··· 67 67 ->execute(); 68 68 69 69 $results = array(); 70 - 71 70 foreach ($repositories as $repository) { 72 71 $results[] = $repository->getPHID(); 72 + } 73 + 74 + if (!$results) { 75 + // TODO: This is a little hacky, but if you query for "tagged(x)" and 76 + // there are no such repositories, we want to match nothing. If we 77 + // just return `array()`, that gets evaluated as "no constraint" and 78 + // we match everything. This works correctly for now, but should be 79 + // replaced with some more elegant/general approach eventually. 80 + $results[] = PhabricatorPHIDConstants::PHID_VOID; 73 81 } 74 82 75 83 return $results;