jenkins-bot has submitted this change and it was merged. ( 
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, 71 insertions(+), 2 deletions(-)

Approvals:
  WMDE-leszek: Looks good to me, but someone else must approve
  jenkins-bot: Verified
  Thiemo Mättig (WMDE): Looks good to me, approved



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..7f07c52 100644
--- a/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
+++ b/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
@@ -189,6 +189,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 +244,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 +255,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 +459,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 +567,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..82c2aa9 100644
--- a/lib/includes/Changes/EntityChangeFactory.php
+++ b/lib/includes/Changes/EntityChangeFactory.php
@@ -11,7 +11,6 @@
 use Wikibase\DataModel\Statement\StatementListProvider;
 use Wikibase\DataModel\Term\AliasGroupList;
 use Wikibase\DataModel\Term\FingerprintProvider;
-use Wikibase\DataModel\Term\TermList;
 use Wikibase\EntityChange;
 use Wikimedia\Assert\Assert;
 
@@ -179,7 +178,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: merged
Gerrit-Change-Id: Ib5d212ad81569ef7a651f96f30cae8d8ae79c17e
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Ladsgroup <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Hoo man <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: WMDE-leszek <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to