RepoGroup::singleton()->clearCache( $this->newTitle ); # clear false negative cache
}
- $dbw->begin( __METHOD__ ); # If $file was a LocalFile, its transaction would have closed our own.
+ $dbw->startAtomic( __METHOD__ );
$pageid = $this->oldTitle->getArticleID( Title::GAID_FOR_UPDATE );
$protected = $this->oldTitle->isProtected();
// Do the actual move
- $this->moveToInternal( $user, $this->newTitle, $reason, $createRedirect );
+ $nullRevision = $this->moveToInternal( $user, $this->newTitle, $reason, $createRedirect );
// Refresh the sortkey for this row. Be careful to avoid resetting
// cl_timestamp, which may disturb time-based lists on some sites.
WatchedItem::duplicateEntries( $this->oldTitle, $this->newTitle );
}
- $dbw->commit( __METHOD__ );
-
Hooks::run(
- 'TitleMoveComplete',
- array( &$this->oldTitle, &$this->newTitle, &$user, $pageid, $redirid, $reason )
+ 'TitleMoveCompleting',
+ array( $this->oldTitle, $this->newTitle,
+ $user, $pageid, $redirid, $reason, $nullRevision )
+ );
+
+ $dbw->endAtomic( __METHOD__ );
+
+ $params = array(
+ &$this->oldTitle,
+ &$this->newTitle,
+ &$user,
+ $pageid,
+ $redirid,
+ $reason,
+ $nullRevision
);
+ $dbw->onTransactionIdle( function () use ( $params, $dbw ) {
+ // Keep each single hook handler atomic
+ $dbw->setFlag( DBO_TRX ); // flag is automatically reset by DB layer
+ Hooks::run( 'TitleMoveComplete', $params );
+ } );
+
return Status::newGood();
}
* @param string $reason The reason for the move
* @param bool $createRedirect Whether to leave a redirect at the old title. Does not check
* if the user has the suppressredirect right
+ * @return Revision the revision created by the move
* @throws MWException
*/
private function moveToInternal( User $user, &$nt, $reason = '', $createRedirect = true ) {
# Log the move
$logid = $logEntry->insert();
$logEntry->publish( $logid );
+
+ return $nullRevision;
}
}