Convert MovePage to startAtomic()/endAtomic()

* This makes moves of a page and its subpages atomic
  as one operation. Note that $wgMaximumMovedPages
  already bounds the number of page rows changed.
* The TitleMoveComplete hook will fire for all
  titles after the operation rather than after
  each title move.
* Remove LocalFile comment about it commiting the
  transaction because LocalFile::lock()/unlock()
  check trxLevel() and reference count.

Change-Id: Ic7f6964f94f0b0f0bedc27012e5b5b012a4afdb2
This commit is contained in:
Aaron Schulz 2015-10-06 13:24:22 -07:00
parent c3698b050e
commit 9e51328790

View file

@ -247,7 +247,7 @@ class MovePage {
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();
@ -369,12 +369,13 @@ class MovePage {
WatchedItem::duplicateEntries( $this->oldTitle, $this->newTitle );
}
$dbw->commit( __METHOD__ );
$dbw->endAtomic( __METHOD__ );
$params = array( $this->oldTitle, $this->newTitle, $user, $pageid, $redirid, $reason );
$dbw->onTransactionIdle( function () use ( $params ) {
Hooks::run( 'TitleMoveComplete', $params );
} );
Hooks::run(
'TitleMoveComplete',
array( &$this->oldTitle, &$this->newTitle, &$user, $pageid, $redirid, $reason )
);
return Status::newGood();
}