Withoutaname has uploaded a new change for review.
https://gerrit.wikimedia.org/r/129934
Change subject: Merge rebuildInterwiki.php into dumpInterwiki.php
......................................................................
Merge rebuildInterwiki.php into dumpInterwiki.php
This change merges rebuildInterwiki.php into dumpInterwiki.php,
both in WikimediaMaintenance. A lot of the code was duplicated,
but it was mostly rebuildInterwiki's SQL file creation function
that was imported. Probably still need to fix any calls from
other files to point to dumpInterwiki.php, and mark deprecated.
Bug: 33839
Change-Id: I10ba3ba1912730cc840a871ddd8212b5b6298a3a
---
M dumpInterwiki.php
1 file changed, 101 insertions(+), 21 deletions(-)
git pull
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikimediaMaintenance
refs/changes/34/129934/1
diff --git a/dumpInterwiki.php b/dumpInterwiki.php
index 83d2e4d..58d79d9 100644
--- a/dumpInterwiki.php
+++ b/dumpInterwiki.php
@@ -46,6 +46,7 @@
$this->addOption( 'langlist', 'File with one language code per
line', false, true );
$this->addOption( 'dblist', 'File with one db per line', false,
true );
$this->addOption( 'specialdbs', "File with one 'special' db per
line", false, true );
+ $this->addOption( 'd', 'Output folder', false, true );
$this->addOption( 'o', 'Cdb output file', false, true );
$this->addOption( 'protocolrelative', 'Output wikimedia
interwiki urls as protocol relative', false, false );
}
@@ -77,11 +78,15 @@
$this->urlprotocol = 'http:';
}
- $this->getRebuildInterwikiDump();
+ $this->getRebuildInterwikiDump( $this->getOption( 'd',
'/a/conf/interwiki/sql' ) );
}
- function getRebuildInterwikiDump() {
+ /**
+ * @param $destDir string
+ */
+ function getRebuildInterwikiDump( $destDir ) {
global $wgContLang;
+ $this->output( "Making new interwiki SQL files in $destDir\n" );
# Multi-language sites
# db suffix => db suffix, iw prefix, hostname
@@ -152,6 +157,7 @@
}
# Global interwiki map
+ $iwArray = array();
foreach ( $lines as $line ) {
if ( preg_match( '/^\|\s*(.*?)\s*\|\|\s*(.*?)\s*$/',
$line, $matches ) ) {
$prefix = $wgContLang->lc( $matches[1] );
@@ -165,7 +171,8 @@
}
if ( empty( $reserved[$prefix] ) ) {
- $imap = array( "iw_prefix" => $prefix,
"iw_url" => $url, "iw_local" => $local );
+ $imap = array( "iw_prefix" => $prefix,
"iw_url" => $url, "iw_local" => $local );
+ $iwArray[$prefix] = array( "iw_prefix"
=> $prefix, "iw_url" => $url, "iw_local" => $local );
$this->makeLink ( $imap, "__global" );
}
}
@@ -180,20 +187,44 @@
}
foreach ( $this->dblist as $db ) {
+ $sql = "-- Generated by dumpInterwiki.php (previously
rebuildInterwiki.php)";
if ( isset( $this->specials[$db] ) && !isset(
$siteOverrides[$db] ) ) {
+ # Merged SQL creation function from
rebuildInterwiki.php
+ $host = $this->specials[$db];
+ $sql .= "\n--$host\n\n";
+ $sql .= "USE $db;\n" .
+ "TRUNCATE TABLE interwiki;\n" .
+ "INSERT IGNORE INTO interwiki
(iw_prefix, iw_url, iw_local) VALUES\n";
+ $first = true;
+
# Special wiki
# Has interwiki links and interlanguage links
to wikipedia
-
$this->makeLink( array( 'iw_prefix' => $db,
'iw_url' => "wiki" ), "__sites" );
+
+ # Intermap links
+ foreach ( $iwArray as $iwEntry ) {
+ $sql .= $this->makeLink( $iwEntry,
$first, $db );
+ }
+
# Links to multilanguage sites
/**
* @var $targetSite WMFSite
*/
foreach ( $sites as $targetSite ) {
- $this->makeLink( array( 'iw_prefix' =>
$targetSite->lateral,
+ $sql .= $this->makeLink( array(
'iw_prefix' => $targetSite->lateral,
'iw_url' =>
$targetSite->getURL( 'en', $this->urlprotocol ),
- 'iw_local' => 1 ), $db );
+ 'iw_local' => 1 ), $first, $db
);
}
+
+ # Interlanguage links to Wikipedia
+ $sql .= $this->makeLanguageLinks(
$sites['wiki'], $first, $db );
+
+ # Extra links
+ foreach ( $extraLinks as $link ) {
+ $sql .= $this->makeLink( $link, $first,
$db );
+ }
+
+ $sql .= ";\n"; # End merge
} else {
# Find out which site this DB belongs to
$site = false;
@@ -218,22 +249,52 @@
continue;
}
- # Lateral links
- foreach ( $sites as $targetSite ) {
- if ( $targetSite->suffix !=
$site->suffix ) {
- $this->makeLink( array(
'iw_prefix' => $targetSite->lateral,
- 'iw_url' =>
$targetSite->getURL( $lang, $this->urlprotocol ),
- 'iw_local' => 1 ), $db
);
+ # Merged SQL creation function from
rebuildInterwiki.php
+ $host = "$lang." . $site->url;
+ $sql .= "\n--$host\n\n";
+ $sql .= "USE $db;\n" .
+ "TRUNCATE TABLE interwiki;\n" .
+ "INSERT IGNORE INTO interwiki
(iw_prefix, iw_url, iw_local) VALUES\n";
+ $first = true;
+
+ # Intermap links
+ foreach ( $iwArray as $iwEntry ) {
+ # Suppress links with the same name as
the site
+ if ( ( $site->suffix == 'wiki' &&
$iwEntry['iw_prefix'] != 'wikipedia' ) ||
+ ( $site->suffix != 'wiki' &&
$site->suffix != $iwEntry['iw_prefix'] ) )
+ {
+ $sql .= $this->makeLink(
$iwEntry, $first, $db );
}
}
- if ( $site->suffix == "wiki" ) {
- $this->makeLink( array( 'iw_prefix' =>
'w',
- 'iw_url' => $this->urlprotocol
. "//en.wikipedia.org/wiki/$1",
- 'iw_local' => 1 ), $db );
+ # Lateral links
+ foreach ( $sites as $targetSite ) {
+ # Suppress link to self
+ if ( $targetSite->suffix !=
$site->suffix ) {
+ $sql .= $this->makeLink( array(
'iw_prefix' => $targetSite->lateral,
+ 'iw_url' =>
$targetSite->getURL( $lang, $this->urlprotocol ),
+ 'iw_local' => 1 ),
$first, $db );
+ }
}
+ # Interlanguage links
+ $sql .= $this->makeLanguageLinks( $site,
$first, $db );
+
+ # w link within Wikipedias
+ # Other sites already have it as a lateral link
+ if ( $site->suffix == "wiki" ) {
+ $sql .= $this->makeLink( array(
'iw_prefix' => 'w',
+ 'iw_url' => $this->urlprotocol
. "//en.wikipedia.org/wiki/$1",
+ 'iw_local' => 1 ), $first, $db
);
+ }
+
+ # Extra links
+ foreach ( $extraLinks as $link ) {
+ $sql .= $this->makeLink( $link,
$first, $db );
+ }
+ $sql .= ";\n";
}
+ file_put_contents( "$destDir/$db.sql", $sql ); # End
merge
}
foreach ( $extraLinks as $link ) {
$this->makeLink( $link, "__global" );
@@ -259,25 +320,33 @@
* Executes part of an INSERT statement, corresponding to all
interlanguage links to a particular site
*
* @param $site WMFSite
+ * @param $first
* @param $source
+ * @return string
*/
- function makeLanguageLinks( &$site, $source ) {
+ function makeLanguageLinks( &$site, &$first, $source ) {
+ $sql = "";
+
# Actual languages with their own databases
foreach ( $this->langlist as $targetLang ) {
- $this->makeLink( array( $targetLang, $site->getURL(
$targetLang, $this->urlprotocol ), 1 ), $source );
+ $sql .= $this->makeLink( array( $targetLang,
$site->getURL( $targetLang, $this->urlprotocol ), 1 ), $first, $source );
}
# Language aliases
foreach ( $this->languageAliases as $alias => $lang ) {
- $this->makeLink( array( $alias, $site->getURL( $lang,
$this->urlprotocol ), 1 ), $source );
+ $sql .= $this->makeLink( array( $alias, $site->getURL(
$lang, $this->urlprotocol ), 1 ), $first, $source );
}
+
+ return $sql;
}
/**
* @param $entry
+ * @param $first
* @param $source
+ * @return string
*/
- function makeLink( $entry, $source ) {
+ 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]];
}
@@ -307,9 +376,20 @@
}
# Add to list of prefixes
$this->prefixLists[$source][$entry['iw_prefix']] = 1;
+
+ # Merged SQL creation function from rebuildInterwiki.php
+ $sql = "";
+ # Add comma
+ if ( $first ) {
+ $first = false;
+ } else {
+ $sql .= ",\n";
+ }
+ $dbr = wfGetDB( DB_SLAVE );
+ $sql .= "(" . $dbr->makeList( $entry ) . ")";
+ return $sql; # End merge
}
}
$maintClass = "DumpInterwiki";
require_once( RUN_MAINTENANCE_IF_MAIN );
-
--
To view, visit https://gerrit.wikimedia.org/r/129934
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I10ba3ba1912730cc840a871ddd8212b5b6298a3a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikimediaMaintenance
Gerrit-Branch: master
Gerrit-Owner: Withoutaname <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits