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
+ // 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(
# @todo FIXME: Use original rev_id optionally (better for backups)
# Insert the row
$revision = new Revision( array(
'user_text' => $userText,
'timestamp' => $this->timestamp,
'minor_edit' => $this->minor,
'user_text' => $userText,
'timestamp' => $this->timestamp,
'minor_edit' => $this->minor,
+ 'parent_id' => $prevId,
) );
$revision->insertOn( $dbw );
$changed = $page->updateIfNewerOn( $dbw, $revision );
) );
$revision->insertOn( $dbw );
$changed = $page->updateIfNewerOn( $dbw, $revision );