Matěj Suchánek has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/384263 )

Change subject: Do not interrupt combined change when only badge is changed
......................................................................

Do not interrupt combined change when only badge is changed

There was a todo note in the code that pointed this out.
The helper method was copy&pasted from AffectedPagesFinder.

Change-Id: Ic53ab531a35e10c8b27ce09a9c1979e11a74eb07
---
M client/includes/Changes/ChangeRunCoalescer.php
M client/tests/phpunit/includes/Changes/ChangeRunCoalescerTest.php
2 files changed, 34 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/63/384263/1

diff --git a/client/includes/Changes/ChangeRunCoalescer.php 
b/client/includes/Changes/ChangeRunCoalescer.php
index ce9acfd..1369684 100644
--- a/client/includes/Changes/ChangeRunCoalescer.php
+++ b/client/includes/Changes/ChangeRunCoalescer.php
@@ -2,6 +2,8 @@
 
 namespace Wikibase\Client\Changes;
 
+use Diff\DiffOp\Diff\Diff;
+use Diff\DiffOp\DiffOp;
 use Exception;
 use MWException;
 use Wikibase\Change;
@@ -196,6 +198,15 @@
        }
 
        /**
+        * @param DiffOp $siteLinkDiffOp
+        *
+        * @return bool
+        */
+       private function isBadgesOnlyChange( DiffOp $siteLinkDiffOp ) {
+               return $siteLinkDiffOp instanceof Diff && !array_key_exists( 
'name', $siteLinkDiffOp );
+       }
+
+       /**
         * Coalesce consecutive changes by the same user to the same entity 
into one.
         *
         * A run of changes may be broken if the action performed changes (e.g. 
deletion
@@ -230,8 +241,8 @@
 
                                if ( !$break && ( $change instanceof ItemChange 
) ) {
                                        $siteLinkDiff = 
$change->getSiteLinkDiff();
-                                       if ( isset( $siteLinkDiff[ 
$this->localSiteId ] ) ) {
-                                               // TODO: don't break if only 
the link's badges changed
+                                       if ( isset( 
$siteLinkDiff[$this->localSiteId] )
+                                               && !$this->isBadgesOnlyChange( 
$siteLinkDiff[$this->localSiteId] ) ) {
                                                $break = true;
                                                $breakNext = true;
                                        }
diff --git a/client/tests/phpunit/includes/Changes/ChangeRunCoalescerTest.php 
b/client/tests/phpunit/includes/Changes/ChangeRunCoalescerTest.php
index df39c27..4bc5c1c 100644
--- a/client/tests/phpunit/includes/Changes/ChangeRunCoalescerTest.php
+++ b/client/tests/phpunit/includes/Changes/ChangeRunCoalescerTest.php
@@ -69,6 +69,10 @@
                        $entity1->getSiteLinkList()->addNewSiteLink( 'dewiki', 
'Testen' );
                        $repo->putEntity( $entity1, $offset + 14 );
 
+                       // entity 1, revision 1115
+                       $entity1->getSiteLinkList()->setSiteLink( new SiteLink( 
'enwiki', 'Original', [ new ItemId( 'Q12345' ) ] ) );
+                       $repo->putEntity( $entity1, $offset + 15 );
+
                        // entity 1, revision 1117
                        $entity1->getSiteLinkList()->setSiteLink( new SiteLink( 
'enwiki', 'Spam', [ new ItemId( 'Q12345' ) ] ) );
                        $repo->putEntity( $entity1, $offset + 17 );
@@ -270,6 +274,17 @@
                        'parent_id' => 1113,
                ] );
 
+               // change link to other wiki
+               $update11Badge = $this->makeChange( [
+                       'id' => ++$id,
+                       'type' => 'wikibase-item~update',
+                       'time' => '20130101020305',
+                       'object_id' => 'Q1',
+                       'revision_id' => 1115,
+                       'user_id' => 1,
+                       'parent_id' => 1114,
+               ] );
+
                // change link to local wiki
                $update11Link = $this->makeChange( [
                        'id' => ++$id,
@@ -278,7 +293,7 @@
                        'object_id' => 'Q1',
                        'revision_id' => 1117,
                        'user_id' => 1,
-                       'parent_id' => 1114,
+                       'parent_id' => 1115,
                ] );
 
                // delete
@@ -368,6 +383,11 @@
                                [ $update11, $update11Link ], // $expected
                        ],
 
+                       'local link badge change' => [
+                               [ $update11, $update11Badge ], // $changes
+                               [ $this->combineChanges( $update11, 
$update11Badge ) ], // $expected
+                       ],
+
                        'other link merges' => [
                                [ $update11, $update11XLink ], // $changes
                                [ $this->combineChanges( $update11, 
$update11XLink ) ], // $expected

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic53ab531a35e10c8b27ce09a9c1979e11a74eb07
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Matěj Suchánek <matejsuchane...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to