Differential D20398 Diff 48689 src/applications/search/engineextension/PhabricatorEdgeIndexEngineExtension.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/search/engineextension/PhabricatorEdgeIndexEngineExtension.php
- This file was added.
<?php | |||||
abstract class PhabricatorEdgeIndexEngineExtension | |||||
extends PhabricatorIndexEngineExtension { | |||||
abstract protected function getIndexEdgeType(); | |||||
abstract protected function getIndexDestinationPHIDs($object); | |||||
final public function indexObject( | |||||
PhabricatorIndexEngine $engine, | |||||
$object) { | |||||
$edge_type = $this->getIndexEdgeType(); | |||||
$old_edges = PhabricatorEdgeQuery::loadDestinationPHIDs( | |||||
$object->getPHID(), | |||||
$edge_type); | |||||
$old_edges = array_fuse($old_edges); | |||||
$new_edges = $this->getIndexDestinationPHIDs($object); | |||||
$new_edges = array_fuse($new_edges); | |||||
$add_edges = array_diff_key($new_edges, $old_edges); | |||||
$rem_edges = array_diff_key($old_edges, $new_edges); | |||||
if (!$add_edges && !$rem_edges) { | |||||
return; | |||||
} | |||||
$editor = new PhabricatorEdgeEditor(); | |||||
foreach ($add_edges as $phid) { | |||||
$editor->addEdge($object->getPHID(), $edge_type, $phid); | |||||
} | |||||
foreach ($rem_edges as $phid) { | |||||
$editor->removeEdge($object->getPHID(), $edge_type, $phid); | |||||
} | |||||
$editor->save(); | |||||
} | |||||
final public function getIndexVersion($object) { | |||||
$phids = $this->getIndexDestinationPHIDs($object); | |||||
sort($phids); | |||||
$phids = implode(':', $phids); | |||||
return PhabricatorHash::digestForIndex($phids); | |||||
} | |||||
} |