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