mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-22 21:40:55 +01:00
Correct a bug where milestone "spacePHID" columns could become desynchronized
Summary: Depends on D20041. See PHI1046. If you do this: - Create a parent project called "Crab" in Space 1. - Create a milestone called "Left Claw". - Shift "Crab" to Space 2. - Create a milestone called "Right Claw". ...you currently end up with "Left Claw" in the wrong `spacePHID` in the database. At the application level it's in the correct space, but when we `WHERE ... AND spacePHID IN (...)` we can incorrectly filter it out. Test Plan: - Did the above setup. - Saved "Crab", saw the space fix itself. - Put things back in the broken state. - Ran the migration script, saw things fix themselves again. Reviewers: amckinley Reviewed By: amckinley Subscribers: aeiser, PHID-OPKG-gm6ozazyms6q6i22gyam Differential Revision: https://secure.phabricator.com/D20063
This commit is contained in:
parent
e9b2d667ee
commit
48a3760814
2 changed files with 29 additions and 0 deletions
18
resources/sql/autopatches/20190129.project.01.spaces.php
Normal file
18
resources/sql/autopatches/20190129.project.01.spaces.php
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
// See PHI1046. The "spacePHID" column for milestones may have fallen out of
|
||||
// sync; correct all existing values.
|
||||
|
||||
$table = new PhabricatorProject();
|
||||
$conn = $table->establishConnection('w');
|
||||
$table_name = $table->getTableName();
|
||||
|
||||
foreach (new LiskRawMigrationIterator($conn, $table_name) as $project_row) {
|
||||
queryfx(
|
||||
$conn,
|
||||
'UPDATE %R SET spacePHID = %ns
|
||||
WHERE parentProjectPHID = %s AND milestoneNumber IS NOT NULL',
|
||||
$table,
|
||||
$project_row['spacePHID'],
|
||||
$project_row['phid']);
|
||||
}
|
|
@ -249,6 +249,17 @@ final class PhabricatorProjectTransactionEditor
|
|||
->rematerialize($new_parent);
|
||||
}
|
||||
|
||||
// See PHI1046. Milestones are always in the Space of their parent project.
|
||||
// Synchronize the database values to match the application values.
|
||||
$conn = $object->establishConnection('w');
|
||||
queryfx(
|
||||
$conn,
|
||||
'UPDATE %R SET spacePHID = %ns
|
||||
WHERE parentProjectPHID = %s AND milestoneNumber IS NOT NULL',
|
||||
$object,
|
||||
$object->getSpacePHID(),
|
||||
$object->getPHID());
|
||||
|
||||
return parent::applyFinalEffects($object, $xactions);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue