From 0ce88ddfb2a636104896d75e3a5fb932545dff9b Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 24 Jul 2015 15:58:22 -0700 Subject: [PATCH] Populate rev_content_model when a move causes default content model to change If the default content model changes due to a page move, a NULL in rev_content_model will now reference the new default, which is not how the revision was serialized, causing an exception to be thrown. This was caused by a5bc9f49cd01e, since previously NULL would use the correct, but techncially inaccurate, page_content_model. Bug: T105260 Change-Id: I0c29d0e657ad0b656e5da6ba365f337229ad4dfd --- includes/MovePage.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/includes/MovePage.php b/includes/MovePage.php index 9891106022..964fbffff6 100644 --- a/includes/MovePage.php +++ b/includes/MovePage.php @@ -416,6 +416,13 @@ class MovePage { $redirectContent = null; } + // Figure out whether the content model is no longer the default + $oldDefault = ContentHandler::getDefaultModelFor( $this->oldTitle ); + $contentModel = $this->oldTitle->getContentModel(); + $newDefault = ContentHandler::getDefaultModelFor( $nt ); + $defaultContentModelChanging = ( $oldDefault !== $newDefault + && $oldDefault === $contentModel ); + // bug 57084: log_page should be the ID of the *moved* page $oldid = $this->oldTitle->getArticleID(); $logTitle = clone $this->oldTitle; @@ -493,6 +500,16 @@ class MovePage { $newpage->doEditUpdates( $nullRevision, $user, array( 'changed' => false, 'moved' => true, 'oldcountable' => $oldcountable ) ); + // If the default content model changes, we need to populate rev_content_model + if ( $defaultContentModelChanging ) { + $dbw->update( + 'revision', + array( 'rev_content_model' => $contentModel ), + array( 'rev_page' => $nt->getArticleID(), 'rev_content_model IS NULL' ), + __METHOD__ + ); + } + if ( !$moveOverRedirect ) { WikiPage::onArticleCreate( $nt ); } -- 2.20.1