Demon has submitted this change and it was merged.

Change subject: Various edit conflict handling fixes
......................................................................


Various edit conflict handling fixes

bug: 33481
Change-Id: Ic068e82ecc9f94b423cf3966531a885249e1fefc
---
M backend/FlaggedRevs.hooks.php
M frontend/FlaggablePageView.php
2 files changed, 19 insertions(+), 6 deletions(-)

Approvals:
  Demon: Verified; Looks good to me, approved



diff --git a/backend/FlaggedRevs.hooks.php b/backend/FlaggedRevs.hooks.php
index b22e50c..cbd319d 100644
--- a/backend/FlaggedRevs.hooks.php
+++ b/backend/FlaggedRevs.hooks.php
@@ -415,14 +415,21 @@
                # (a) this new revision creates a new page and new page 
autoreview is enabled
                # (b) this new revision is based on an old, reviewed, revision
                if ( $title->getUserPermissionsErrors( 'autoreview', $user ) 
=== array() ) {
-                       // For rollback/null edits, use the previous ID as the 
alternate base ID.
-                       // Otherwise, use the 'altBaseRevId' parameter passed 
in by the request.
+                       # For rollback/null edits, use the previous ID as the 
alternate base ID.
+                       # Otherwise, use the 'altBaseRevId' parameter passed in 
by the request.
                        $altBaseRevId = $isOldRevCopy ? $prevRevId : 
$wgRequest->getInt( 'altBaseRevId' );
                        if ( !$prevRevId ) { // New pages
                                $reviewableNewPage = 
FlaggedRevs::autoReviewNewPages();
                                $reviewableChange = false;
                        } else { // Edits to existing pages
                                $reviewableNewPage = false; // had previous rev
+                               # If a edit was automatically merged, do not 
trust 'baseRevId' (bug 33481)
+                               if ( $editTimestamp
+                                       && $editTimestamp !== 
Revision::getTimestampFromId( $title, $prevRevId ) )
+                               {
+                                       $baseRevId = $prevRevId;
+                                       $altBaseRevId = 0;
+                               }
                                # Check if the base revision was reviewed...
                                if ( FlaggedRevs::autoReviewEdits() ) {
                                        $frev = FlaggedRevision::newFromTitle( 
$title, $baseRevId, FR_MASTER );
@@ -432,7 +439,7 @@
                                }
                                $reviewableChange = (bool)$frev;
                        }
-                       // Is this an edit directly to a reviewed version or a 
new page?
+                       # Is this an edit directly to a reviewed version or a 
new page?
                        if ( $reviewableNewPage || $reviewableChange ) {
                                if ( $isOldRevCopy && $frev ) {
                                        $flags = $frev->getTags(); // null 
edits & rollbacks keep previous tags
@@ -453,11 +460,11 @@
                                $baseRevId == $srev->getRevId() && // restored 
stable rev
                                $title->getUserPermissionsErrors( 
'autoreviewrestore', $user ) === array()
                        );
-                       # Check for self-reversions...
+                       # Check for self-reversions (checks text hashes)...
                        if ( !$reviewableChange ) {
                                $reviewableChange = self::isSelfRevertToStable( 
$rev, $srev, $baseRevId, $user );
                        }
-                       // Is this a rollback or self-reversion to the stable 
rev?
+                       # Is this a rollback or self-reversion to the stable 
rev?
                        if ( $reviewableChange ) {
                                $flags = $srev->getTags(); // use old tags
                                # Review this revision of the page...
@@ -530,7 +537,7 @@
                        return false; // only looking for self-reverts
                }
                # Confirm the text because we can't trust this user.
-               return ( $rev->getText() == $srev->getRevText() );
+               return ( $rev->getSha1() === $srev->getSha1() );
        }
 
        /**
diff --git a/frontend/FlaggablePageView.php b/frontend/FlaggablePageView.php
index f7ee5b6..bc399a4 100644
--- a/frontend/FlaggablePageView.php
+++ b/frontend/FlaggablePageView.php
@@ -1874,6 +1874,9 @@
         * @return int
         */
        protected static function getBaseRevId( EditPage $editPage, WebRequest 
$request ) {
+               if ( $editPage->isConflict ) {
+                       return 0; // throw away these values (bug 33481)
+               }
                if ( !isset( $editPage->fr_baseRevId ) ) {
                        $article = $editPage->getArticle(); // convenience
                        $latestId = $article->getLatest(); // current rev
@@ -1904,6 +1907,9 @@
         * @return int
         */
        protected static function getAltBaseRevId( EditPage $editPage, 
WebRequest $request ) {
+               if ( $editPage->isConflict ) {
+                       return 0; // throw away these values (bug 33481)
+               }
                if ( !isset( $editPage->fr_altBaseRevId ) ) {
                        $article = $editPage->getArticle(); // convenience
                        $latestId = $article->getLatest(); // current rev

-- 
To view, visit https://gerrit.wikimedia.org/r/72265
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ic068e82ecc9f94b423cf3966531a885249e1fefc
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/FlaggedRevs
Gerrit-Branch: master
Gerrit-Owner: Aaron Schulz <[email protected]>
Gerrit-Reviewer: Demon <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to