@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.

Add repositories to fulltext search index.

Summary:
This implements a simplistic `PhabricatorRepositoryFulltextEngine`
Currently only the repository name, description, timestamps and
status are indexed.

Note: I had to change the `search index` workflow to disambiguate
PhabricatorRepository from PhabricatorRepositoryCommit

Test Plan:
* ran `./bin/search index --type PhabricatorRepository --force`
* searched for some repositories. Saw reasonable results matching on either title or description.
* Edited a repository in the web ui
* Added unique key words to the repo description.
* I was then able to find that repo by searching for the new keywords.

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: Korvin

Tags: #search, #diffusion

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

authored by

Mukunda Modell and committed by
20after4
9e2f263b 9e2ab4f8

+45 -1
+3
src/__phutil_library_map__.php
··· 3660 3660 'PhabricatorRepositoryDiscoveryEngine' => 'applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php', 3661 3661 'PhabricatorRepositoryEditor' => 'applications/repository/editor/PhabricatorRepositoryEditor.php', 3662 3662 'PhabricatorRepositoryEngine' => 'applications/repository/engine/PhabricatorRepositoryEngine.php', 3663 + 'PhabricatorRepositoryFulltextEngine' => 'applications/repository/search/PhabricatorRepositoryFulltextEngine.php', 3663 3664 'PhabricatorRepositoryGitCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryGitCommitChangeParserWorker.php', 3664 3665 'PhabricatorRepositoryGitCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryGitCommitMessageParserWorker.php', 3665 3666 'PhabricatorRepositoryGitLFSRef' => 'applications/repository/storage/PhabricatorRepositoryGitLFSRef.php', ··· 8910 8911 'PhabricatorProjectInterface', 8911 8912 'PhabricatorSpacesInterface', 8912 8913 'PhabricatorConduitResultInterface', 8914 + 'PhabricatorFulltextInterface', 8913 8915 ), 8914 8916 'PhabricatorRepositoryAuditRequest' => array( 8915 8917 'PhabricatorRepositoryDAO', ··· 8951 8953 'PhabricatorRepositoryDiscoveryEngine' => 'PhabricatorRepositoryEngine', 8952 8954 'PhabricatorRepositoryEditor' => 'PhabricatorApplicationTransactionEditor', 8953 8955 'PhabricatorRepositoryEngine' => 'Phobject', 8956 + 'PhabricatorRepositoryFulltextEngine' => 'PhabricatorFulltextEngine', 8954 8957 'PhabricatorRepositoryGitCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker', 8955 8958 'PhabricatorRepositoryGitCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker', 8956 8959 'PhabricatorRepositoryGitLFSRef' => array(
+27
src/applications/repository/search/PhabricatorRepositoryFulltextEngine.php
··· 1 + <?php 2 + 3 + final class PhabricatorRepositoryFulltextEngine 4 + extends PhabricatorFulltextEngine { 5 + 6 + protected function buildAbstractDocument( 7 + PhabricatorSearchAbstractDocument $document, 8 + $object) { 9 + $repo = $object; 10 + $document->setDocumentTitle($repo->getName()); 11 + $document->addField( 12 + PhabricatorSearchDocumentFieldType::FIELD_BODY, 13 + $repo->getRepositorySlug()."\n".$repo->getDetail('description')); 14 + 15 + $document->setDocumentCreated($repo->getDateCreated()); 16 + $document->setDocumentModified($repo->getDateModified()); 17 + 18 + $document->addRelationship( 19 + $repo->isTracked() 20 + ? PhabricatorSearchRelationship::RELATIONSHIP_OPEN 21 + : PhabricatorSearchRelationship::RELATIONSHIP_CLOSED, 22 + $repo->getPHID(), 23 + PhabricatorRepositoryRepositoryPHIDType::TYPECONST, 24 + PhabricatorTime::getNow()); 25 + } 26 + 27 + }
+9 -1
src/applications/repository/storage/PhabricatorRepository.php
··· 14 14 PhabricatorDestructibleInterface, 15 15 PhabricatorProjectInterface, 16 16 PhabricatorSpacesInterface, 17 - PhabricatorConduitResultInterface { 17 + PhabricatorConduitResultInterface, 18 + PhabricatorFulltextInterface { 18 19 19 20 /** 20 21 * Shortest hash we'll recognize in raw "a829f32" form. ··· 2570 2571 id(new DiffusionRepositoryURIsSearchEngineAttachment()) 2571 2572 ->setAttachmentKey('uris'), 2572 2573 ); 2574 + } 2575 + 2576 + /* -( PhabricatorFulltextInterface )--------------------------------------- */ 2577 + 2578 + 2579 + public function newFulltextEngine() { 2580 + return new PhabricatorRepositoryFulltextEngine(); 2573 2581 } 2574 2582 2575 2583 }
+6
src/applications/search/management/PhabricatorSearchManagementIndexWorkflow.php
··· 158 158 $object_class = get_class($object); 159 159 $normalized_class = phutil_utf8_strtolower($object_class); 160 160 161 + if ($normalized_class === $normalized_type) { 162 + $matches = array($object_class => $object); 163 + break; 164 + } 165 + 161 166 if (!strlen($type) || 162 167 strpos($normalized_class, $normalized_type) !== false) { 163 168 $matches[$object_class] = $object; 169 + 164 170 } 165 171 } 166 172