Tobias Gritschacher has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/94137


Change subject: Fix comparison of objects in ClaimDiffer
......................................................................

Fix comparison of objects in ClaimDiffer

ClaimDiffer was detecting changes in the mainsnak even if nothing was
changed. This was due to a wrong comparison method used for comparing snak
objects.

Change-Id: I2f3273596731276770c66695ac839aa6912f133d
---
M lib/includes/ClaimDiffer.php
1 file changed, 13 insertions(+), 12 deletions(-)


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

diff --git a/lib/includes/ClaimDiffer.php b/lib/includes/ClaimDiffer.php
index 5b42066..70f993e 100644
--- a/lib/includes/ClaimDiffer.php
+++ b/lib/includes/ClaimDiffer.php
@@ -5,6 +5,7 @@
 use Diff\Diff;
 use Diff\Differ;
 use Diff\DiffOpChange;
+use Wikibase\DataModel\Internal\ObjectComparer;
 
 /**
  * Class for generating a ClaimDifference given two claims.
@@ -69,7 +70,9 @@
        private function diffMainSnaks( $oldClaim, $newClaim ) {
                $oldClaimMainSnak = $oldClaim === null ? null : 
$oldClaim->getMainSnak();
                $newClaimMainSnak = $newClaim === null ? null : 
$newClaim->getMainSnak();
-               if( $oldClaimMainSnak !== $newClaimMainSnak ){
+
+               $mainSnakComparer = new ObjectComparer();
+               if( !$mainSnakComparer->dataEquals( $oldClaimMainSnak, 
$newClaimMainSnak ) ) {
                        return new DiffOpChange( $oldClaimMainSnak, 
$newClaimMainSnak );
                }
                return null;
@@ -79,15 +82,13 @@
         * @param Claim $oldClaim
         * @param Claim $newClaim
         *
-        * @return DiffOpChange|null
+        * @return Diff
         */
        private function diffQualifiers( $oldClaim, $newClaim ) {
                $oldQualifiers = $oldClaim === null ? array() : 
iterator_to_array( $oldClaim->getQualifiers() );
                $newQualifiers = $newClaim === null ? array() : 
iterator_to_array( $newClaim->getQualifiers() );
-               if( $oldQualifiers !== $newQualifiers ){
-                       return new Diff( $this->listDiffer->doDiff( 
$oldQualifiers, $newQualifiers ), false );
-               }
-               return null;
+
+               return new Diff( $this->listDiffer->doDiff( $oldQualifiers, 
$newQualifiers ), false );
        }
 
        /**
@@ -99,7 +100,9 @@
        private function diffRank( $oldClaim, $newClaim ) {
                $oldRank = $oldClaim === null ? null : $oldClaim->getRank();
                $newRank = $newClaim === null ? null : $newClaim->getRank();
-               if( $oldRank !== $newRank ){
+
+               $rankComparer = new ObjectComparer();
+               if( !$rankComparer->dataEquals( $oldRank, $newRank ) ){
                        return new DiffOpChange( $oldRank, $newRank );
                }
                return null;
@@ -109,15 +112,13 @@
         * @param Statement $oldClaim
         * @param Statement $newClaim
         *
-        * @return DiffOpChange|null
+        * @return Diff
         */
        private function diffReferences( $oldClaim, $newClaim ) {
                $oldReferences = $oldClaim === null ? array() : 
iterator_to_array( $oldClaim->getReferences() );
                $newReferences = $newClaim === null ? array() : 
iterator_to_array( $newClaim->getReferences() );
-               if( $oldReferences !== $newReferences ){
-                       return new Diff( $this->listDiffer->doDiff( 
$oldReferences, $newReferences ), false );
-               }
-               return null;
+
+               return new Diff( $this->listDiffer->doDiff( $oldReferences, 
$newReferences ), false );
        }
 
 }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2f3273596731276770c66695ac839aa6912f133d
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Tobias Gritschacher <tobias.gritschac...@wikimedia.de>

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

Reply via email to