Ladsgroup has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/393286 )

Change subject: Transmit compact diff instead of suppressed diff
......................................................................

Transmit compact diff instead of suppressed diff

Bug: T113468
Change-Id: I83c611866750f646a0591f3d4d5c873615af0998
---
M client/includes/Changes/AffectedPagesFinder.php
M client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
M lib/includes/Changes/DiffChange.php
M lib/includes/Changes/EntityChange.php
M lib/includes/Changes/EntityChangeFactory.php
5 files changed, 46 insertions(+), 51 deletions(-)


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

diff --git a/client/includes/Changes/AffectedPagesFinder.php 
b/client/includes/Changes/AffectedPagesFinder.php
index 99632b5..4456545 100644
--- a/client/includes/Changes/AffectedPagesFinder.php
+++ b/client/includes/Changes/AffectedPagesFinder.php
@@ -115,21 +115,21 @@
        }
 
        /**
-        * @param EntityChange|EntityDiffChangedAspects $change
+        * @param EntityChange $change
         *
         * @return string[]
         */
-       public function getChangedAspects( $change ) {
+       public function getChangedAspects( EntityChange $change ) {
                $aspects = [];
 
-               if ( $change instanceof EntityChange ) {
-                       $diff = $change->getDiff();
-                       $diffAspects = ( new EntityDiffChangedAspectsFactory() 
)->newFromEntityDiff( $diff );
-               } elseif ( $change instanceof EntityDiffChangedAspects ) {
-                       $diffAspects = $change;
+               $info = $change->getInfo();
+               // We might unserialize old EntityChange which doesn't have 
getAspectsDiff method
+               if ( array_key_exists( 'compactDiff', $info ) ) {
+                       $diffAspects = $change->getAspectsDiff();
                } else {
-                       throw  new InvalidArgumentException( 
'AffectedPagesFinder::getChangedAspects accepts ' .
-                               'EntityChange or EntityDiffChangedAspects' );
+                       $diffAspects = ( new EntityDiffChangedAspectsFactory() 
)->newFromEntityDiff(
+                               $change->getDiff()
+                       );
                }
 
                if ( $diffAspects->getSiteLinkChanges() !== [] ) {
diff --git a/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php 
b/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
index 59c9432..8997d85 100644
--- a/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
+++ b/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
@@ -223,24 +223,6 @@
                $this->assertEquals( $expected, $actual );
        }
 
-       /**
-        * @dataProvider getChangedAspectsProvider
-        */
-       public function testGetChangedAspectsUsingEntityChangeAspects(
-               array $expected,
-               EntityChange $change,
-               $trackUsagesInAllLanguages = false
-       ) {
-               $referencedPagesFinder = $this->getAffectedPagesFinder( [], [], 
$trackUsagesInAllLanguages );
-
-               $aspects = ( new EntityDiffChangedAspectsFactory() 
)->newFromEntityDiff( $change->getDiff() );
-               $actual = $referencedPagesFinder->getChangedAspects( $aspects );
-
-               sort( $expected );
-               sort( $actual );
-               $this->assertEquals( $expected, $actual );
-       }
-
        public function getAffectedUsagesByPageProvider() {
                $labelUsageDe = EntityUsage::LABEL_USAGE . '.de';
                $labelUsageEn = EntityUsage::LABEL_USAGE . '.en';
diff --git a/lib/includes/Changes/DiffChange.php 
b/lib/includes/Changes/DiffChange.php
index 7c651f6..3009050 100644
--- a/lib/includes/Changes/DiffChange.php
+++ b/lib/includes/Changes/DiffChange.php
@@ -3,6 +3,8 @@
 namespace Wikibase;
 
 use Diff\DiffOp\Diff\Diff;
+use Wikibase\Lib\Changes\EntityDiffChangedAspects;
+use Wikibase\Lib\Changes\EntityDiffChangedAspectsFactory;
 
 /**
  * Class for changes that can be represented as a Diff.
@@ -37,4 +39,28 @@
                $this->setField( 'info', $info );
        }
 
+       /**
+        * @param string $cache set to 'cache' to cache the unserialized 
aspects diff.
+        *
+        * @return EntityDiffChangedAspects
+        */
+       public function getAspectsDiff( $cache = 'no' ) {
+               $info = $this->getInfo( $cache );
+
+               if ( !array_key_exists( 'compactDiff', $info ) ) {
+                       // This shouldn't happen, but we should be robust 
against corrupt, incomplete
+                       // obsolete instances in the database, etc.
+                       wfLogWarning( 'Cannot get the diff when it has not been 
set yet.' );
+                       return ( new EntityDiffChangedAspectsFactory() 
)->newFromEntityDiff( new Diff() );
+               } else {
+                       return $info['compactDiff'];
+               }
+       }
+
+       public function setAspectsDiff( EntityDiffChangedAspects $diff ) {
+               $info = $this->getInfo();
+               $info['compactDiff'] = $diff;
+               $this->setField( 'info', $info );
+       }
+
 }
diff --git a/lib/includes/Changes/EntityChange.php 
b/lib/includes/Changes/EntityChange.php
index 9c62ac9..96571dd 100644
--- a/lib/includes/Changes/EntityChange.php
+++ b/lib/includes/Changes/EntityChange.php
@@ -16,6 +16,7 @@
 use Wikibase\DataModel\Entity\BasicEntityIdParser;
 use Wikibase\DataModel\Services\Diff\EntityTypeAwareDiffOpFactory;
 use Wikibase\DataModel\Statement\Statement;
+use Wikibase\Lib\Changes\EntityDiffChangedAspects;
 use Wikibase\Repo\WikibaseRepo;
 
 /**
@@ -292,6 +293,14 @@
                        }
                }
 
+               if ( isset( $info['compactDiff'] ) ) {
+                       $diff = $info['compactDiff'];
+
+                       if ( $diff instanceof EntityDiffChangedAspects ) {
+                               $info['compactDiff'] = serialize( $diff );
+                       }
+               }
+
                // Make sure we never serialize objects.
                // This is a lot of overhead, so we only do it during testing.
                if ( defined( 'MW_PHPUNIT_TEST' ) ) {
diff --git a/lib/includes/Changes/EntityChangeFactory.php 
b/lib/includes/Changes/EntityChangeFactory.php
index 82c2aa9..c5a945e 100644
--- a/lib/includes/Changes/EntityChangeFactory.php
+++ b/lib/includes/Changes/EntityChangeFactory.php
@@ -140,9 +140,6 @@
                        throw new MWException( 'Either $oldEntity or $newEntity 
must be given' );
                }
 
-               $this->minimizeEntityForDiffing( $oldEntity );
-               $this->minimizeEntityForDiffing( $newEntity );
-
                if ( $oldEntity === null ) {
                        $id = $newEntity->getId();
                        $diff = $this->entityDiffer->getConstructionDiff( 
$newEntity );
@@ -157,29 +154,10 @@
                }
 
                $instance = $this->newForEntity( $action, $id );
-               $instance->setDiff( $diff );
+               $aspectsDiff = ( new EntityDiffChangedAspectsFactory() 
)->newFromEntityDiff( $diff );
+               $instance->setAspectsDiff( $aspectsDiff );
 
                return $instance;
-       }
-
-       /**
-        * Hack: Don't include statement, description and alias diffs, since 
those are unused and not
-        * helpful performance-wise to the dispatcher and change handling.
-        *
-        * @fixme Implement T113468 and remove this.
-        *
-        * @param EntityDocument|null $entity
-        */
-       private function minimizeEntityForDiffing( EntityDocument $entity = 
null ) {
-               if ( $entity instanceof StatementListProvider ) {
-                       $entity->getStatements()->clear();
-               }
-
-               if ( $entity instanceof FingerprintProvider ) {
-                       $fingerprint = $entity->getFingerprint();
-
-                       $fingerprint->setAliasGroups( new AliasGroupList() );
-               }
        }
 
 }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I83c611866750f646a0591f3d4d5c873615af0998
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Ladsgroup <ladsgr...@gmail.com>

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

Reply via email to