Ladsgroup has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/390301 )
Change subject: Make AffectedPagesFinder take DESCRIPTION_USAGE into account
......................................................................
Make AffectedPagesFinder take DESCRIPTION_USAGE into account
Bug: T176417
Change-Id: Ib5d212ad81569ef7a651f96f30cae8d8ae79c17e
---
M client/includes/Changes/AffectedPagesFinder.php
M client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
M lib/includes/Changes/EntityChangeFactory.php
3 files changed, 72 insertions(+), 1 deletion(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/01/390301/1
diff --git a/client/includes/Changes/AffectedPagesFinder.php
b/client/includes/Changes/AffectedPagesFinder.php
index 8a3bdc8..fe66f77 100644
--- a/client/includes/Changes/AffectedPagesFinder.php
+++ b/client/includes/Changes/AffectedPagesFinder.php
@@ -161,6 +161,16 @@
$remainingDiffOps -= count( $labelAspects );
}
}
+
+ if ( $diff instanceof EntityDiff &&
!$diff->getDescriptionsDiff()->isEmpty() ) {
+ $descriptionsDiff = $diff->getDescriptionsDiff();
+
+ if ( !empty( $descriptionsDiff ) ) {
+ $descriptionsAspects =
$this->getChangedDescriptionAspects( $descriptionsDiff );
+ $aspects = array_merge( $aspects,
$descriptionsAspects );
+ $remainingDiffOps -= count(
$descriptionsAspects );
+ }
+ }
// FIXME: EntityChange suppresses various kinds of diffs (see
above). T113468.
if ( $remainingDiffOps > 0 ) {
@@ -193,6 +203,28 @@
}
/**
+ * @param Diff $descriptionsDiff
+ *
+ * @return string[]
+ */
+ private function getChangedDescriptionAspects( Diff $descriptionsDiff )
{
+ $aspects = [];
+
+ foreach ( $descriptionsDiff as $lang => $diffOp ) {
+ $aspects[] = EntityUsage::makeAspectKey(
EntityUsage::DESCRIPTION_USAGE, $lang );
+ }
+
+ if ( $this->trackUsagesInAllLanguages ) {
+ // On multi-lingual wikis where users can request pages
in any language, we can not
+ // optimize for one language fallback chain only. Since
all possible language fallback
+ // chains must cover all languages, we can simply track
an "all languages" usage.
+ $aspects[] = EntityUsage::makeAspectKey(
EntityUsage::DESCRIPTION_USAGE );
+ }
+
+ return $aspects;
+ }
+
+ /**
* Returns the page updates implied by the given the change.
*
* @param EntityChange $change
diff --git a/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
b/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
index 2167b5a..83a2efc 100644
--- a/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
+++ b/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
@@ -5,6 +5,7 @@
use ArrayIterator;
use DataValues\DataValue;
use DataValues\StringValue;
+use Diff\Differ\MapDiffer;
use Title;
use Traversable;
use Wikibase\Client\Changes\AffectedPagesFinder;
@@ -189,6 +190,14 @@
$this->getItemWithSiteLinks( $q1, [ 'enwiki' =>
'1' ], $badges ) )
];
+ $cases['description only change on Q1'] = [
+ [ EntityUsage::DESCRIPTION_USAGE . '.en' ],
+ $changeFactory->newFromUpdate(
+ EntityChange::UPDATE,
+ $this->getItemWithDescriptions( $q1, [ 'en' =>
'Hello' ] ),
+ $this->getItemWithDescriptions( $q1, [ 'en' =>
'Hallo' ] ) )
+ ];
+
$cases['statement change on Q1'] = [
[ EntityUsage::OTHER_USAGE ],
$changeFactory->newFromUpdate(
@@ -236,6 +245,8 @@
$q1TitleUsage = new EntityUsage( $q1, EntityUsage::TITLE_USAGE
);
$q2TitleUsage = new EntityUsage( $q2, EntityUsage::TITLE_USAGE
);
+ $q2DescriptionUsage_en = new EntityUsage( $q2,
EntityUsage::DESCRIPTION_USAGE, 'en' );
+
// Page 1 is linked to Q1
$page1Q1Usages = new PageEntityUsages( 1, [
$q1SitelinkUsage,
@@ -245,6 +256,7 @@
$page2Q1Usages = new PageEntityUsages( 2, [
$q1LabelUsage_en,
$q1TitleUsage,
+ $q2DescriptionUsage_en,
] );
// Page 1 uses label and title to link to Q2, and shows the
German label too.
@@ -448,6 +460,19 @@
)
];
+ $cases['local description change on Q2 (used by page 2)'] = [
+ [
+ new PageEntityUsages( 2, [
$q2DescriptionUsage_en ] ),
+ ],
+ [ EntityUsage::DESCRIPTION_USAGE . '.en' ],
+ [ $page2Q2Usages ],
+ $changeFactory->newFromUpdate(
+ EntityChange::UPDATE,
+ new Item( $q2 ),
+ $this->getItemWithDescriptions( $q2, [ 'en' =>
'Wow' ] )
+ )
+ ];
+
return $cases;
}
@@ -543,6 +568,21 @@
/**
* @param ItemId $id
+ * @param string[] $descriptions
+ *
+ * @return Item
+ */
+ private function getItemWithDescriptions( ItemId $id, $descriptions ) {
+ $item = new Item( $id );
+ foreach ( $descriptions as $language => $value ) {
+ $item->setDescription( $language, $value );
+ }
+
+ return $item;
+ }
+
+ /**
+ * @param ItemId $id
* @param string $languageCode
* @param string[] $aliases
*
diff --git a/lib/includes/Changes/EntityChangeFactory.php
b/lib/includes/Changes/EntityChangeFactory.php
index e3e85a4..7d6fa87 100644
--- a/lib/includes/Changes/EntityChangeFactory.php
+++ b/lib/includes/Changes/EntityChangeFactory.php
@@ -179,7 +179,6 @@
if ( $entity instanceof FingerprintProvider ) {
$fingerprint = $entity->getFingerprint();
- $fingerprint->setDescriptions( new TermList() );
$fingerprint->setAliasGroups( new AliasGroupList() );
}
}
--
To view, visit https://gerrit.wikimedia.org/r/390301
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib5d212ad81569ef7a651f96f30cae8d8ae79c17e
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Ladsgroup <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits