mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-25 08:12:40 +01:00
Update "AffectedPath" table when a revision's repository changes
Summary: Ref T13639. There's currently a hard-to-hit bug where editing the "Repository" of a revision doesn't update this index. Instead: update the index on repository change, not just diff update. Test Plan: - Updated a revision, used debug view to see index update. - Changed repository on a revision, used debug view to see index update. Maniphest Tasks: T13639 Differential Revision: https://secure.phabricator.com/D21618
This commit is contained in:
parent
01ea84029d
commit
26c68942bd
1 changed files with 42 additions and 14 deletions
|
@ -340,29 +340,57 @@ final class DifferentialTransactionEditor
|
|||
pht('Failed to load revision from transaction finalization.'));
|
||||
}
|
||||
|
||||
$active_diff = $new_revision->getActiveDiff();
|
||||
$new_diff_phid = $active_diff->getPHID();
|
||||
|
||||
$object->attachReviewers($new_revision->getReviewers());
|
||||
$object->attachActiveDiff($new_revision->getActiveDiff());
|
||||
$object->attachActiveDiff($active_diff);
|
||||
$object->attachRepository($new_revision->getRepository());
|
||||
|
||||
$has_new_diff = false;
|
||||
$should_index_paths = false;
|
||||
$should_index_hashes = false;
|
||||
$need_changesets = false;
|
||||
|
||||
foreach ($xactions as $xaction) {
|
||||
switch ($xaction->getTransactionType()) {
|
||||
case DifferentialRevisionUpdateTransaction::TRANSACTIONTYPE:
|
||||
$diff = $this->requireDiff($xaction->getNewValue(), true);
|
||||
$need_changesets = true;
|
||||
|
||||
$this->ownersDiff = $diff;
|
||||
$this->ownersChangesets = $diff->getChangesets();
|
||||
|
||||
// Update these denormalized index tables when we attach a new
|
||||
// diff to a revision.
|
||||
|
||||
$this->updateRevisionHashTable($object, $diff);
|
||||
|
||||
id(new DifferentialAffectedPathEngine())
|
||||
->setRevision($object)
|
||||
->setDiff($diff)
|
||||
->updateAffectedPaths();
|
||||
$new_diff_phid = $xaction->getNewValue();
|
||||
$has_new_diff = true;
|
||||
|
||||
$should_index_paths = true;
|
||||
$should_index_hashes = true;
|
||||
break;
|
||||
case DifferentialRevisionRepositoryTransaction::TRANSACTIONTYPE:
|
||||
// The "AffectedPath" table denormalizes the repository, so we
|
||||
// want to update the index if the repository changes.
|
||||
|
||||
$need_changesets = true;
|
||||
|
||||
$should_index_paths = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($need_changesets) {
|
||||
$new_diff = $this->requireDiff($new_diff_phid, true);
|
||||
|
||||
if ($should_index_paths) {
|
||||
id(new DifferentialAffectedPathEngine())
|
||||
->setRevision($object)
|
||||
->setDiff($new_diff)
|
||||
->updateAffectedPaths();
|
||||
}
|
||||
|
||||
if ($should_index_hashes) {
|
||||
$this->updateRevisionHashTable($object, $new_diff);
|
||||
}
|
||||
|
||||
if ($has_new_diff) {
|
||||
$this->ownersDiff = $new_diff;
|
||||
$this->ownersChangesets = $new_diff->getChangesets();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue