diff --git a/src/applications/differential/field/specification/DifferentialFieldSpecification.php b/src/applications/differential/field/specification/DifferentialFieldSpecification.php index d5310530f2..eb64558a94 100644 --- a/src/applications/differential/field/specification/DifferentialFieldSpecification.php +++ b/src/applications/differential/field/specification/DifferentialFieldSpecification.php @@ -383,6 +383,31 @@ abstract class DifferentialFieldSpecification { return $key; } +/* -( Extending the Search Interface )------------------------------------ */ + + /** + * @task search + */ + public function shouldAddToSearchIndex() { + return false; + } + + /** + * @task search + */ + public function getValueForSearchIndex() { + throw new DifferentialFieldSpecificationIncompleteException($this); + } + + /** + * NOTE: Keys *must be* 4 characters for + * @{class:PhabricatorSearchEngineMySQL}. + * + * @task search + */ + public function getKeyForSearchIndex() { + throw new DifferentialFieldSpecificationIncompleteException($this); + } /* -( Extending Commit Messages )------------------------------------------ */ diff --git a/src/applications/differential/field/specification/DifferentialRevertPlanFieldSpecification.php b/src/applications/differential/field/specification/DifferentialRevertPlanFieldSpecification.php index 4e84e3f492..f23b39c875 100644 --- a/src/applications/differential/field/specification/DifferentialRevertPlanFieldSpecification.php +++ b/src/applications/differential/field/specification/DifferentialRevertPlanFieldSpecification.php @@ -95,4 +95,16 @@ final class DifferentialRevertPlanFieldSpecification return $value; } + public function shouldAddToSearchIndex() { + return true; + } + + public function getValueForSearchIndex() { + return $this->value; + } + + public function getKeyForSearchIndex() { + return 'rpln'; + } + } diff --git a/src/applications/differential/field/specification/DifferentialSummaryFieldSpecification.php b/src/applications/differential/field/specification/DifferentialSummaryFieldSpecification.php index e47966cc02..20a11bfef7 100644 --- a/src/applications/differential/field/specification/DifferentialSummaryFieldSpecification.php +++ b/src/applications/differential/field/specification/DifferentialSummaryFieldSpecification.php @@ -70,4 +70,16 @@ final class DifferentialSummaryFieldSpecification return $this->summary; } + public function shouldAddToSearchIndex() { + return true; + } + + public function getValueForSearchIndex() { + return $this->summary; + } + + public function getKeyForSearchIndex() { + return PhabricatorSearchField::FIELD_BODY; + } + } diff --git a/src/applications/differential/field/specification/DifferentialTestPlanFieldSpecification.php b/src/applications/differential/field/specification/DifferentialTestPlanFieldSpecification.php index 30238271e2..e73a715f54 100644 --- a/src/applications/differential/field/specification/DifferentialTestPlanFieldSpecification.php +++ b/src/applications/differential/field/specification/DifferentialTestPlanFieldSpecification.php @@ -103,8 +103,22 @@ final class DifferentialTestPlanFieldSpecification return "TEST PLAN\n".preg_replace('/^/m', ' ', $this->plan); } + public function shouldAddToSearchIndex() { + return true; + } + + public function getValueForSearchIndex() { + return $this->plan; + } + + public function getKeyForSearchIndex() { + return 'tpln'; + } + private function isRequired() { return PhabricatorEnv::getEnvConfig('differential.require-test-plan-field'); } + + } diff --git a/src/applications/search/constants/PhabricatorSearchField.php b/src/applications/search/constants/PhabricatorSearchField.php index 3e40debefe..24d28b6769 100644 --- a/src/applications/search/constants/PhabricatorSearchField.php +++ b/src/applications/search/constants/PhabricatorSearchField.php @@ -7,7 +7,6 @@ final class PhabricatorSearchField { const FIELD_TITLE = 'titl'; const FIELD_BODY = 'body'; - const FIELD_TEST_PLAN = 'tpln'; const FIELD_COMMENT = 'cmnt'; } diff --git a/src/applications/search/index/indexer/PhabricatorSearchDifferentialIndexer.php b/src/applications/search/index/indexer/PhabricatorSearchDifferentialIndexer.php index a12b29067a..90c0c86d1e 100644 --- a/src/applications/search/index/indexer/PhabricatorSearchDifferentialIndexer.php +++ b/src/applications/search/index/indexer/PhabricatorSearchDifferentialIndexer.php @@ -14,12 +14,23 @@ final class PhabricatorSearchDifferentialIndexer $doc->setDocumentCreated($rev->getDateCreated()); $doc->setDocumentModified($rev->getDateModified()); - $doc->addField( - PhabricatorSearchField::FIELD_BODY, - $rev->getSummary()); - $doc->addField( - PhabricatorSearchField::FIELD_TEST_PLAN, - $rev->getTestPlan()); + $aux_fields = DifferentialFieldSelector::newSelector() + ->getFieldSpecifications(); + foreach ($aux_fields as $key => $aux_field) { + if (!$aux_field->shouldAddToSearchIndex()) { + unset($aux_fields[$key]); + } + } + + $aux_fields = DifferentialAuxiliaryField::loadFromStorage( + $rev, + $aux_fields); + foreach ($aux_fields as $aux_field) { + $doc->addField( + $aux_field->getKeyForSearchIndex(), + $aux_field->getValueForSearchIndex() + ); + } $doc->addRelationship( PhabricatorSearchRelationship::RELATIONSHIP_AUTHOR,