TTO has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/94593


Change subject: Add language override options for rebuildInterwiki
......................................................................

Add language override options for rebuildInterwiki

This will allow chapter wikis to have the project interwiki prefixes (e.g.
"w:") point to the relevant projects for that chapter.

I have also unified a lot of the duplicated config variables in both
dump and rebuild, it now all lives in dump.

Note that this will change interwikis for several chapter wikis without
them having specifically asked for it (I just copied the list out of
InitialiseSettings). But I don't think this is a problem - rather, it is a
Good Thing. For instance, the Argentinian chapter currently gets
interproject links to Arabic projects, and I don't think they'll be
sad to lose those!

Bug: 56207
Bug: 55733
Bug: 53011
Change-Id: Ie327c77eaf6f9b65a3bb6b8741f88d60fabfdae6
---
M dumpInterwiki.php
M rebuildInterwiki.php
2 files changed, 129 insertions(+), 98 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikimediaMaintenance 
refs/changes/93/94593/1

diff --git a/dumpInterwiki.php b/dumpInterwiki.php
index 2ecc8be..f6fa8b3 100644
--- a/dumpInterwiki.php
+++ b/dumpInterwiki.php
@@ -31,13 +31,107 @@
        /**
         * @var array
         */
-       protected $langlist, $dblist, $specials, $languageAliases, 
$prefixRewrites, $prefixLists;
+       protected $langlist, $dblist, $specials, $prefixLists;
 
        /**
         * @var CdbWriter
         */
        protected $dbFile;
        protected $urlprotocol;
+
+       /**
+        * Returns an array of multi-language sites
+        * db suffix => db suffix, iw prefix, hostname
+        * @returns array
+        */
+       protected function getSites() {
+               return array(
+               'wiki' => new WMFSite( 'wiki', 'w', 'wikipedia.org' ),
+               'wiktionary' => new WMFSite( 'wiktionary', 'wikt', 
'wiktionary.org' ),
+               'wikiquote' => new WMFSite( 'wikiquote', 'q', 'wikiquote.org' ),
+               'wikibooks' => new WMFSite( 'wikibooks', 'b', 'wikibooks.org' ),
+               'wikinews' => new WMFSite( 'wikinews', 'n', 'wikinews.org' ),
+               'wikisource' => new WMFSite( 'wikisource', 's', 
'wikisource.org' ),
+               'wikimedia' => new WMFSite( 'wikimedia', 'chapter', 
'wikimedia.org' ),
+               'wikiversity' => new WMFSite( 'wikiversity', 'v', 
'wikiversity.org' ),
+               'wikivoyage' => new WMFSite( 'wikivoyage', 'voy', 
'wikivoyage.org' ),
+               );
+       }
+
+       /**
+        * Returns an array of extra interwiki links that can't be in the 
intermap for
+        * some reason
+        * @returns array
+        */
+       protected function getExtraLinks() {
+               return array(
+                       array( 'm', $this->urlprotocol . 
'//meta.wikimedia.org/wiki/$1', 1 ),
+                       array( 'meta', $this->urlprotocol . 
'//meta.wikimedia.org/wiki/$1', 1 ),
+                       array( 'sep11', $this->urlprotocol . 
'//sep11.wikipedia.org/wiki/$1', 1 ),
+                       array( 'd', $this->urlprotocol . 
'//www.wikidata.org/wiki/$1', 1 ),
+               );
+       }
+
+       /**
+        * Site overrides for wikis whose DB names end in 'wiki' but that 
really belong to another site
+        * @var array
+        */
+       protected static $siteOverrides = array(
+               'sourceswiki' => array( 'wikisource', 'en' ),
+       );
+
+       /**
+        * Language aliases, usually configured as redirects to the real wiki 
in apache
+        * Interlanguage links are made directly to the real wiki
+        * Something horrible happens if you forget to list an alias here, I 
can't
+        *   remember what
+        * @var array
+        */
+       protected static $languageAliases = array(
+               'zh-cn' => 'zh',
+               'zh-tw' => 'zh',
+               'dk' => 'da',
+               'nb' => 'no',
+       );
+
+       /** 
+        * Special case prefix rewrites, for the benefit of Swedish which uses 
s:t
+        * as an abbreviation for saint
+        */
+       protected static $prefixRewrites = array(
+               'svwiki' => array( 's' => 'src' ),
+       );
+
+       /**
+        * Set the wiki's interproject links to point to some other language 
code
+        * Useful for chapter wikis (e.g. brwikimedia (Brazil chapter) has 
nothing to
+        *   do with br language (Breton), interwikis like w: should point to
+        *   Portuguese projects instead)
+        * @var array
+        */
+       protected static $languageOverrides = array(
+               'wikimedia' => array(
+                       'ar' => 'es',
+                       'bd' => 'bn',
+                       'be' => 'en',
+                       'br' => 'pt',
+                       'co' => 'es',
+                       'dk' => 'da',
+                       'il' => 'he',
+                       'mx' => 'es',
+                       'noboard_chapters' => 'no',
+                       'nyc' => 'en',
+                       'nz' => 'en',
+                       'pa_us' => 'en',
+                       'rs' => 'sr',
+                       'se' => 'sv',
+                       'ua' => 'uk',
+                       'uk' => 'en',
+               ),
+               'wikiversity' => array(
+                       'beta' => 'en',
+               ),
+       );
 
        public function __construct() {
                parent::__construct();
@@ -80,56 +174,15 @@
        function getRebuildInterwikiDump() {
                global $wgContLang;
 
-               # Multi-language sites
-               # db suffix => db suffix, iw prefix, hostname
-               $sites = array(
-                       'wiki' => new WMFSite( 'wiki', 'w', 'wikipedia.org' ),
-                       'wiktionary' => new WMFSite( 'wiktionary', 'wikt', 
'wiktionary.org' ),
-                       'wikiquote' => new WMFSite( 'wikiquote', 'q', 
'wikiquote.org' ),
-                       'wikibooks' => new WMFSite( 'wikibooks', 'b', 
'wikibooks.org' ),
-                       'wikinews' => new WMFSite( 'wikinews', 'n', 
'wikinews.org' ),
-                       'wikisource' => new WMFSite( 'wikisource', 's', 
'wikisource.org' ),
-                       'wikimedia' => new WMFSite( 'wikimedia', 'chapter', 
'wikimedia.org' ),
-                       'wikiversity' => new WMFSite( 'wikiversity', 'v', 
'wikiversity.org' ),
-                       'wikivoyage' => new WMFSite( 'wikivoyage', 'voy', 
'wikivoyage.org' ),
-               );
-
-               # Site overrides for wikis whose DB names end in 'wiki' but 
that really belong to another site
-               $siteOverrides = array(
-                       'sourceswiki' => array( 'wikisource', 'en' ),
-               );
-
-               # Extra interwiki links that can't be in the intermap for some 
reason
-               $extraLinks = array(
-                       array( 'm', $this->urlprotocol . 
'//meta.wikimedia.org/wiki/$1', 1 ),
-                       array( 'meta', $this->urlprotocol . 
'//meta.wikimedia.org/wiki/$1', 1 ),
-                       array( 'sep11', $this->urlprotocol . 
'//sep11.wikipedia.org/wiki/$1', 1 ),
-                       array( 'd', $this->urlprotocol . 
'//www.wikidata.org/wiki/$1', 1 ),
-               );
-
-               # Language aliases, usually configured as redirects to the real 
wiki in apache
-               # Interlanguage links are made directly to the real wiki
-               # Something horrible happens if you forget to list an alias 
here, I can't
-               #   remember what
-               $this->languageAliases = array(
-                       'zh-cn' => 'zh',
-                       'zh-tw' => 'zh',
-                       'dk' => 'da',
-                       'nb' => 'no',
-               );
-
-               # Special case prefix rewrites, for the benefit of Swedish 
which uses s:t
-               # as an abbreviation for saint
-               $this->prefixRewrites = array(
-                       'svwiki' => array( 's' => 'src' ),
-               );
+               $sites = $this->getSites();
+               $extraLinks = $this->getExtraLinks();
 
                # Construct a list of reserved prefixes
                $reserved = array();
                foreach ( $this->langlist as $lang ) {
                        $reserved[$lang] = 1;
                }
-               foreach ( $this->languageAliases as $alias => $lang ) {
+               foreach ( self::$languageAliases as $alias => $lang ) {
                        $reserved[$alias] = 1;
                }
 
@@ -177,7 +230,7 @@
                }
 
                foreach ( $this->dblist as $db ) {
-                       if ( isset( $this->specials[$db] ) && !isset( 
$siteOverrides[$db] ) ) {
+                       if ( isset( $this->specials[$db] ) && !isset( 
self::$siteOverrides[$db] ) ) {
                                # Special wiki
                                # Has interwiki links and interlanguage links 
to wikipedia
 
@@ -194,8 +247,8 @@
                        } else {
                                # Find out which site this DB belongs to
                                $site = false;
-                               if ( isset( $siteOverrides[$db] ) ) {
-                                       list( $site, $lang ) = 
$siteOverrides[$db];
+                               if ( isset( self::$siteOverrides[$db] ) ) {
+                                       list( $site, $lang ) = 
self::$siteOverrides[$db];
                                        $site = $sites[$site];
                                } else {
                                        $matches = array();
@@ -217,9 +270,16 @@
 
                                # Lateral links
                                foreach ( $sites as $targetSite ) {
+                                       $lateralLang = $lang;
+                                       # Check for language overrides
+                                       if ( isset( 
self::$languageOverrides[$site->suffix] ) && 
+                                               isset( 
self::$languageOverrides[$site->suffix][$lang] ) ) {
+                                               $lateralLang = 
self::$languageOverrides[$site->suffix][$lang];
+                                       }
+                                       # Suppress link to self
                                        if ( $targetSite->suffix != 
$site->suffix ) {
                                                $this->makeLink( array( 
'iw_prefix' => $targetSite->lateral,
-                                                       'iw_url' => 
$targetSite->getURL( $lang, $this->urlprotocol ),
+                                                       'iw_url' => 
$targetSite->getURL( $lateralLang, $this->urlprotocol ),
                                                        'iw_local' => 1 ), $db 
);
                                        }
                                }
@@ -261,7 +321,7 @@
                }
 
                # Language aliases
-               foreach ( $this->languageAliases as $alias => $lang ) {
+               foreach ( self::$languageAliases as $alias => $lang ) {
                        $this->makeLink( array( $alias, $site->getURL( $lang, 
$this->urlprotocol ), 1 ), $source );
                }
        }
@@ -271,16 +331,16 @@
         * @param $source
         */
        function makeLink( $entry, $source ) {
-               if ( isset( $this->prefixRewrites[$source] ) && isset( 
$entry[0] ) && isset( $this->prefixRewrites[$source][$entry[0]] ) ) {
-                       $entry[0] = $this->prefixRewrites[$source][$entry[0]];
+               if ( isset( self::$prefixRewrites[$source] ) && isset( 
$entry[0] ) && isset( self::$prefixRewrites[$source][$entry[0]] ) ) {
+                       $entry[0] = self::$prefixRewrites[$source][$entry[0]];
                }
 
                if ( !array_key_exists( "iw_prefix", $entry ) ) {
                        $entry = array( "iw_prefix" => $entry[0], "iw_url" => 
$entry[1], "iw_local" => $entry[2] );
                }
-               if ( array_key_exists( $source, $this->prefixRewrites ) &&
-                               array_key_exists( $entry['iw_prefix'], 
$this->prefixRewrites[$source] ) ) {
-                       $entry['iw_prefix'] = 
$this->prefixRewrites[$source][$entry['iw_prefix']];
+               if ( array_key_exists( $source, self::$prefixRewrites ) &&
+                               array_key_exists( $entry['iw_prefix'], 
self::$prefixRewrites[$source] ) ) {
+                       $entry['iw_prefix'] = 
self::$prefixRewrites[$source][$entry['iw_prefix']];
                }
                if ( !array_key_exists( "iw_local", $entry ) ) {
                        $entry["iw_local"] = null;
diff --git a/rebuildInterwiki.php b/rebuildInterwiki.php
index 5a037f4..bbfaaf3 100644
--- a/rebuildInterwiki.php
+++ b/rebuildInterwiki.php
@@ -63,19 +63,8 @@
        function makeInterwikiSQL( $destDir ) {
                $this->output( "Making new interwiki SQL files in $destDir\n" );
 
-               # Multi-language sites
-               # db suffix => db suffix, iw prefix, hostname
-               $sites = array(
-                       'wiki' => new WMFSite( 'wiki', 'w', 'wikipedia.org' ),
-                       'wiktionary' => new WMFSite( 'wiktionary', 'wikt', 
'wiktionary.org' ),
-                       'wikiquote' => new WMFSite( 'wikiquote', 'q', 
'wikiquote.org' ),
-                       'wikibooks' => new WMFSite( 'wikibooks', 'b', 
'wikibooks.org' ),
-                       'wikinews' => new WMFSite( 'wikinews', 'n', 
'wikinews.org' ),
-                       'wikisource' => new WMFSite( 'wikisource', 's', 
'wikisource.org' ),
-                       'wikimedia' => new WMFSite( 'wikimedia', 'chapter', 
'wikimedia.org' ),
-                       'wikiversity' => new WMFSite( 'wikiversity', 'v', 
'wikiversity.org' ),
-                       'wikivoyage' => new WMFSite( 'wikivoyage', 'voy', 
'wikivoyage.org' ),
-               );
+               $sites = $this->getSites();
+               $extraLinks = $this->getExtraLinks();
 
                # Special-case hostnames
                $this->specials = array(
@@ -88,37 +77,12 @@
                        'specieswiki' => 'species.wikimedia.org',
                );
 
-               # Extra interwiki links that can't be in the intermap for some 
reason
-               $extraLinks = array(
-                       array( 'm', $this->urlprotocol . 
'//meta.wikimedia.org/wiki/$1', 1 ),
-                       array( 'meta', $this->urlprotocol . 
'//meta.wikimedia.org/wiki/$1', 1 ),
-                       array( 'sep11', $this->urlprotocol . 
'//sep11.wikipedia.org/wiki/$1', 1 ),
-                       array( 'd', $this->urlprotocol . 
'//www.wikidata.org/wiki/$1', 1 ),
-               );
-
-               # Language aliases, usually configured as redirects to the real 
wiki in apache
-               # Interlanguage links are made directly to the real wiki
-               # Something horrible happens if you forget to list an alias 
here, I can't
-               #   remember what
-               $this->languageAliases = array(
-                       'zh-cn' => 'zh',
-                       'zh-tw' => 'zh',
-                       'dk' => 'da',
-                       'nb' => 'no',
-               );
-
-               # Special case prefix rewrites, for the benefit of Swedish 
which uses s:t
-               # as an abbreviation for saint
-               $this->prefixRewrites = array(
-                       'svwiki' => array( 's' => 'src' ),
-               );
-
                # Construct a list of reserved prefixes
                $reserved = array();
                foreach ( $this->langlist as $lang ) {
                        $reserved[$lang] = 1;
                }
-               foreach ( $this->languageAliases as $alias => $lang ) {
+               foreach ( self::$languageAliases as $alias => $lang ) {
                        $reserved[$alias] = 1;
                }
 
@@ -227,9 +191,16 @@
 
                                # Lateral links
                                foreach ( $sites as $targetSite ) {
+                                       $lateralLang = $lang;
+                                       # Check for language overrides
+                                       if ( isset( 
self::$languageOverrides[$site->suffix] ) && 
+                                               isset( 
self::$languageOverrides[$site->suffix][$lang] ) ) {
+                                               $lateralLang = 
self::$languageOverrides[$site->suffix][$lang];
+                                       }
                                        # Suppress link to self
                                        if ( $targetSite->suffix != 
$site->suffix ) {
-                                               $sql .= $this->makeLink( array( 
$targetSite->lateral, $targetSite->getURL( $lang, $this->urlprotocol ), 1 ), 
$first, $db );
+                                               $sql .= $this->makeLink( array( 
$targetSite->lateral, $targetSite->getURL( $lateralLang, $this->urlprotocol ), 
1 ), 
+                                                       $first, $db );
                                        }
                                }
 
@@ -269,7 +240,7 @@
                }
 
                # Language aliases
-               foreach ( $this->languageAliases as $alias => $lang ) {
+               foreach ( self::$languageAliases as $alias => $lang ) {
                        $sql .= $this->makeLink( array( $alias, $site->getURL( 
$lang, $this->urlprotocol ), 1 ), $first, $source );
                }
                return $sql;
@@ -285,8 +256,8 @@
         */
        function makeLink( $entry, &$first, $source ) {
 
-               if ( isset( $this->prefixRewrites[$source] ) && 
isset($entry[0]) && isset( $this->prefixRewrites[$source][$entry[0]] ) ) {
-                       $entry[0] = $this->prefixRewrites[$source][$entry[0]];
+               if ( isset( self::$prefixRewrites[$source] ) && 
isset($entry[0]) && isset( self::$prefixRewrites[$source][$entry[0]] ) ) {
+                       $entry[0] = self::$prefixRewrites[$source][$entry[0]];
                }
 
                $sql = "";

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie327c77eaf6f9b65a3bb6b8741f88d60fabfdae6
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikimediaMaintenance
Gerrit-Branch: master
Gerrit-Owner: TTO <[email protected]>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to