Set correct parentid on import
authorumherirrender <umherirrender_de.wp@web.de>
Thu, 8 Oct 2015 19:26:56 +0000 (21:26 +0200)
committerumherirrender <umherirrender_de.wp@web.de>
Fri, 9 Oct 2015 14:12:21 +0000 (16:12 +0200)
When importing over an existing page the parentid is set to the latest
rev id of the page, which makes the size diff in history unusable.

The import constructs the Revision object without a parentid and than
Revision::getPreviousRevisionId is using the page_latest field to
propagate the missing parentid.
Avoid this bad propagate by select the previous revision id depending on
timestamp before construct of the Revision object.

Bug: T114806
Change-Id: Iee44d5a74de459f733ea62373cdbe9911e77083f

includes/Import.php

index 60d4a1f..33ab4ea 100644 (file)
@@ -1606,6 +1606,20 @@ class WikiRevision {
                        }
                }
 
+               // Select previous version to make size diffs correct
+               $prevId = $dbw->selectField( 'revision', 'rev_id',
+                       array(
+                               'rev_page' => $pageId,
+                               'rev_timestamp <= ' . $dbw->timestamp( $this->timestamp ),
+                       ),
+                       __METHOD__,
+                       array( 'ORDER BY' => array(
+                                       'rev_timestamp DESC',
+                                       'rev_id DESC', // timestamp is not unique per page
+                               )
+                       )
+               );
+
                # @todo FIXME: Use original rev_id optionally (better for backups)
                # Insert the row
                $revision = new Revision( array(
@@ -1620,6 +1634,7 @@ class WikiRevision {
                        'user_text' => $userText,
                        'timestamp' => $this->timestamp,
                        'minor_edit' => $this->minor,
+                       'parent_id' => $prevId,
                        ) );
                $revision->insertOn( $dbw );
                $changed = $page->updateIfNewerOn( $dbw, $revision );