X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FMergeHistory.php;h=4045a5436b56127550ec76709fe8dc9207e3ffa4;hb=3ce997ed65303c4f35216e7e7abb02c4718d8239;hp=4c655ebab531afd8998853d3bb9b0d3e1b891565;hpb=5623d4c64319a98ddd8263c597002d173464ccbf;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/MergeHistory.php b/includes/MergeHistory.php index 4c655ebab5..4045a5436b 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 */ @@ -178,7 +178,8 @@ class MergeHistory { } // Check mergehistory permission - if ( !$user->isAllowed( 'mergehistory' ) ) { + $permissionManager = MediaWikiServices::getInstance()->getPermissionManager(); + if ( !$permissionManager->userHasRight( $user, 'mergehistory' ) ) { // User doesn't have the right to merge histories $status->fatal( 'mergehistory-fail-permission' ); } @@ -254,6 +255,8 @@ class MergeHistory { return $permCheck; } + $this->dbw->startAtomic( __METHOD__ ); + $this->dbw->update( 'revision', [ 'rev_page' => $this->dest->getArticleID() ], @@ -264,17 +267,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 +353,8 @@ class MergeHistory { Hooks::run( 'ArticleMergeComplete', [ $this->source, $this->dest ] ); + $this->dbw->endAtomic( __METHOD__ ); + return $status; } }