jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/348048 )

Change subject: Consider languages being it's own parent in 
LanguageFallbackChainFactory
......................................................................


Consider languages being it's own parent in LanguageFallbackChainFactory

As far as I can tell this change is not that relevant in production because
we are currently exclusively using the …::FALLBACK_ALL mode in production.
But I feel this makes the code more clean and behave more like you would
expect: if you don't ask for a self-reference, you should not get one, even
if it is in core's variants list for some reason.

Bug: T156280
Change-Id: I1d9691c784032669979f8109c9a5f65cbf4122c9
---
M lib/includes/LanguageFallbackChainFactory.php
M lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
2 files changed, 28 insertions(+), 12 deletions(-)

Approvals:
  Smalyshev: Looks good to me, but someone else must approve
  C. Scott Ananian: Looks good to me, but someone else must approve
  Ladsgroup: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/lib/includes/LanguageFallbackChainFactory.php 
b/lib/includes/LanguageFallbackChainFactory.php
index 0c4cda0..7d12a73 100644
--- a/lib/includes/LanguageFallbackChainFactory.php
+++ b/lib/includes/LanguageFallbackChainFactory.php
@@ -99,7 +99,7 @@
         * @param Language|string $language Language object or language code as 
string
         * @param int $mode Bitfield of self::FALLBACK_*
         * @param LanguageFallbackChain[] $chain for recursive calls
-        * @param array $fetched for recursive calls
+        * @param bool[] $fetched for recursive calls
         *
         * @throws InvalidArgumentException
         * @return LanguageWithConversion[]
@@ -123,16 +123,16 @@
                }
 
                if ( $mode & self::FALLBACK_VARIANTS ) {
-                       /** @var Language $parentLanguage */
-                       $pieces = explode( '-', $languageCode );
-                       if ( !in_array( $pieces[0], 
LanguageConverter::$languagesWithVariants ) ) {
-                               $parentLanguage = null;
-                       } else {
+                       $parentLanguage = null;
+                       $pieces = explode( '-', $languageCode, 2 );
+
+                       if ( in_array( $pieces[0], 
LanguageConverter::$languagesWithVariants ) ) {
                                if ( is_string( $language ) ) {
                                        $language = Language::factory( 
$language );
                                }
                                $parentLanguage = 
$language->getParentLanguage();
                        }
+
                        if ( $parentLanguage ) {
                                // It's less likely to trigger conversion 
mistakes by converting
                                // zh-tw to zh-hk first instead of converting 
zh-cn to zh-tw.
@@ -147,12 +147,14 @@
                                }
 
                                foreach ( $variants as $variant ) {
-                                       if ( isset( $fetched[$variant] ) || 
!$parentLanguage->hasVariant( $variant ) ) {
-                                               continue;
+                                       if ( !isset( $fetched[$variant] )
+                                               // The self::FALLBACK_SELF mode 
is already responsible for self-references.
+                                               && $variant !== $languageCode
+                                               && $parentLanguage->hasVariant( 
$variant )
+                                       ) {
+                                               $chain[] = 
LanguageWithConversion::factory( $language, $variant );
+                                               $fetched[$variant] = true;
                                        }
-
-                                       $chain[] = 
LanguageWithConversion::factory( $language, $variant );
-                                       $fetched[$variant] = true;
                                }
                        }
                }
diff --git a/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php 
b/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
index e4c871e..b5e0903 100644
--- a/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
+++ b/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
@@ -218,7 +218,21 @@
                                        [ 'zh', 'zh-sg' ],
                                        [ 'zh', 'zh-mo' ],
                                        [ 'zh', 'zh-my' ],
-                                       [ 'zh', 'zh' ],
+                               ]
+                       ],
+                       [
+                               'languageCode' => 'zh',
+                               'mode' => 
LanguageFallbackChainFactory::FALLBACK_SELF | 
LanguageFallbackChainFactory::FALLBACK_VARIANTS,
+                               'expected' => [
+                                       'zh', // This should be the only 
difference to the test case above
+                                       [ 'zh', 'zh-hans' ],
+                                       [ 'zh', 'zh-hant' ],
+                                       [ 'zh', 'zh-cn' ],
+                                       [ 'zh', 'zh-tw' ],
+                                       [ 'zh', 'zh-hk' ],
+                                       [ 'zh', 'zh-sg' ],
+                                       [ 'zh', 'zh-mo' ],
+                                       [ 'zh', 'zh-my' ],
                                ]
                        ],
                        [

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I1d9691c784032669979f8109c9a5f65cbf4122c9
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: Aude <[email protected]>
Gerrit-Reviewer: C. Scott Ananian <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Hoo man <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Liangent <[email protected]>
Gerrit-Reviewer: Smalyshev <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to