X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2FMergeHistory.php;h=6bd4471723d32d843dcc6d51a0e52e94f081255a;hp=4c655ebab531afd8998853d3bb9b0d3e1b891565;hb=e73328601d51674e8fef89c3db12b30ceafd702f;hpb=ea34d2cbde6195ebc3b4c01a113b774c0fdf54ea diff --git a/includes/MergeHistory.php b/includes/MergeHistory.php index 4c655ebab5..6bd4471723 100644 --- a/includes/MergeHistory.php +++ b/includes/MergeHistory.php @@ -32,7 +32,7 @@ use Wikimedia\Rdbms\IDatabase; */ class MergeHistory { - /** @const int Maximum number of revisions that can be merged at once */ + /** Maximum number of revisions that can be merged at once */ const REVISION_LIMIT = 5000; /** @var Title Page from which history will be merged */ @@ -254,6 +254,8 @@ class MergeHistory { return $permCheck; } + $this->dbw->startAtomic( __METHOD__ ); + $this->dbw->update( 'revision', [ 'rev_page' => $this->dest->getArticleID() ], @@ -264,17 +266,17 @@ class MergeHistory { // Check if this did anything $this->revisionsMerged = $this->dbw->affectedRows(); if ( $this->revisionsMerged < 1 ) { + $this->dbw->endAtomic( __METHOD__ ); $status->fatal( 'mergehistory-fail-no-change' ); + return $status; } // Make the source page a redirect if no revisions are left - $haveRevisions = $this->dbw->selectField( + $haveRevisions = $this->dbw->lockForUpdate( 'revision', - 'rev_timestamp', [ 'rev_page' => $this->source->getArticleID() ], - __METHOD__, - [ 'FOR UPDATE' ] + __METHOD__ ); if ( !$haveRevisions ) { if ( $reason ) { @@ -350,6 +352,8 @@ class MergeHistory { Hooks::run( 'ArticleMergeComplete', [ $this->source, $this->dest ] ); + $this->dbw->endAtomic( __METHOD__ ); + return $status; } }