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

Change subject: New Wikidata Build - 2017-11-30T21:26:41+0000
......................................................................

New Wikidata Build - 2017-11-30T21:26:41+0000

Change-Id: I75f33b373a80ac503c3bf882ab4b2f107e333467
---
M composer.lock
M extensions/ArticlePlaceholder/includes/ItemNotabilityFilter.php
M extensions/Wikibase/client/includes/Changes/AffectedPagesFinder.php
M 
extensions/Wikibase/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
M 
extensions/Wikibase/client/tests/phpunit/includes/Changes/ChangeRunCoalescerTest.php
M extensions/Wikibase/lib/includes/Changes/DiffChange.php
M extensions/Wikibase/lib/includes/Changes/EntityChange.php
M extensions/Wikibase/lib/includes/Changes/EntityChangeFactory.php
M extensions/Wikibase/lib/includes/Changes/ItemChange.php
M 
extensions/Wikibase/lib/includes/Store/LanguageFallbackLabelDescriptionLookupFactory.php
M extensions/Wikibase/lib/tests/phpunit/Changes/EntityChangeFactoryTest.php
M extensions/Wikibase/lib/tests/phpunit/Changes/ItemChangeTest.php
M vendor/composer/installed.json
13 files changed, 189 insertions(+), 134 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata 
refs/changes/09/394409/1

diff --git a/composer.lock b/composer.lock
index c42a7a0..46ae31b 100644
--- a/composer.lock
+++ b/composer.lock
@@ -665,12 +665,12 @@
             "source": {
                 "type": "git",
                 "url": 
"https://github.com/wikimedia/mediawiki-extensions-ArticlePlaceholder.git";,
-                "reference": "ae735a4771ec38972baac2e16f07a5b1b7304349"
+                "reference": "f5047a2f4e9c7af4c8cdacbe2468d8e4f9670235"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/ae735a4771ec38972baac2e16f07a5b1b7304349";,
-                "reference": "ae735a4771ec38972baac2e16f07a5b1b7304349",
+                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/f5047a2f4e9c7af4c8cdacbe2468d8e4f9670235";,
+                "reference": "f5047a2f4e9c7af4c8cdacbe2468d8e4f9670235",
                 "shasum": ""
             },
             "require": {
@@ -694,7 +694,7 @@
             ],
             "description": "Provides a special page with Wikibase information 
about a certain topic, with invitation to create an article for the topic",
             "homepage": 
"https://www.mediawiki.org/wiki/Extension:ArticlePlaceholder";,
-            "time": "2017-11-28 21:21:00"
+            "time": "2017-11-30 10:01:36"
         },
         {
             "name": "propertysuggester/property-suggester",
@@ -1228,7 +1228,7 @@
             "source": {
                 "type": "git",
                 "url": 
"https://gerrit.wikimedia.org/r/mediawiki/extensions/Wikibase";,
-                "reference": "97f81b47138216648c725b3e1b83b84829c3a2ee"
+                "reference": "1a7fdecb697345a1c04987f88da400cb7a4e9eb7"
             },
             "require": {
                 "composer/installers": ">=1.0.1",
@@ -1289,7 +1289,7 @@
                 "issues": "https://phabricator.wikimedia.org/";,
                 "irc": "irc://irc.freenode.net/wikidata"
             },
-            "time": "2017-11-30 09:50:18"
+            "time": "2017-11-30 16:11:46"
         },
         {
             "name": "wikibase/wikimedia-badges",
diff --git a/extensions/ArticlePlaceholder/includes/ItemNotabilityFilter.php 
b/extensions/ArticlePlaceholder/includes/ItemNotabilityFilter.php
index 2fb0e14..548665d 100644
--- a/extensions/ArticlePlaceholder/includes/ItemNotabilityFilter.php
+++ b/extensions/ArticlePlaceholder/includes/ItemNotabilityFilter.php
@@ -77,7 +77,7 @@
                        return [];
                }
 
-               $numericItemIds = [];
+               $byNumericId = [];
 
                $pagePropsByItem = $this->getPagePropsByItem( $itemIds );
 
@@ -91,22 +91,20 @@
                                $pageProps['wb-claims'] >= self::MIN_STATEMENTS 
&&
                                $pageProps['wb-sitelinks'] >= 
self::MIN_SITELINKS
                        ) {
-                               $numericItemIds[] = $itemId->getNumericId();
+                               $byNumericId[$itemId->getNumericId()] = $itemId;
                        }
                }
 
-               return $this->getItemsWithoutArticle( $numericItemIds );
+               return $this->getItemsWithoutArticle( $byNumericId );
        }
 
        /**
-        * Get number of statements and claims for a list of ItemIds
-        *
         * @param ItemId[] $itemIds
         *
         * @return int[][] Map of page_title => propname => numeric value
         */
        private function getPagePropsByItem( array $itemIds ) {
-               $statementsClaimsCount = [];
+               $values = [];
 
                $dbr = $this->connectionManager->getReadConnection();
 
@@ -115,10 +113,10 @@
                $this->connectionManager->releaseConnection( $dbr );
 
                foreach ( $res as $row ) {
-                       
$statementsClaimsCount[$row->page_title][$row->pp_propname] = intval( 
$row->pp_value ?: 0 );
+                       $values[$row->page_title][$row->pp_propname] = intval( 
$row->pp_value ?: 0 );
                }
 
-               return $statementsClaimsCount;
+               return $values;
        }
 
        /**
@@ -155,32 +153,23 @@
        }
 
        /**
-        * @param int[] $numericItemIds
+        * @param ItemId[] $itemIds expected to be indexed by numeric item ID
         *
         * @return ItemId[]
         */
-       private function getItemsWithoutArticle( array $numericItemIds ) {
-               if ( $numericItemIds === [] ) {
+       private function getItemsWithoutArticle( array $itemIds ) {
+               if ( $itemIds === [] ) {
                        return [];
                }
 
-               $itemIds = [];
-               $links = $this->siteLinkLookup->getLinks( $numericItemIds, [ 
$this->siteGlobalId ] );
+               $links = $this->siteLinkLookup->getLinks( array_keys( $itemIds 
), [ $this->siteGlobalId ] );
 
-               if ( !empty( $links ) ) {
-                       foreach ( $links as $link ) {
-                               $key = array_search( $link[2], $numericItemIds 
);
-                               if ( $key !== false ) {
-                                       unset( $numericItemIds[$key] );
-                               }
-                       }
+               foreach ( $links as $link ) {
+                       list( , , $numericId ) = $link;
+                       unset( $itemIds[$numericId] );
                }
 
-               foreach ( $numericItemIds as $itemId ) {
-                       $itemIds[] = ItemId::newFromNumber( $itemId );
-               }
-
-               return $itemIds;
+               return array_values( $itemIds );
        }
 
 }
diff --git 
a/extensions/Wikibase/client/includes/Changes/AffectedPagesFinder.php 
b/extensions/Wikibase/client/includes/Changes/AffectedPagesFinder.php
index 99632b5..9b0850e 100644
--- a/extensions/Wikibase/client/includes/Changes/AffectedPagesFinder.php
+++ b/extensions/Wikibase/client/includes/Changes/AffectedPagesFinder.php
@@ -16,7 +16,6 @@
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\EntityChange;
 use Wikibase\ItemChange;
-use Wikibase\Lib\Changes\EntityDiffChangedAspects;
 use Wikibase\Lib\Changes\EntityDiffChangedAspectsFactory;
 use Wikibase\Lib\Store\StorageException;
 
@@ -115,21 +114,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 
getCompactDiff method
+               if ( array_key_exists( 'compactDiff', $info ) ) {
+                       $diffAspects = $info['compactDiff'];
                } else {
-                       throw  new InvalidArgumentException( 
'AffectedPagesFinder::getChangedAspects accepts ' .
-                               'EntityChange or EntityDiffChangedAspects' );
+                       $diffAspects = ( new EntityDiffChangedAspectsFactory() 
)->newFromEntityDiff(
+                               $change->getDiff()
+                       );
                }
 
                if ( $diffAspects->getSiteLinkChanges() !== [] ) {
@@ -218,9 +217,15 @@
                $usages = $this->transformAllPageEntityUsages( $usages, 
$entityId, $changedAspects );
 
                if ( $change instanceof ItemChange && in_array( 
EntityUsage::TITLE_USAGE, $changedAspects ) ) {
-                       $diffChangedAspects = ( new 
EntityDiffChangedAspectsFactory() )->newFromEntityDiff(
-                               $change->getDiff()
-                       );
+                       $info = $change->getInfo();
+                       // We might unserialize old EntityChange which doesn't 
have getCompactDiff method
+                       if ( array_key_exists( 'compactDiff', $info ) ) {
+                               $diffChangedAspects = $info['compactDiff'];
+                       } else {
+                               $diffChangedAspects = ( new 
EntityDiffChangedAspectsFactory() )->newFromEntityDiff(
+                                       $change->getDiff()
+                               );
+                       }
                        $namesFromDiff = $this->getPagesReferencedInDiff(
                                $diffChangedAspects->getSiteLinkChanges()
                        );
diff --git 
a/extensions/Wikibase/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
 
b/extensions/Wikibase/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
index 59c9432..f166828 100644
--- 
a/extensions/Wikibase/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
+++ 
b/extensions/Wikibase/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
@@ -232,10 +232,18 @@
                $trackUsagesInAllLanguages = false
        ) {
                $referencedPagesFinder = $this->getAffectedPagesFinder( [], [], 
$trackUsagesInAllLanguages );
+               $info = $change->getInfo();
+               if ( !array_key_exists( 'compactDiff', $info ) ) {
+                       $aspects = ( new EntityDiffChangedAspectsFactory() 
)->newFromEntityDiff(
+                               $change->getDiff()
+                       );
+                       $info = $change->getInfo();
+                       $info['compactDiff'] = $aspects;
+                       $change->setField( 'info', $info );
 
-               $aspects = ( new EntityDiffChangedAspectsFactory() 
)->newFromEntityDiff( $change->getDiff() );
-               $actual = $referencedPagesFinder->getChangedAspects( $aspects );
+               }
 
+               $actual = $referencedPagesFinder->getChangedAspects( $change );
                sort( $expected );
                sort( $actual );
                $this->assertEquals( $expected, $actual );
diff --git 
a/extensions/Wikibase/client/tests/phpunit/includes/Changes/ChangeRunCoalescerTest.php
 
b/extensions/Wikibase/client/tests/phpunit/includes/Changes/ChangeRunCoalescerTest.php
index 4bc5c1c..8081361 100644
--- 
a/extensions/Wikibase/client/tests/phpunit/includes/Changes/ChangeRunCoalescerTest.php
+++ 
b/extensions/Wikibase/client/tests/phpunit/includes/Changes/ChangeRunCoalescerTest.php
@@ -2,8 +2,6 @@
 
 namespace Wikibase\Client\Tests\Changes;
 
-use Diff\DiffOp\AtomicDiffOp;
-use Traversable;
 use Wikibase\Change;
 use Wikibase\Client\Changes\ChangeRunCoalescer;
 use Wikibase\DataModel\Entity\Item;
@@ -12,6 +10,7 @@
 use Wikibase\DataModel\SiteLink;
 use Wikibase\EntityChange;
 use Wikibase\ItemChange;
+use Wikibase\Lib\Changes\EntityDiffChangedAspectsFactory;
 use Wikibase\Lib\Store\EntityRevisionLookup;
 use Wikibase\Lib\Tests\MockRepository;
 use Wikibase\Lib\Tests\Changes\TestChanges;
@@ -133,7 +132,8 @@
                }
                $change->setEntityId( new ItemId( $values['object_id'] ) );
 
-               $change->setDiff( $diff );
+               $diffAspects = ( new EntityDiffChangedAspectsFactory() 
)->newFromEntityDiff( $diff );
+               $change->setCompactDiff( $diffAspects );
 
                return $change;
        }
@@ -192,29 +192,10 @@
                        $this->assertArrayEquals( $expected->getMetadata(), 
$actual->getMetadata(), false, true );
                }
 
-               $this->assertDiffsEqual( $expected->getDiff(), 
$actual->getDiff() );
-       }
-
-       private function assertDiffsEqual( $expected, $actual, $path = '' ) {
-               if ( $expected instanceof AtomicDiffOp ) {
-                       //$this->assertEquals( $expected->getType(), 
$actual->getType(), $path . ' DiffOp.type' );
-                       $this->assertEquals( serialize( $expected ), serialize( 
$actual ), $path . ' DiffOp' );
-                       return;
-               }
-
-               if ( $expected instanceof Traversable ) {
-                       $expected = iterator_to_array( $expected );
-                       $actual = iterator_to_array( $actual );
-               }
-
-               foreach ( $expected as $key => $expectedValue ) {
-                       $currentPath = "$path/$key";
-                       $this->assertArrayHasKey( $key, $actual, $currentPath . 
" missing key" );
-                       $this->assertDiffsEqual( $expectedValue, $actual[$key], 
$currentPath );
-               }
-
-               $extraKeys = array_diff( array_keys( $actual ), array_keys( 
$expected ) );
-               $this->assertEquals( [], $extraKeys, $path . " extra keys" );
+               $this->assertSame(
+                       $expected->getCompactDiff()->toArray(),
+                       $actual->getCompactDiff()->toArray()
+               );
        }
 
        public function provideCoalesceChanges() {
diff --git a/extensions/Wikibase/lib/includes/Changes/DiffChange.php 
b/extensions/Wikibase/lib/includes/Changes/DiffChange.php
index 7c651f6..f004ca4 100644
--- a/extensions/Wikibase/lib/includes/Changes/DiffChange.php
+++ b/extensions/Wikibase/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,26 @@
                $this->setField( 'info', $info );
        }
 
+       /**
+        * @return EntityDiffChangedAspects
+        */
+       public function getCompactDiff() {
+               $info = $this->getInfo();
+
+               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 setCompactDiff( EntityDiffChangedAspects $diff ) {
+               $info = $this->getInfo();
+               $info['compactDiff'] = $diff;
+               $this->setField( 'info', $info );
+       }
+
 }
diff --git a/extensions/Wikibase/lib/includes/Changes/EntityChange.php 
b/extensions/Wikibase/lib/includes/Changes/EntityChange.php
index 9c62ac9..c10438b 100644
--- a/extensions/Wikibase/lib/includes/Changes/EntityChange.php
+++ b/extensions/Wikibase/lib/includes/Changes/EntityChange.php
@@ -3,6 +3,7 @@
 namespace Wikibase;
 
 use Deserializers\Deserializer;
+use Diff\DiffOp\Diff\Diff;
 use Diff\DiffOp\DiffOp;
 use Diff\DiffOpFactory;
 use MWException;
@@ -16,6 +17,8 @@
 use Wikibase\DataModel\Entity\BasicEntityIdParser;
 use Wikibase\DataModel\Services\Diff\EntityTypeAwareDiffOpFactory;
 use Wikibase\DataModel\Statement\Statement;
+use Wikibase\Lib\Changes\EntityDiffChangedAspects;
+use Wikibase\Lib\Changes\EntityDiffChangedAspectsFactory;
 use Wikibase\Repo\WikibaseRepo;
 
 /**
@@ -292,6 +295,14 @@
                        }
                }
 
+               if ( isset( $info['compactDiff'] ) ) {
+                       $diff = $info['compactDiff'];
+
+                       if ( $diff instanceof EntityDiffChangedAspects ) {
+                               $info['compactDiff'] = $diff->serialize();
+                       }
+               }
+
                // Make sure we never serialize objects.
                // This is a lot of overhead, so we only do it during testing.
                if ( defined( 'MW_PHPUNIT_TEST' ) ) {
@@ -363,6 +374,14 @@
                        $info['diff'] = $factory->newFromArray( $info['diff'] );
                }
 
+               if ( isset( $info['compactDiff'] ) && is_array( 
$info['compactDiff'] ) && $info['compactDiff'] ) {
+                       $compactDiff = ( new EntityDiffChangedAspectsFactory() 
)->newFromEntityDiff(
+                               new Diff()
+                       );
+                       $compactDiff->unserialize( $info['compactDiff'] );
+                       $info['compactDiff'] = $compactDiff;
+               }
+
                return $info;
        }
 
diff --git a/extensions/Wikibase/lib/includes/Changes/EntityChangeFactory.php 
b/extensions/Wikibase/lib/includes/Changes/EntityChangeFactory.php
index 82c2aa9..ba2b3cd 100644
--- a/extensions/Wikibase/lib/includes/Changes/EntityChangeFactory.php
+++ b/extensions/Wikibase/lib/includes/Changes/EntityChangeFactory.php
@@ -8,9 +8,6 @@
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Entity\EntityIdParser;
 use Wikibase\DataModel\Services\Diff\EntityDiffer;
-use Wikibase\DataModel\Statement\StatementListProvider;
-use Wikibase\DataModel\Term\AliasGroupList;
-use Wikibase\DataModel\Term\FingerprintProvider;
 use Wikibase\EntityChange;
 use Wikimedia\Assert\Assert;
 
@@ -140,9 +137,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 +151,10 @@
                }
 
                $instance = $this->newForEntity( $action, $id );
-               $instance->setDiff( $diff );
+               $aspectsDiff = ( new EntityDiffChangedAspectsFactory() 
)->newFromEntityDiff( $diff );
+               $instance->setCompactDiff( $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() );
-               }
        }
 
 }
diff --git a/extensions/Wikibase/lib/includes/Changes/ItemChange.php 
b/extensions/Wikibase/lib/includes/Changes/ItemChange.php
index 467f6dd..706d55e 100644
--- a/extensions/Wikibase/lib/includes/Changes/ItemChange.php
+++ b/extensions/Wikibase/lib/includes/Changes/ItemChange.php
@@ -2,8 +2,12 @@
 
 namespace Wikibase;
 
+use Diff\DiffOpAdd;
+use Diff\DiffOpChange;
 use Diff\DiffOp\Diff\Diff;
+use Diff\DiffOpRemove;
 use Wikibase\DataModel\Services\Diff\ItemDiff;
+use Wikibase\Lib\Changes\EntityDiffChangedAspects;
 
 /**
  * @license GPL-2.0+
@@ -16,22 +20,60 @@
         * @return Diff
         */
        public function getSiteLinkDiff() {
+               $info = $this->getInfo();
+               if ( !array_key_exists( 'diff', $info ) ) {
+                       if ( !array_key_exists( 'compactDiff', $info ) ) {
+                               $this->logWarning( $this );
+                               return new Diff();
+                       }
+
+                       $aspects = $info['compactDiff'];
+                       if ( !( $aspects instanceof EntityDiffChangedAspects ) 
) {
+                               $this->logWarning( $aspects );
+                               return new Diff();
+                       }
+                       return $this->getDiffFromSiteLinkChanges( 
$aspects->getSiteLinkChanges() );
+
+               }
                $diff = $this->getDiff();
-
                if ( !( $diff instanceof ItemDiff ) ) {
-                       // This shouldn't happen, but we should be robust 
against corrupt, incomplete
-                       // or obsolete instances in the database, etc.
-
-                       $cls = $diff === null ? 'null' : get_class( $diff );
-
-                       wfLogWarning(
-                               'Cannot get sitelink diff from ' . $cls . '. 
Change #' . $this->getId()
-                               . ", type " . $this->getType() );
-
+                       $this->logWarning( $diff );
                        return new Diff();
                } else {
                        return $diff->getSiteLinkDiff();
                }
        }
 
+       private function getDiffFromSiteLinkChanges( array $siteLinkChanges ) {
+               $siteLinkDiff = [];
+               foreach ( $siteLinkChanges as $wiki => $change ) {
+                       if ( $change[0] === $change[1] ) {
+                               continue;
+                       }
+                       $siteLinkDiff[$wiki] = 
$this->getDiffFromSiteLinkChangesPerWiki( $change );
+               }
+
+               return new Diff( $siteLinkDiff, true );
+       }
+
+       private function getDiffFromSiteLinkChangesPerWiki( array $change ) {
+               if ( $change[0] === null && $change[1] !== null ) {
+                       return new Diff( [ 'name' => new DiffOpAdd( $change[1] 
) ], true );
+               } elseif ( $change[0] !== null && $change[1] === null ) {
+                       return new Diff( [ 'name' => new DiffOpRemove( 
$change[0] ) ], true );
+               } else {
+                       return new Diff( [ 'name' => new DiffOpChange( 
$change[0], $change[1] ) ], true );
+               }
+       }
+
+       private function logWarning( $obj ) {
+               // This shouldn't happen, but we should be robust against 
corrupt, incomplete
+               // or obsolete instances in the database, etc.
+
+               $cls = $obj === null ? 'null' : get_class( $obj );
+               wfLogWarning(
+                       'Cannot get sitelink diff from ' . $cls . '. Change #' 
. $this->getId()
+                       . ", type " . $this->getType() );
+       }
+
 }
diff --git 
a/extensions/Wikibase/lib/includes/Store/LanguageFallbackLabelDescriptionLookupFactory.php
 
b/extensions/Wikibase/lib/includes/Store/LanguageFallbackLabelDescriptionLookupFactory.php
index 87c74c0..c6f05c9 100644
--- 
a/extensions/Wikibase/lib/includes/Store/LanguageFallbackLabelDescriptionLookupFactory.php
+++ 
b/extensions/Wikibase/lib/includes/Store/LanguageFallbackLabelDescriptionLookupFactory.php
@@ -5,7 +5,6 @@
 use InvalidArgumentException;
 use Language;
 use Wikibase\DataModel\Entity\EntityId;
-use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
 use Wikibase\DataModel\Services\Lookup\TermLookup;
 use Wikibase\DataModel\Services\Term\TermBuffer;
 use Wikibase\LanguageFallbackChainFactory;
@@ -74,7 +73,7 @@
         * @param string[] $termTypes Array with one or more of the types 
'label', 'alias' and
         *  'description'. Default is only 'label'.
         *
-        * @return LabelDescriptionLookup
+        * @return LanguageFallbackLabelDescriptionLookup
         */
        public function newLabelDescriptionLookup(
                Language $language,
diff --git 
a/extensions/Wikibase/lib/tests/phpunit/Changes/EntityChangeFactoryTest.php 
b/extensions/Wikibase/lib/tests/phpunit/Changes/EntityChangeFactoryTest.php
index 0ca1f57..1beec9d 100644
--- a/extensions/Wikibase/lib/tests/phpunit/Changes/EntityChangeFactoryTest.php
+++ b/extensions/Wikibase/lib/tests/phpunit/Changes/EntityChangeFactoryTest.php
@@ -2,9 +2,6 @@
 
 namespace Wikibase\Lib\Tests\Changes;
 
-use Diff\DiffOp\Diff\Diff;
-use Diff\DiffOp\DiffOpAdd;
-use Diff\DiffOp\DiffOpRemove;
 use Wikibase\DataModel\Entity\BasicEntityIdParser;
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Entity\Item;
@@ -129,8 +126,8 @@
                $this->assertEquals( 'wikibase-item~update', 
$change->getType(), 'type' );
 
                $this->assertEquals(
-                       new Diff( [ 'es' => new DiffOpAdd( 'gato' ) ] ),
-                       $change->getDiff()->getLabelsDiff(),
+                       [ 'es' ],
+                       $change->getCompactDiff()->getLabelChanges(),
                        'diff'
                );
        }
@@ -149,8 +146,8 @@
                $this->assertEquals( 'wikibase-item~add', $change->getType(), 
'type' );
 
                $this->assertEquals(
-                       new Diff( [ 'en' => new DiffOpAdd( 'kitten' ) ] ),
-                       $change->getDiff()->getLabelsDiff(),
+                       [ 'en' ],
+                       $change->getCompactDiff()->getLabelChanges(),
                        'diff'
                );
        }
@@ -169,8 +166,8 @@
                $this->assertEquals( 'wikibase-property~remove', 
$change->getType(), 'type' );
 
                $this->assertEquals(
-                       new Diff( [ 'de' => new DiffOpRemove( 'Katze' ) ] ),
-                       $change->getDiff()->getLabelsDiff(),
+                       [ 'de' ],
+                       $change->getCompactDiff()->getLabelChanges(),
                        'diff'
                );
        }
@@ -189,12 +186,8 @@
                $this->assertEquals( 'wikibase-item~restore', 
$change->getType(), 'type' );
 
                $this->assertEquals(
-                       new Diff( [
-                               'enwiki' => new Diff( [
-                                       'name' => new DiffOpAdd( 'Kitten' )
-                               ] )
-                       ] ),
-                       $change->getDiff()->getSiteLinkDiff(),
+                       [ 'enwiki' => [ null, 'Kitten', false ] ],
+                       $change->getCompactDiff()->getSiteLinkChanges(),
                        'diff'
                );
        }
@@ -218,8 +211,9 @@
 
                $change = $factory->newFromUpdate( EntityChange::UPDATE, $item, 
$updatedItem );
 
-               $this->assertTrue(
-                       $change->getDiff()->isEmpty(),
+               $this->assertSame(
+                       [ 'P10', 'P9000' ],
+                       $change->getCompactDiff()->getStatementChanges(),
                        'Diff excludes statement changes and is empty'
                );
        }
diff --git a/extensions/Wikibase/lib/tests/phpunit/Changes/ItemChangeTest.php 
b/extensions/Wikibase/lib/tests/phpunit/Changes/ItemChangeTest.php
index 372f005..7054689 100644
--- a/extensions/Wikibase/lib/tests/phpunit/Changes/ItemChangeTest.php
+++ b/extensions/Wikibase/lib/tests/phpunit/Changes/ItemChangeTest.php
@@ -8,6 +8,7 @@
 use Wikibase\DataModel\Services\Diff\ItemDiff;
 use Wikibase\EntityChange;
 use Wikibase\ItemChange;
+use Wikibase\Lib\Changes\EntityDiffChangedAspectsFactory;
 
 /**
  * @covers Wikibase\ItemChange
@@ -55,6 +56,24 @@
                $this->assertInstanceOf( Diff::class, $siteLinkDiff, 
'getSiteLinkDiff must return a Diff' );
        }
 
+       /**
+        * @dataProvider changeProvider
+        *
+        * @param ItemChange $change
+        */
+       public function testGetSiteLinkDiffFromCompactDiff( ItemChange $change 
) {
+               $info = $change->getInfo();
+               if ( !array_key_exists( 'compactDiff', $info ) ) {
+                       $aspects = ( new EntityDiffChangedAspectsFactory() 
)->newFromEntityDiff(
+                               $change->getDiff()
+                       );
+                       $info['compactDiff'] = $aspects;
+                       $change->setField( 'info', $info );
+               }
+               $siteLinkDiff = $change->getSiteLinkDiff();
+               $this->assertInstanceOf( Diff::class, $siteLinkDiff, 
'getSiteLinkDiff must return a Diff' );
+       }
+
        public function changeBackwardsCompatProvider() {
                global $wgDevelopmentWarnings;
 
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index b8b095b..840c8ce 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -125,12 +125,12 @@
         "source": {
             "type": "git",
             "url": 
"https://github.com/wikimedia/mediawiki-extensions-ArticlePlaceholder.git";,
-            "reference": "ae735a4771ec38972baac2e16f07a5b1b7304349"
+            "reference": "f5047a2f4e9c7af4c8cdacbe2468d8e4f9670235"
         },
         "dist": {
             "type": "zip",
-            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/ae735a4771ec38972baac2e16f07a5b1b7304349";,
-            "reference": "ae735a4771ec38972baac2e16f07a5b1b7304349",
+            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/f5047a2f4e9c7af4c8cdacbe2468d8e4f9670235";,
+            "reference": "f5047a2f4e9c7af4c8cdacbe2468d8e4f9670235",
             "shasum": ""
         },
         "require": {
@@ -142,7 +142,7 @@
             "mediawiki/minus-x": "0.2.0",
             "wikibase/wikibase-codesniffer": "^0.2.0"
         },
-        "time": "2017-11-28 21:21:00",
+        "time": "2017-11-30 10:01:36",
         "type": "mediawiki-extension",
         "installation-source": "dist",
         "notification-url": "https://packagist.org/downloads/";,
@@ -1298,7 +1298,7 @@
         "source": {
             "type": "git",
             "url": 
"https://gerrit.wikimedia.org/r/mediawiki/extensions/Wikibase";,
-            "reference": "97f81b47138216648c725b3e1b83b84829c3a2ee"
+            "reference": "1a7fdecb697345a1c04987f88da400cb7a4e9eb7"
         },
         "require": {
             "composer/installers": ">=1.0.1",
@@ -1327,7 +1327,7 @@
             "mediawiki/minus-x": "0.1.0",
             "wikibase/wikibase-codesniffer": "^0.2.0"
         },
-        "time": "2017-11-30 09:50:18",
+        "time": "2017-11-30 16:11:46",
         "type": "mediawiki-extension",
         "installation-source": "source",
         "scripts": {

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I75f33b373a80ac503c3bf882ab4b2f107e333467
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikidata
Gerrit-Branch: master
Gerrit-Owner: WikidataBuilder <[email protected]>

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

Reply via email to