r80908 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r80907‎ | r80908 | r80909 >
Date:20:13, 24 January 2011
Author:catrope
Status:ok
Tags:
Comment:
1.16wmf4: Committing all the random unversioned scripts I found in the maintenance directory. Ownership and timestamp info below

-rw-rw-r-- 1 tstarling wikidev 2055 2010-04-11 03:04 cleanupMl.php
-rw-rw-r-- 1 jeluf wikidev 5425 2010-04-16 21:20 cleanupTitles64966.php
drwxrwxr-x 3 tstarling wikidev 4096 2011-01-24 19:53 fixCleanupTitles
-rw-rw-r-- 1 tstarling wikidev 75895 2009-09-25 15:02 fixCleanupTitles/reversion-input
-rw-rw-r-- 1 tstarling wikidev 1276 2009-09-25 15:05 fixCleanupTitles/revertCleanupTitles.php
-rw-rw-r-- 1 tstarling wikidev 1774 2009-12-04 03:24 fixJobQueueExplosion.php
-rw-rw-r-- 1 jeluf wikidev 2982 2010-10-19 11:10 jeluf.php
-rw-rw-r-- 1 tstarling wikidev 86 2009-07-23 06:56 listDatabases.php
-rw-rw-r-- 1 jeluf wikidev 9458 2010-05-18 20:28 namespaceDupesWT.php
-rw-rw-r-- 1 tstarling wikidev 276 2009-12-04 00:23 nukeEntries.php
-rw-r--r-- 1 root root 1244 2010-12-26 02:23 purgeStaleMemcachedFlaggedRevs.php
-rw-r--r-- 1 root root 989 2010-12-25 23:25 purgeStaleMemcachedText.php
-rw-rw-r-- 1 jeluf wikidev 8543 2010-04-24 11:39 rL.php
-rw-rw-r-- 1 tstarling wikidev 283 2009-11-18 06:04 socket-test.php
-rw-rw-r-- 1 tstarling wikidev 425 2010-02-18 04:58 storage/analyseStorageStats.pl
-rw-rw-r-- 1 aaron wikidev 1592 2010-05-24 23:10 unsuppressCrossWiki.php
drwxrwxr-x 3 tstarling wikidev 24 2011-01-24 19:53 wmf
-rw-rw-r-- 1 tstarling wikidev 403 2010-03-25 22:34 wmf/checkTranscacheEmpty.php
-rw-rw-r-- 1 tstarling wikidev 2567 2009-10-27 08:48 x-mctest.php
Modified paths:
  • /branches/wmf/1.16wmf4/maintenance/cleanupMl.php (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/cleanupTitles64966.php (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/fixCleanupTitles (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/fixCleanupTitles/reversion-input (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/fixCleanupTitles/revertCleanupTitles.php (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/fixJobQueueExplosion.php (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/jeluf.php (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/listDatabases.php (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/namespaceDupesWT.php (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/nukeEntries.php (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/purgeStaleMemcachedFlaggedRevs.php (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/purgeStaleMemcachedText.php (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/rL.php (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/socket-test.php (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/storage/analyseStorageStats.pl (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/unsuppressCrossWiki.php (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/wmf (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/wmf/checkTranscacheEmpty.php (added) (history)
  • /branches/wmf/1.16wmf4/maintenance/x-mctest.php (added) (history)

Diff [purge]

Index: branches/wmf/1.16wmf4/maintenance/purgeStaleMemcachedFlaggedRevs.php
@@ -0,0 +1,39 @@
 2+<?php
 3+
 4+require_once( dirname( __FILE__ ) . '/commandLine.inc' );
 5+
 6+function purgeStaleMemcachedText() {
 7+ global $wgMemc, $wgDBname;
 8+ $db = wfGetDB( DB_MASTER );
 9+ $maxTextId = $db->selectField( 'text', 'max(old_id)' );
 10+ $latestReplicatedTextId = $db->selectField( array( 'recentchanges', 'revision' ), 'rev_text_id',
 11+ array( 'rev_id = rc_this_oldid', "rc_timestamp < '20101225183000'"), 'purgeStaleMemcachedText',
 12+ array( 'ORDER BY' => 'rc_timestamp DESC' ) );
 13+ $latestReplicatedTextId -= 100; # A bit of paranoia
 14+
 15+ echo "Going to purge text entries from $latestReplicatedTextId to $maxTextId in $wgDBname\n";
 16+
 17+ for ( $i = $latestReplicatedTextId; $i < $maxTextId; $i++ ) {
 18+ $keys = array();
 19+ $keys[] = wfMemcKey( 'flaggedrevs', 'countPending', $i );
 20+ $keys[] = wfMemcKey( 'flaggedrevs', 'includesSynced', $i );
 21+ $keys[] = wfMemcKey( 'flaggedrevs', 'overrideRedirect', $i );
 22+ $keys[] = wfMemcKey( 'unreviewedPages', 'underReview', $i );
 23+
 24+ foreach ( $keys as $key ) {
 25+ while (1) {
 26+ if (! $wgMemc->delete( $key ) ) {
 27+ echo "Memcache delete for $key returned false\n";
 28+ }
 29+ if ( $wgMemc->get( $key ) ) {
 30+ echo "There's still content in $key!\n";
 31+ } else {
 32+ break;
 33+ }
 34+ }
 35+ }
 36+ }
 37+}
 38+
 39+purgeStaleMemcachedText();
 40+
Index: branches/wmf/1.16wmf4/maintenance/storage/analyseStorageStats.pl
@@ -0,0 +1,22 @@
 2+%counts = ();
 3+
 4+while (<>) {
 5+ if ( !/\r/ && /^\w+: (.{30})(.{40})(\d+)/ ) {
 6+ $flags = $1;
 7+ $class = $2;
 8+ $count = $3;
 9+ $flags =~ s/ +$//;
 10+ $class =~ s/ +$//;
 11+
 12+ $combined = "$flags/$class";
 13+ if (!exists($counts{$combined})) {
 14+ $counts{$combined} = 0;
 15+ }
 16+ $counts{$combined} += $count;
 17+ }
 18+}
 19+
 20+@sortedTypes = sort( keys( %counts ) );
 21+foreach my $type (@sortedTypes) {
 22+ printf( "%-11d %s\n", $counts{$type}, $type );
 23+}
Index: branches/wmf/1.16wmf4/maintenance/fixJobQueueExplosion.php
@@ -0,0 +1,68 @@
 2+<?php
 3+
 4+/**
 5+ * Removes htmlCacheUpdate categorylinks jobs caused by the bug fixed in r59718.
 6+ */
 7+
 8+require_once( dirname(__FILE__).'/Maintenance.php' );
 9+
 10+class FixJobQueueExplosion extends Maintenance {
 11+ public function execute() {
 12+ global $IP;
 13+
 14+ $dbw = wfGetDB( DB_MASTER );
 15+ if ( $dbw->tableExists( 'job_explosion_tmp' ) ) {
 16+ echo "Temporary table already exists!\n" .
 17+ "To restart, drop the job table and rename job_explosion_tmp back to job.\n";
 18+ exit( 1 );
 19+ }
 20+ $batchSize = 1000;
 21+
 22+ $jobTable = $dbw->tableName( 'job' );
 23+ $jobTmpTable = $dbw->tableName( 'job_explosion_tmp' );
 24+ $dbw->query( "RENAME TABLE $jobTable TO $jobTmpTable" );
 25+ $dbw->sourceFile( "$IP/maintenance/archives/patch-job.sql" );
 26+
 27+ $start = 0;
 28+ $numBatchesDone = 0;
 29+ $newId = 1;
 30+ while ( true ) {
 31+ $res = $dbw->select( 'job_explosion_tmp', '*',
 32+ array(
 33+ 'job_id > ' . $dbw->addQuotes( $start ),
 34+ "NOT ( job_cmd = 'htmlCacheUpdate' AND " .
 35+ "job_params LIKE '%s:13:\"categorylinks\"%' )"
 36+ ),
 37+ __METHOD__, array( 'LIMIT' => $batchSize ) );
 38+
 39+ if ( !$res->numRows() ) {
 40+ break;
 41+ }
 42+
 43+ $insertBatch = array();
 44+ foreach ( $res as $row ) {
 45+ $start = $row->job_id;
 46+ $insertRow = array();
 47+ foreach ( (array)$row as $name => $value ) {
 48+ $insertRow[$name] = $value;
 49+ }
 50+ unset( $insertRow['job_id'] ); // use autoincrement to avoid key conflicts
 51+ $insertBatch[] = $insertRow;
 52+ }
 53+ $dbw->insert( 'job', $insertBatch, __METHOD__ );
 54+ $numBatchesDone++;
 55+
 56+ wfWaitForSlaves( 2 );
 57+ if ( $numBatchesDone % 1000 == 0 ) {
 58+ echo "$start\n";
 59+ } elseif ( $numBatchesDone % 10 == 0 ) {
 60+ echo "$start\r";
 61+ }
 62+ }
 63+
 64+ #$dbw->query( "DROP TABLE $jobTmpTable" );
 65+ }
 66+}
 67+
 68+$maintClass = 'FixJobQueueExplosion';
 69+require_once( DO_MAINTENANCE );
Index: branches/wmf/1.16wmf4/maintenance/cleanupMl.php
@@ -0,0 +1,90 @@
 2+<?php
 3+
 4+require( dirname( __FILE__ ) .'/commandLine.inc' );
 5+
 6+$file = fopen( $args[0], 'r' );
 7+if ( !$file ) {
 8+ exit( 1 );
 9+}
 10+
 11+$wgUser = User::newFromName( 'Malayalam cleanup script' );
 12+if ( $wgUser->isAnon() ) {
 13+ $wgUser->addToDatabase();
 14+}
 15+
 16+$dbw = wfGetDB( DB_MASTER );
 17+
 18+while ( !feof( $file ) ) {
 19+ $line = fgets( $file );
 20+ if ( $line === false ) {
 21+ echo "Read error\n";
 22+ exit( 1 );
 23+ }
 24+ $line = trim( $line );
 25+ // Remove BOM
 26+ $line = str_replace( "\xef\xbb\xbf", '', $line );
 27+
 28+ if ( $line === '' ) {
 29+ continue;
 30+ }
 31+ if ( !preg_match( '/^\[\[(.*)]]$/', $line, $m ) ) {
 32+ echo "Invalid line: $line\n";
 33+ print bin2hex( $line ) . "\n";
 34+ continue;
 35+ }
 36+ $brokenTitle = Title::newFromText( $m[1] );
 37+ if ( !preg_match( '/^Broken\//', $brokenTitle->getDBkey() ) ) {
 38+ echo "Unbroken title: $line\n";
 39+ continue;
 40+ }
 41+
 42+ $unbrokenTitle = Title::makeTitleSafe(
 43+ $brokenTitle->getNamespace(),
 44+ preg_replace( '/^Broken\//', '', $brokenTitle->getDBkey() ) );
 45+
 46+ # Check that the broken title is a redirect
 47+ $revision = Revision::newFromTitle( $brokenTitle );
 48+ if ( !$revision ) {
 49+ echo "Does not exist: $line\n";
 50+ continue;
 51+ }
 52+ $text = $revision->getText();
 53+ if ( $text === false ) {
 54+ echo "Cannot load text: $line\n";
 55+ continue;
 56+ }
 57+ $redir = Title::newFromRedirect( $text );
 58+ if ( !$redir ) {
 59+ echo "Not a redirect: $line\n";
 60+ continue;
 61+ }
 62+
 63+
 64+ if ( $unbrokenTitle->exists() ) {
 65+ # Exists already, just delete this redirect
 66+ $article = new Article( $brokenTitle );
 67+ $success = $article->doDeleteArticle( 'Redundant redirect' );
 68+ if ( $success ) {
 69+ echo "Deleted: $line\n";
 70+ } else {
 71+ echo "Failed to delete: $line\n";
 72+ }
 73+ } else {
 74+ # Does not exist, move this redirect to the unbroken title
 75+ # Do not leave a redirect behind
 76+ $result = $brokenTitle->moveTo( $unbrokenTitle, /*auth*/ false,
 77+ 'Fixing broken redirect', /*createRedirect*/ false );
 78+ if ( $result === true ) {
 79+ echo "Moved: $line\n";
 80+ } else {
 81+ $error = reset( $result );
 82+ echo "Move error: {$error[0]}: $line\n";
 83+ }
 84+ }
 85+
 86+ $dbw->commit();
 87+ sleep( 1 );
 88+ wfWaitForSlaves( 5 );
 89+}
 90+
 91+
Index: branches/wmf/1.16wmf4/maintenance/jeluf.php
@@ -0,0 +1,103 @@
 2+<?php
 3+/**
 4+ * This script starts pending jobs.
 5+ *
 6+ * Usage:
 7+ * --maxjobs <num> (default 10000)
 8+ * --type <job_cmd>
 9+ *
 10+ * This program is free software; you can redistribute it and/or modify
 11+ * it under the terms of the GNU General Public License as published by
 12+ * the Free Software Foundation; either version 2 of the License, or
 13+ * (at your option) any later version.
 14+ *
 15+ * This program is distributed in the hope that it will be useful,
 16+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 17+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 18+ * GNU General Public License for more details.
 19+ *
 20+ * You should have received a copy of the GNU General Public License along
 21+ * with this program; if not, write to the Free Software Foundation, Inc.,
 22+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 23+ * http://www.gnu.org/copyleft/gpl.html
 24+ *
 25+ * @ingroup Maintenance
 26+ */
 27+
 28+require_once( dirname(__FILE__) . '/Maintenance.php' );
 29+
 30+class RunJobs extends Maintenance {
 31+ public function __construct() {
 32+ parent::__construct();
 33+ $this->mDescription = "Run pending jobs";
 34+ $this->addOption( 'maxjobs', 'Maximum number of jobs to run', false, true );
 35+ $this->addOption( 'type', 'Type of job to run', false, true );
 36+ $this->addOption( 'procs', 'Number of processes to use', false, true );
 37+ }
 38+
 39+ public function memoryLimit() {
 40+ // Don't eat all memory on the machine if we get a bad job.
 41+ return "150M";
 42+ }
 43+
 44+ public function execute() {
 45+ global $wgTitle;
 46+ if ( $this->hasOption( 'procs' ) ) {
 47+ $procs = intval( $this->getOption('procs') );
 48+ if ( $procs < 1 || $procs > 1000 ) {
 49+ $this->error( "Invalid argument to --procs", true );
 50+ }
 51+ $fc = new ForkController( $procs );
 52+ if ( $fc->start( $procs ) != 'child' ) {
 53+ exit( 0 );
 54+ }
 55+ }
 56+ $maxJobs = $this->getOption( 'maxjobs', 10000 );
 57+ $type = $this->getOption( 'type', false );
 58+ $wgTitle = Title::newFromText( 'RunJobs.php' );
 59+ $dbw = wfGetDB( DB_MASTER );
 60+ $n = 0;
 61+ $conds = '';
 62+ if ($type !== false)
 63+ $conds = "job_cmd = " . $dbw->addQuotes($type);
 64+
 65+ while ( $dbw->selectField( 'job', 'job_id', $conds, 'runJobs.php' ) ) {
 66+ $offset=0;
 67+ for (;;) {
 68+ $job = ($type == false) ?
 69+ Job::pop($offset)
 70+ : Job::pop_type($type);
 71+
 72+ if ($job == false)
 73+ break;
 74+
 75+ wfWaitForSlaves( 5 );
 76+ $t = microtime( true );
 77+ $offset=$job->id;
 78+ $status = $job->run();
 79+ $t = microtime( true ) - $t;
 80+ $timeMs = intval( $t * 1000 );
 81+ if ( !$status ) {
 82+ $this->runJobsLog( $job->toString() . " t=$timeMs error={$job->error}" );
 83+ } else {
 84+ $this->runJobsLog( $job->toString() . " t=$timeMs good" );
 85+ }
 86+ if ( $maxJobs && ++$n > $maxJobs ) {
 87+ break 2;
 88+ }
 89+ }
 90+ }
 91+ }
 92+
 93+ /**
 94+ * Log the job message
 95+ * @param $msg String The message to log
 96+ */
 97+ private function runJobsLog( $msg ) {
 98+ $this->output( wfTimestamp( TS_DB ) . " $msg\n" );
 99+ wfDebugLog( 'runJobs', $msg );
 100+ }
 101+}
 102+
 103+$maintClass = "RunJobs";
 104+require_once( DO_MAINTENANCE );
Index: branches/wmf/1.16wmf4/maintenance/socket-test.php
@@ -0,0 +1,10 @@
 2+<?php
 3+
 4+require( dirname( __FILE__ ) . '/commandLine.inc' );
 5+$msg = 'test ' . str_repeat( 'TTTT ', 10000 );
 6+#wfErrorLog( $msg, 'udp://10.0.6.30:8420/test' );
 7+
 8+$sock = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
 9+socket_sendto( $sock, $msg, strlen( $msg ), 0, '10.0.6.30', 8420 );
 10+
 11+
Index: branches/wmf/1.16wmf4/maintenance/nukeEntries.php
@@ -0,0 +1,18 @@
 2+<?php
 3+
 4+include('commandLine.inc');
 5+
 6+$i=1000;
 7+
 8+$start = microtime(true);
 9+wfMsg("pagetitle");
 10+$time = microtime(true) - $start;
 11+print "Init time: $time\n";
 12+
 13+$start=microtime(true);
 14+while ($i--) {
 15+ wfMsg("pagetitle");
 16+}
 17+
 18+$time = microtime(true) - $start;
 19+print "Time: $time\n";
Index: branches/wmf/1.16wmf4/maintenance/fixCleanupTitles/reversion-input
@@ -0,0 +1,558 @@
 2+eswiktionary: renaming 11242 (1,'Wikcionario:Estilo/ábaco-05') to (1,'Broken/Wikcionario\x3aEstilo/\xc3\xa1baco-05')
 3+eswiktionary: renaming 11243 (1,'Wikcionario:Estilo/ábaco-01') to (1,'Broken/Wikcionario\x3aEstilo/\xc3\xa1baco-01')
 4+eswiktionary: renaming 13591 (1,'Apéndice:Estados_de_los_Estados_Unidos_de_América') to (1,'Broken/Ap\xc3\xa9ndice\x3aEstados_de_los_Estados_Unidos_de_Am\xc3\xa9rica')
 5+etwiki: renaming 15381 (1,'Wikipedia:Vikiprojekt_Imetajad') to (1,'Broken/Wikipedia\x3aVikiprojekt_Imetajad')
 6+etwiki: renaming 77035 (1,'Portaal:Teadus') to (1,'Broken/Portaal\x3aTeadus')
 7+etwiki: renaming 94865 (1,'Portaal:Kaunid_kunstid/Sissejuhatus') to (1,'Broken/Portaal\x3aKaunid_kunstid/Sissejuhatus')
 8+etwiki: renaming 95802 (1,'Portaal:Kaunid_kunstid') to (1,'Broken/Portaal\x3aKaunid_kunstid')
 9+etwiki: renaming 95807 (1,'Portaal:Kaunid_kunstid/Valdkonnad') to (1,'Broken/Portaal\x3aKaunid_kunstid/Valdkonnad')
 10+etwiki: renaming 96057 (1,'Portaal:Poliitika') to (1,'Broken/Portaal\x3aPoliitika')
 11+etwiki: renaming 131830 (1,'Portaal:Portaalikasti-jalus') to (1,'Broken/Portaal\x3aPortaalikasti-jalus')
 12+etwiki: renaming 131867 (1,'Portaal:Muusika/Sündinud') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud')
 13+etwiki: renaming 131868 (1,'Portaal:Muusika/Sündinud/18._juuni') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/18\x2e_juuni')
 14+etwiki: renaming 131869 (1,'Portaal:Muusika/Aastad_muusikas') to (1,'Broken/Portaal\x3aMuusika/Aastad_muusikas')
 15+etwiki: renaming 131881 (1,'Portaal:Muusika/Sündinud/juuni_18') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/juuni_18')
 16+etwiki: renaming 132143 (1,'Portaal:Muusika/Sündinud/21._juuni') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/21\x2e_juuni')
 17+etwiki: renaming 132227 (1,'Portaal:Muusika/Sündinud/22._juuni') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/22\x2e_juuni')
 18+etwiki: renaming 132231 (1,'Portaal:Muusika/Sündinud/23._juuni') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/23\x2e_juuni')
 19+etwiki: renaming 132350 (1,'Portaal:Muusika/Sündinud/24._juuni') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/24\x2e_juuni')
 20+etwiki: renaming 132386 (1,'Portaal:Muusika/Sündinud/25._juuni') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/25\x2e_juuni')
 21+etwiki: renaming 132393 (1,'Portaal:Muusika/Sündinud/1._juuli') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/1\x2e_juuli')
 22+etwiki: renaming 132395 (1,'Portaal:Muusika/Sündinud/2._juuli') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/2\x2e_juuli')
 23+etwiki: renaming 132470 (1,'Portaal:Muusika/Sündinud/6._juuli') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/6\x2e_juuli')
 24+etwiki: renaming 132471 (1,'Portaal:Muusika/Sündinud/7._juuli') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/7\x2e_juuli')
 25+etwiki: renaming 132474 (1,'Portaal:Muusika/Sündinud/10._juuli') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/10\x2e_juuli')
 26+etwiki: renaming 133763 (1,'Portaal:Muusika/Sündinud/19._juuli') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/19\x2e_juuli')
 27+etwiki: renaming 133765 (1,'Portaal:Muusika/Sündinud/20._juuli') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/20\x2e_juuli')
 28+etwiki: renaming 133775 (1,'Portaal:Muusika/Sündinud/21._juuli') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/21\x2e_juuli')
 29+etwiki: renaming 133776 (1,'Portaal:Muusika/Sündinud/22._juuli') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/22\x2e_juuli')
 30+etwiki: renaming 133923 (1,'Portaal:Sport/Spordialad') to (1,'Broken/Portaal\x3aSport/Spordialad')
 31+etwiki: renaming 134854 (1,'Portaal:Kunst') to (1,'Broken/Portaal\x3aKunst')
 32+etwiki: renaming 134861 (1,'Portaal:Geograafia') to (1,'Broken/Portaal\x3aGeograafia')
 33+etwiki: renaming 134894 (1,'Portaal:Muusika/Sissejuhatus') to (1,'Broken/Portaal\x3aMuusika/Sissejuhatus')
 34+etwiki: renaming 134988 (1,'Portaal:Matemaatika') to (1,'Broken/Portaal\x3aMatemaatika')
 35+etwiki: renaming 135165 (1,'Portaal:Geograafia/Valitud_artikkel/Soovitus') to (1,'Broken/Portaal\x3aGeograafia/Valitud_artikkel/Soovitus')
 36+etwiki: renaming 135196 (1,'Portaal:Muusika/Sündinud/23._juuli') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/23\x2e_juuli')
 37+etwiki: renaming 135201 (1,'Portaal:Geograafia/Geograafia_loendid') to (1,'Broken/Portaal\x3aGeograafia/Geograafia_loendid')
 38+etwiki: renaming 135223 (1,'Portaal:Arhitektuur/Loendid') to (1,'Broken/Portaal\x3aArhitektuur/Loendid')
 39+etwiki: renaming 135270 (1,'Portaal:Muusika') to (1,'Broken/Portaal\x3aMuusika')
 40+etwiki: renaming 135307 (1,'Portaal:Muusika/Sündinud/24._juuli') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/24\x2e_juuli')
 41+etwiki: renaming 135319 (1,'Portaal:Kunst/valdkonnad') to (1,'Broken/Portaal\x3aKunst/valdkonnad')
 42+etwiki: renaming 135331 (1,'Portaal:Geograafia/Kas_tead') to (1,'Broken/Portaal\x3aGeograafia/Kas_tead')
 43+etwiki: renaming 135388 (1,'Portaal:Meri') to (1,'Broken/Portaal\x3aMeri')
 44+etwiki: renaming 135411 (1,'Portaal:Arhitektuur/Pilt') to (1,'Broken/Portaal\x3aArhitektuur/Pilt')
 45+etwiki: renaming 135447 (1,'Portaal:Kirjandus') to (1,'Broken/Portaal\x3aKirjandus')
 46+etwiki: renaming 135448 (1,'Portaal:Ajalugu') to (1,'Broken/Portaal\x3aAjalugu')
 47+etwiki: renaming 135895 (1,'Portaal:Kirjandus/Tegelased') to (1,'Broken/Portaal\x3aKirjandus/Tegelased')
 48+etwiki: renaming 136409 (1,'Portaal:Muusika/Soovitud_artiklid') to (1,'Broken/Portaal\x3aMuusika/Soovitud_artiklid')
 49+etwiki: renaming 136535 (1,'Portaal:Bioloogia') to (1,'Broken/Portaal\x3aBioloogia')
 50+etwiki: renaming 136577 (1,'Portaal:Bioloogia/Valitud_pilt') to (1,'Broken/Portaal\x3aBioloogia/Valitud_pilt')
 51+etwiki: renaming 136580 (1,'Portaal:Biograafiad/Valitud_portree') to (1,'Broken/Portaal\x3aBiograafiad/Valitud_portree')
 52+etwiki: renaming 136674 (1,'Portaal:Õigusteadus/Vanglad') to (1,'Broken/Portaal\x3a\xc3\x95igusteadus/Vanglad')
 53+etwiki: renaming 136681 (1,'Portaal:Biograafiad') to (1,'Broken/Portaal\x3aBiograafiad')
 54+etwiki: renaming 136744 (1,'Portaal:Õigusteadus/Kas_teadsid,_et...') to (1,'Broken/Portaal\x3a\xc3\x95igusteadus/Kas_teadsid\x2c_et\x2e\x2e\x2e')
 55+etwiki: renaming 136935 (1,'Portaal:Keel') to (1,'Broken/Portaal\x3aKeel')
 56+etwiki: renaming 137014 (1,'Portaal:Sport') to (1,'Broken/Portaal\x3aSport')
 57+etwiki: renaming 137017 (1,'Portaal:Loodusteadused/Sissejuhatus') to (1,'Broken/Portaal\x3aLoodusteadused/Sissejuhatus')
 58+etwiki: renaming 137120 (1,'Portaal:Psühholoogia/Kategooriad') to (1,'Broken/Portaal\x3aPs\xc3\xbchholoogia/Kategooriad')
 59+etwiki: renaming 137166 (1,'Portaal:Psühholoogia') to (1,'Broken/Portaal\x3aPs\xc3\xbchholoogia')
 60+etwiki: renaming 137193 (1,'Portaal:Biograafiad/Sündinud_täna/9._august') to (1,'Broken/Portaal\x3aBiograafiad/S\xc3\xbcndinud_t\xc3\xa4na/9\x2e_august')
 61+etwiki: renaming 137300 (1,'Portaal:Eesti') to (1,'Broken/Portaal\x3aEesti')
 62+etwiki: renaming 137319 (1,'Portaal:Biograafiad/Selected_anniversaries/9._august') to (1,'Broken/Portaal\x3aBiograafiad/Selected_anniversaries/9\x2e_august')
 63+etwiki: renaming 137350 (1,'Portaal:Sport/Päev_spordiajaloos/10._august') to (1,'Broken/Portaal\x3aSport/P\xc3\xa4ev_spordiajaloos/10\x2e_august')
 64+etwiki: renaming 137462 (1,'Portaal:Filosoofia') to (1,'Broken/Portaal\x3aFilosoofia')
 65+etwiki: renaming 137466 (1,'Portaal:Filosoofia/Valitud_elulugu') to (1,'Broken/Portaal\x3aFilosoofia/Valitud_elulugu')
 66+etwiki: renaming 137467 (1,'Portaal:Religioon') to (1,'Broken/Portaal\x3aReligioon')
 67+etwiki: renaming 137668 (1,'Portaal:Religioon/Usutegelased') to (1,'Broken/Portaal\x3aReligioon/Usutegelased')
 68+etwiki: renaming 137682 (1,'Portaal:Psühholoogia/Valitud_pilt') to (1,'Broken/Portaal\x3aPs\xc3\xbchholoogia/Valitud_pilt')
 69+etwiki: renaming 137692 (1,'Portaal:Tehnika') to (1,'Broken/Portaal\x3aTehnika')
 70+etwiki: renaming 137816 (1,'Portaal:Sotsiaalteadused/Valitud_pilt') to (1,'Broken/Portaal\x3aSotsiaalteadused/Valitud_pilt')
 71+etwiki: renaming 137994 (1,'Portaal:Biograafiad/Sündinud_täna/18._august') to (1,'Broken/Portaal\x3aBiograafiad/S\xc3\xbcndinud_t\xc3\xa4na/18\x2e_august')
 72+etwiki: renaming 138137 (1,'Portaal:Füüsika') to (1,'Broken/Portaal\x3aF\xc3\xbc\xc3\xbcsika')
 73+etwiki: renaming 138149 (1,'Portaal:Bioloogia/Kas_tead') to (1,'Broken/Portaal\x3aBioloogia/Kas_tead')
 74+etwiki: renaming 138413 (1,'Portaal:Box-header') to (1,'Broken/Portaal\x3aBox-header')
 75+etwiki: renaming 138556 (1,'Portaal:Geograafia/Valitud_pilt') to (1,'Broken/Portaal\x3aGeograafia/Valitud_pilt')
 76+etwiki: renaming 138572 (1,'Portaal:Poliitika/portaalikasti-päis') to (1,'Broken/Portaal\x3aPoliitika/portaalikasti-p\xc3\xa4is')
 77+etwiki: renaming 140145 (1,'Portaal:Astronoomia/Mida_teha') to (1,'Broken/Portaal\x3aAstronoomia/Mida_teha')
 78+etwiki: renaming 140177 (1,'Portaal:Ühiskond') to (1,'Broken/Portaal\x3a\xc3\x9chiskond')
 79+etwiki: renaming 140179 (1,'Portaal:Sotsiaalteadused') to (1,'Broken/Portaal\x3aSotsiaalteadused')
 80+etwiki: renaming 140403 (1,'Portaal:Majandus') to (1,'Broken/Portaal\x3aMajandus')
 81+etwiki: renaming 140506 (1,'Portaal:Majandus/Mida_teha') to (1,'Broken/Portaal\x3aMajandus/Mida_teha')
 82+etwiki: renaming 141301 (1,'Portaal:Loodusteadused') to (1,'Broken/Portaal\x3aLoodusteadused')
 83+etwiki: renaming 141342 (1,'Portaal:Loodusteadused/Valitud_pilt') to (1,'Broken/Portaal\x3aLoodusteadused/Valitud_pilt')
 84+etwiki: renaming 141416 (1,'Portaal:Loodusteadused/Teemad') to (1,'Broken/Portaal\x3aLoodusteadused/Teemad')
 85+etwiki: renaming 141557 (1,'Portaal:Biograafiad/Sündinud_täna/14._august') to (1,'Broken/Portaal\x3aBiograafiad/S\xc3\xbcndinud_t\xc3\xa4na/14\x2e_august')
 86+etwiki: renaming 142563 (1,'Portaal:Ajalugu/Päev_ajaloos/19._september') to (1,'Broken/Portaal\x3aAjalugu/P\xc3\xa4ev_ajaloos/19\x2e_september')
 87+etwiki: renaming 142651 (1,'Portaal:Eesti_ajalugu') to (1,'Broken/Portaal\x3aEesti_ajalugu')
 88+etwiki: renaming 143312 (1,'Portaal:Filosoofia/Filosoofid') to (1,'Broken/Portaal\x3aFilosoofia/Filosoofid')
 89+etwiki: renaming 144182 (1,'Portaal:Muinas-Eesti') to (1,'Broken/Portaal\x3aMuinas-Eesti')
 90+etwiki: renaming 144383 (1,'Portaal:Tehnika/Valitud_artikkel') to (1,'Broken/Portaal\x3aTehnika/Valitud_artikkel')
 91+etwiki: renaming 144387 (1,'Portaal:Psühholoogia/Valitud_pildid') to (1,'Broken/Portaal\x3aPs\xc3\xbchholoogia/Valitud_pildid')
 92+etwiki: renaming 144416 (1,'Portaal:Bioloogia/Valitud_artikkel/Soovitus') to (1,'Broken/Portaal\x3aBioloogia/Valitud_artikkel/Soovitus')
 93+etwiki: renaming 144448 (1,'Portaal:Majandus/Teadlased/oktoober_2008') to (1,'Broken/Portaal\x3aMajandus/Teadlased/oktoober_2008')
 94+etwiki: renaming 145547 (1,'Portaal:Muusika/Sündinud/Oktoober') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/Oktoober')
 95+etwiki: renaming 149431 (1,'Portaal:Muusika/Sündinud/7._november') to (1,'Broken/Portaal\x3aMuusika/S\xc3\xbcndinud/7\x2e_november')
 96+etwiki: renaming 155409 (1,'Portaal:Täppisteadused') to (1,'Broken/Portaal\x3aT\xc3\xa4ppisteadused')
 97+etwiki: renaming 155488 (1,'Portaal:Maateadus/Valitud_artikkel') to (1,'Broken/Portaal\x3aMaateadus/Valitud_artikkel')
 98+etwiki: renaming 155497 (1,'Portaal:Maateadus/Valitud_pilt') to (1,'Broken/Portaal\x3aMaateadus/Valitud_pilt')
 99+etwiki: renaming 155498 (1,'Portaal:Maateadus/Sissejuhatus') to (1,'Broken/Portaal\x3aMaateadus/Sissejuhatus')
 100+etwiki: renaming 155638 (1,'Portaal:Toit') to (1,'Broken/Portaal\x3aToit')
 101+etwiki: renaming 155639 (1,'Portaal:Toit/Sissejuhatus') to (1,'Broken/Portaal\x3aToit/Sissejuhatus')
 102+etwiki: renaming 155890 (1,'Portaal:Toit/Pilt') to (1,'Broken/Portaal\x3aToit/Pilt')
 103+etwiki: renaming 155946 (1,'Portaal:Majandus/Valitud_artikkel/jaanuar_2009') to (1,'Broken/Portaal\x3aMajandus/Valitud_artikkel/jaanuar_2009')
 104+etwiki: renaming 155953 (1,'Portaal:Maateadus/Valitud_artikkel/Soovitus') to (1,'Broken/Portaal\x3aMaateadus/Valitud_artikkel/Soovitus')
 105+etwiki: renaming 156023 (1,'Portaal:Maateadus/Valitud_pilt/Soovitus') to (1,'Broken/Portaal\x3aMaateadus/Valitud_pilt/Soovitus')
 106+etwiki: renaming 166356 (1,'Portaal:Norra') to (1,'Broken/Portaal\x3aNorra')
 107+etwiki: renaming 166389 (1,'Portaal:Geograafia/Geograafia_alamportaalid') to (1,'Broken/Portaal\x3aGeograafia/Geograafia_alamportaalid')
 108+etwiki: renaming 166426 (1,'Portaal:Norra/Norra_muusika') to (1,'Broken/Portaal\x3aNorra/Norra_muusika')
 109+etwiki: renaming 170281 (1,'Portaal:Eesti/Puuduvad') to (1,'Broken/Portaal\x3aEesti/Puuduvad')
 110+etwiki: renaming 170893 (1,'Portaal:Norra/Norra_geograafia') to (1,'Broken/Portaal\x3aNorra/Norra_geograafia')
 111+etwiktionary: renaming 1413 (1,'Wiktionary:Prantsuse_ebareeglipärased_verbid') to (1,'Broken/Wiktionary\x3aPrantsuse_ebareeglip\xc3\xa4rased_verbid')
 112+etwiktionary: renaming 1722 (1,'Vikisõnaraamat:Liivakast') to (1,'Broken/Vikis\xc3\xb5naraamat\x3aLiivakast')
 113+euwiki: renaming 40208 (1,'Atari:Euskal_Wikiatlasa') to (1,'Broken/Atari\x3aEuskal_Wikiatlasa')
 114+euwiki: renaming 40211 (1,'Atari:Euskal_Wikiatlasa/Hilabeteko_artikulua') to (1,'Broken/Atari\x3aEuskal_Wikiatlasa/Hilabeteko_artikulua')
 115+euwiki: renaming 58469 (1,'Atari:Euskal_Wikiatlasa/Asteko_argazkia') to (1,'Broken/Atari\x3aEuskal_Wikiatlasa/Asteko_argazkia')
 116+fawiki: renaming 23707 (1,'ویکی‌پدیا:گودال_ماسه‌بازی') to (1,'Broken/\xd9\x88\xdb\x8c\xda\xa9\xdb\x8c\xe2\x80\x8c\xd9\xbe\xd8\xaf\xdb\x8c\xd8\xa7\x3a\xda\xaf\xd9\x88\xd8\xaf\xd8\xa7\xd9\x84_\xd9\x85\xd8\xa7\xd8\xb3\xd9\x87\xe2\x80\x8c\xd8\xa8\xd8\xa7\xd8\xb2\xdb\x8c')
 117+fawiktionary: renaming 18648 (1,'پیوست:اقسام_کلام') to (1,'Broken/\xd9\xbe\xdb\x8c\xd9\x88\xd8\xb3\xd8\xaa\x3a\xd8\xa7\xd9\x82\xd8\xb3\xd8\xa7\xd9\x85_\xda\xa9\xd9\x84\xd8\xa7\xd9\x85')
 118+fawiktionary: renaming 18664 (1,'پیوست:گونه‌های_واژگان') to (1,'Broken/\xd9\xbe\xdb\x8c\xd9\x88\xd8\xb3\xd8\xaa\x3a\xda\xaf\xd9\x88\xd9\x86\xd9\x87\xe2\x80\x8c\xd9\x87\xd8\xa7\xdb\x8c_\xd9\x88\xd8\xa7\xda\x98\xda\xaf\xd8\xa7\xd9\x86')
 119+fawiktionary: renaming 18914 (1,'پیوست:فهرست_بسامدی_شاهنامهٔ_فردوسی') to (1,'Broken/\xd9\xbe\xdb\x8c\xd9\x88\xd8\xb3\xd8\xaa\x3a\xd9\x81\xd9\x87\xd8\xb1\xd8\xb3\xd8\xaa_\xd8\xa8\xd8\xb3\xd8\xa7\xd9\x85\xd8\xaf\xdb\x8c_\xd8\xb4\xd8\xa7\xd9\x87\xd9\x86\xd8\xa7\xd9\x85\xd9\x87\xd9\x94_\xd9\x81\xd8\xb1\xd8\xaf\xd9\x88\xd8\xb3\xdb\x8c')
 120+fiwiktionary: renaming 5953 (1,'Liite:Suomen_kielen_kielioppi') to (1,'Broken/Liite\x3aSuomen_kielen_kielioppi')
 121+fiwiktionary: renaming 9433 (1,'Liite:Espanjan_kielen_epäsäännölliset_verbit') to (1,'Broken/Liite\x3aEspanjan_kielen_ep\xc3\xa4s\xc3\xa4\xc3\xa4nn\xc3\xb6lliset_verbit')
 122+fiwiktionary: renaming 9843 (1,'Liite:Kirjaimet_ja_merkit_koodeilla') to (1,'Broken/Liite\x3aKirjaimet_ja_merkit_koodeilla')
 123+fiwiktionary: renaming 30886 (1,'liite:Vuonna_miekka_ja_kirves') to (1,'Broken/liite\x3aVuonna_miekka_ja_kirves')
 124+fiwiktionary: renaming 40735 (1,'liite:Kyōiku_kanji') to (1,'Broken/liite\x3aKy\xc5\x8diku_kanji')
 125+fiwiktionary: renaming 40880 (1,'Liite:Armeijaslangi') to (1,'Broken/Liite\x3aArmeijaslangi')
 126+fiwiktionary: renaming 44079 (1,'Liite:Latinan_deklinaatiot') to (1,'Broken/Liite\x3aLatinan_deklinaatiot')
 127+fiwiktionary: renaming 49618 (1,'Liite:Elektroniikkaslangi') to (1,'Broken/Liite\x3aElektroniikkaslangi')
 128+fiwiktionary: renaming 53925 (1,'liite:Espanjan_kielen_paikannimiadjektiivit') to (1,'Broken/liite\x3aEspanjan_kielen_paikannimiadjektiivit')
 129+fiwiktionary: renaming 53944 (1,'liite:Kielten_nimiä_espanjaksi') to (1,'Broken/liite\x3aKielten_nimi\xc3\xa4_espanjaksi')
 130+fiwiktionary: renaming 57292 (1,'Liite:Terveydenhuollon_sanasto') to (1,'Broken/Liite\x3aTerveydenhuollon_sanasto')
 131+fiwiktionary: renaming 59681 (1,'Liite:Suomen_kielen_ääntäminen') to (1,'Broken/Liite\x3aSuomen_kielen_\xc3\xa4\xc3\xa4nt\xc3\xa4minen')
 132+fiwiktionary: renaming 102198 (1,'Liite:Suomen_kielen_L-kirjaimeen_päättyvät_sanat') to (1,'Broken/Liite\x3aSuomen_kielen_L-kirjaimeen_p\xc3\xa4\xc3\xa4ttyv\xc3\xa4t_sanat')
 133+fiwiktionary: renaming 108771 (1,'liite:Luvut') to (1,'Broken/liite\x3aLuvut')
 134+frwiki: renaming 203680 (1,'Utilisateur:Yug/Modèle:Période_histoire') to (1,'Broken/Utilisateur\x3aYug/Mod\xc3\xa8le\x3aP\xc3\xa9riode_histoire')
 135+frwiki: renaming 384789 (1,'Modèle:Encyclopédie/Archive_2006-02-07') to (1,'Broken/Mod\xc3\xa8le\x3aEncyclop\xc3\xa9die/Archive_2006-02-07')
 136+frwiki: renaming 398085 (1,'WP:Oc') to (1,'Broken/WP\x3aOc')
 137+frwiki: renaming 398087 (1,'WP:LBc') to (1,'Broken/WP\x3aLBc')
 138+frwiki: renaming 693282 (1,'Utilisateur:Crocy/Méthode') to (1,'Broken/Utilisateur\x3aCrocy/M\xc3\xa9thode')
 139+frwiki: renaming 1002939 (1,'WP:HMA') to (1,'Broken/WP\x3aHMA')
 140+frwiki: renaming 1035901 (1,'Utilisateur:BenP/Ebauche') to (1,'Broken/Utilisateur\x3aBenP/Ebauche')
 141+frwiki: renaming 1323147 (1,'Modèle:À_illustrer/Documentation') to (1,'Broken/Mod\xc3\xa8le\x3a\xc3\x80_illustrer/Documentation')
 142+frwiki: renaming 1542478 (1,'WP:VV') to (1,'Broken/WP\x3aVV')
 143+frwiki: renaming 2685477 (1,'WP:AG/IA') to (1,'Broken/WP\x3aAG/IA')
 144+frwiki: renaming 3215877 (1,'Portail:Syndicalisme/Articles_demandés') to (1,'Broken/Portail\x3aSyndicalisme/Articles_demand\xc3\xa9s')
 145+frwikibooks: renaming 27757 (1,'Transwiki:Résolution_d'un_sudoku') to (1,'Broken/Transwiki\x3aR\xc3\xa9solution_d\x27un_sudoku')
 146+frwikisource: renaming 7198 (1,'Auteur:Charles_Baudelaire') to (1,'Broken/Auteur\x3aCharles_Baudelaire')
 147+frwikisource: renaming 7275 (1,'Auteur:Hans_Christian_Andersen') to (1,'Broken/Auteur\x3aHans_Christian_Andersen')
 148+frwikisource: renaming 84360 (1,'Auteur:Arthur_Rimbaud') to (1,'Broken/Auteur\x3aArthur_Rimbaud')
 149+frwiktionary: renaming 232878 (1,'Annexe:Unités_de_mesure_en_français') to (1,'Broken/Annexe\x3aUnit\xc3\xa9s_de_mesure_en_fran\xc3\xa7ais')
 150+frwiktionary: renaming 232880 (1,'Annexe:Émoticône') to (1,'Broken/Annexe\x3a\xc3\x89motic\xc3\xb4ne')
 151+frwiktionary: renaming 232883 (1,'Portail:Philosophie') to (1,'Broken/Portail\x3aPhilosophie')
 152+frwiktionary: renaming 232884 (1,'Portail:Poésie') to (1,'Broken/Portail\x3aPo\xc3\xa9sie')
 153+furwiki: renaming 88 (1,'Vichipedie:Liste_dai_articui_che_dutis_lis_vichipedîs_a_varessin_di_vê') to (1,'Broken/Vichipedie\x3aListe_dai_articui_che_dutis_lis_vichiped\xc3\xaes_a_varessin_di_v\xc3\xaa')
 154+glkwiki: renaming 2135 (1,'کاربر:سمیعی') to (1,'Broken/\xda\xa9\xd8\xa7\xd8\xb1\xd8\xa8\xd8\xb1\x3a\xd8\xb3\xd9\x85\xdb\x8c\xd8\xb9\xdb\x8c')
 155+glwiki: renaming 37890 (1,'Axuda:FAQ_Colexios') to (1,'Broken/Axuda\x3aFAQ_Colexios')
 156+glwiki: renaming 61938 (1,'Portal:Euskal_Herria') to (1,'Broken/Portal\x3aEuskal_Herria')
 157+hewiki: renaming 509021 (1,'ויקיפדיה:אמינות/הצעת_הוספה_למומלצים') to (1,'Broken/id:509021')
 158+hewiki: renaming 509102 (1,'ויקיפדיה:אמינות') to (1,'Broken/\xd7\x95\xd7\x99\xd7\xa7\xd7\x99\xd7\xa4\xd7\x93\xd7\x99\xd7\x94\x3a\xd7\x90\xd7\x9e\xd7\x99\xd7\xa0\xd7\x95\xd7\xaa')
 159+hewikisource: renaming 1348 (1,'ויקיטקסט:טקסטים_יהודיים_ברשת') to (1,'Broken/\xd7\x95\xd7\x99\xd7\xa7\xd7\x99\xd7\x98\xd7\xa7\xd7\xa1\xd7\x98\x3a\xd7\x98\xd7\xa7\xd7\xa1\xd7\x98\xd7\x99\xd7\x9d_\xd7\x99\xd7\x94\xd7\x95\xd7\x93\xd7\x99\xd7\x99\xd7\x9d_\xd7\x91\xd7\xa8\xd7\xa9\xd7\xaa')
 160+hiwiki: renaming 146 (1,'सदस्य_:Yann') to (1,'Broken/\xe0\xa4\xb8\xe0\xa4\xa6\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xaf_\x3aYann')
 161+hiwiki: renaming 3274 (1,'Wikipedia:Setting_up_your_browser_for_Indic_scripts') to (1,'Broken/Wikipedia\x3aSetting_up_your_browser_for_Indic_scripts')
 162+huwikisource: renaming 4022 (1,'Szerző:Ady_Endre') to (1,'Broken/Szerz\xc5\x91\x3aAdy_Endre')
 163+huwikisource: renaming 4023 (1,'Szerző:Juhász_Gyula') to (1,'Broken/Szerz\xc5\x91\x3aJuh\xc3\xa1sz_Gyula')
 164+huwikisource: renaming 4024 (1,'Szerző:Mircea_Eliade') to (1,'Broken/Szerz\xc5\x91\x3aMircea_Eliade')
 165+huwikisource: renaming 4025 (1,'Szerző:Tóth_Árpád') to (1,'Broken/Szerz\xc5\x91\x3aT\xc3\xb3th_\xc3\x81rp\xc3\xa1d')
 166+huwikisource: renaming 4026 (1,'Szerző:René_Guénon') to (1,'Broken/Szerz\xc5\x91\x3aRen\xc3\xa9_Gu\xc3\xa9non')
 167+huwikisource: renaming 4027 (1,'Szerző:Végvári_József') to (1,'Broken/Szerz\xc5\x91\x3aV\xc3\xa9gv\xc3\xa1ri_J\xc3\xb3zsef')
 168+huwikisource: renaming 4028 (1,'Szerző:Dsida_Jenő') to (1,'Broken/Szerz\xc5\x91\x3aDsida_Jen\xc5\x91')
 169+huwikisource: renaming 4029 (1,'Szerző:József_Attila') to (1,'Broken/Szerz\xc5\x91\x3aJ\xc3\xb3zsef_Attila')
 170+huwikisource: renaming 4030 (1,'Szerző:James_Fenimore_Cooper') to (1,'Broken/Szerz\xc5\x91\x3aJames_Fenimore_Cooper')
 171+huwikisource: renaming 4031 (1,'Szerző:Tamkó_Sirató_Károly') to (1,'Broken/Szerz\xc5\x91\x3aTamk\xc3\xb3_Sirat\xc3\xb3_K\xc3\xa1roly')
 172+iowiki: renaming 4046 (1,'Wikipedio:Wikipediisti') to (1,'Broken/Wikipedio\x3aWikipediisti')
 173+iowiki: renaming 21312 (1,'Wikipedio:Komuneso-portalo') to (1,'Broken/Wikipedio\x3aKomuneso-portalo')
 174+itwiki: renaming 1763426 (1,'Discussione:Storia_della_letteratura_italiana/Storia_della_letteratura_italiana:_dalle_Origini_al_Quattrocento') to (1,'Broken/Discussione\x3aStoria_della_letteratura_italiana/Storia_della_letteratura_italiana\x3a_dalle_Origini_al_Quattrocento')
 175+jawiki: renaming 101278 (1,'Meta:ウィキメディアニュース') to (1,'Broken/Meta\x3a\xe3\x82\xa6\xe3\x82\xa3\xe3\x82\xad\xe3\x83\xa1\xe3\x83\x87\xe3\x82\xa3\xe3\x82\xa2\xe3\x83\x8b\xe3\x83\xa5\xe3\x83\xbc\xe3\x82\xb9')
 176+jawikibooks: renaming 3263 (1,'Transwiki:ラテン語の文法') to (1,'Broken/Transwiki\x3a\xe3\x83\xa9\xe3\x83\x86\xe3\x83\xb3\xe8\xaa\x9e\xe3\x81\xae\xe6\x96\x87\xe6\xb3\x95')
 177+jawikibooks: renaming 3265 (1,'Transwiki:ラテン語の文法2') to (1,'Broken/Transwiki\x3a\xe3\x83\xa9\xe3\x83\x86\xe3\x83\xb3\xe8\xaa\x9e\xe3\x81\xae\xe6\x96\x87\xe6\xb3\x952')
 178+jawikibooks: renaming 3830 (1,'Transwiki:ドイツ語の表現集') to (1,'Broken/Transwiki\x3a\xe3\x83\x89\xe3\x82\xa4\xe3\x83\x84\xe8\xaa\x9e\xe3\x81\xae\xe8\xa1\xa8\xe7\x8f\xbe\xe9\x9b\x86')
 179+jawikibooks: renaming 4207 (1,'Transwiki:フランス語の表現集') to (1,'Broken/Transwiki\x3a\xe3\x83\x95\xe3\x83\xa9\xe3\x83\xb3\xe3\x82\xb9\xe8\xaa\x9e\xe3\x81\xae\xe8\xa1\xa8\xe7\x8f\xbe\xe9\x9b\x86')
 180+jawikibooks: renaming 5264 (1,'Wikiversity:メインページ') to (1,'Broken/Wikiversity\x3a\xe3\x83\xa1\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x9a\xe3\x83\xbc\xe3\x82\xb8')
 181+klwiki: renaming 3088 (0,'Ikiuutit:Ilitsersuutit') to (0,'Broken/Ilitsersuutit')
 182+klwiki: renaming 3089 (1,'Ikiuutit:Ilitsersuutit') to (1,'Broken/Ikiuutit\x3aIlitsersuutit')
 183+klwiki: renaming 3135 (0,'Ikiuutit:Ikiuutit') to (0,'Broken/Ikiuutit')
 184+klwiki: renaming 3136 (1,'Ikiuutit:Ikiuutit') to (1,'Broken/Ikiuutit\x3aIkiuutit')
 185+klwiki: renaming 3137 (0,'Ikiuutit:Aallartigit') to (0,'Broken/Aallartigit')
 186+klwiki: renaming 3138 (0,'Ikiuutit:Kukkusuulaartarnerit') to (0,'Broken/Kukkusuulaartarnerit')
 187+klwiki: renaming 3139 (0,'Ikiuutit:Aaqqissuussineq') to (0,'Broken/Aaqqissuussineq')
 188+klwiki: renaming 3140 (0,'Ikiuutit:Nuutsisarneq') to (0,'Broken/Nuutsisarneq')
 189+klwiki: renaming 3141 (0,'Ikiuutit:Assit') to (0,'Broken/Assit')
 190+kmwiki: renaming 1797 (0,'​ប្រទេស​កម្ពុជា') to (0,'Broken/ប្រទេស_កម្ពុជា')
 191+kmwiki: renaming 2275 (0,'ខេត្ត​កណ្តាល') to (0,'Broken/ខេត្ត_កណ្តាល')
 192+kmwiki: renaming 2510 (0,'ប្រាសាទព្រះវិហារ​') to (0,'Broken/ប្រាសាទព្រះវិហារ')
 193+kmwiki: renaming 2785 (0,'ខេត្ត​រតនគិរី') to (0,'Broken/ខេត្ត_រតនគិរី')
 194+kmwiki: renaming 2787 (0,'ខេត្ត​កំពង់ចាម') to (0,'Broken/ខេត្ត_កំពង់ចាម')
 195+kmwiki: renaming 2788 (0,'ខេត្ត​ក្រចេះ') to (0,'Broken/ខេត្ត_ក្រចេះ')
 196+kmwiki: renaming 2939 (0,'ស្រុក​សង្កែ') to (0,'Broken/ស្រុក_សង្កែ')
 197+kmwiki: renaming 3142 (0,'ប្រាសាទ​_ព្រះវិហារ') to (0,'Broken/ប្រាសាទ_ព្រះវិហារ')
 198+kmwiki: renaming 3171 (0,'ប្រាសាទ​អង្គរវត្ត') to (0,'Broken/ប្រាសាទ_អង្គរវត្ត')
 199+kmwiki: renaming 3296 (0,'បុណ្យ​តារា') to (0,'Broken/បុណ្យ_តារា')
 200+kmwiki: renaming 3378 (0,'សហភាព​សូវៀត') to (0,'Broken/សហភាព_សូវៀត')
 201+kmwiki: renaming 3484 (0,'សុខភាព​') to (0,'Broken/សុខភាព')
 202+kmwiki: renaming 3664 (1,'វិគីភីឌា:ទំព័រហាត់') to (1,'Broken/\xe1\x9e\x9c\xe1\x9e\xb7\xe1\x9e\x82\xe1\x9e\xb8\xe1\x9e\x97\xe1\x9e\xb8\xe1\x9e\x8c\xe1\x9e\xb6\x3a\xe1\x9e\x91\xe1\x9f\x86\xe1\x9e\x96\xe1\x9f\x90\xe1\x9e\x9a\xe1\x9e\xa0\xe1\x9e\xb6\xe1\x9e\x8f\xe1\x9f\x8b')
 203+kmwiki: renaming 3966 (1,'វិគីភីឌា:សុំជាអ្នកអភិបាល') to (1,'Broken/id:3966')
 204+kmwiki: renaming 4134 (0,'សហរដ្ឋ​អាមេរិក​') to (0,'Broken/សហរដ្ឋ_អាមេរិក')
 205+kmwiki: renaming 4229 (0,'​ក្រុង​ភ្នំពេញ') to (0,'Broken/ក្រុង_ភ្នំពេញ')
 206+kmwiki: renaming 4234 (0,'កម្ពុជា​') to (0,'Broken/កម្ពុជា')
 207+kmwiki: renaming 4272 (0,'ប្រទេស​កម្ពុជា') to (0,'Broken/id:4272')
 208+kmwiki: renaming 4314 (0,'ខេត្ត​ពោធិ៍សាត់') to (0,'Broken/ខេត្ត_ពោធិ៍សាត់')
 209+kmwiki: renaming 4483 (0,'ប្រាសាទ​បាយ័ន') to (0,'Broken/ប្រាសាទ_បាយ័ន')
 210+kmwiki: renaming 4548 (0,'ខេត្ត​សៀមរាប') to (0,'Broken/ខេត្ត_សៀមរាប')
 211+kmwiki: renaming 4718 (0,'ក្រុងព្រះសីហនុ​') to (0,'Broken/ក្រុងព្រះសីហនុ')
 212+kmwiki: renaming 4719 (0,'ព្រះរាជាណាចក្រ​កម្ពុជា') to (0,'Broken/ព្រះរាជាណាចក្រ_កម្ពុជា')
 213+kmwiki: renaming 4956 (0,'ខេត្ត​កំពង់ធំ​') to (0,'Broken/ខេត្ត_កំពង់ធំ')
 214+kmwiki: renaming 4965 (0,'របាំ​ព្រះ​រាជ​ទ្រព្យ​') to (0,'Broken/របាំ_ព្រះ_រាជ_ទ្រព្យ')
 215+kmwiki: renaming 5006 (0,'ស្រុក​_មោងឫស្សី') to (0,'Broken/ស្រុក_មោងឫស្សី')
 216+kmwiki: renaming 5007 (0,'ស្រុក_​រតនមណ្ឌល') to (0,'Broken/ស្រុក_រតនមណ្ឌល')
 217+kmwiki: renaming 5008 (0,'ស្រុក_​សង្កែ') to (0,'Broken/id:5008')
 218+kmwiki: renaming 5009 (0,'ស្រុក_​សំឡូត') to (0,'Broken/ស្រុក_សំឡូត')
 219+kmwiki: renaming 5011 (0,'ស្រុក​_ភ្នំព្រឹក') to (0,'Broken/ស្រុក_ភ្នំព្រឹក')
 220+kmwiki: renaming 5012 (0,'ស្រុក​_កំរៀង') to (0,'Broken/ស្រុក_កំរៀង')
 221+kmwiki: renaming 5013 (0,'ស្រុក​_គាស់ក្រឡ') to (0,'Broken/ស្រុក_គាស់ក្រឡ')
 222+kmwiki: renaming 5195 (0,'​ពិភពលោក') to (0,'Broken/ពិភពលោក')
 223+kmwiki: renaming 5225 (0,'បឹង​ទន្លេសាប​') to (0,'Broken/បឹង_ទន្លេសាប')
 224+kmwiki: renaming 5365 (0,'ស្រុក​បាណន់') to (0,'Broken/ស្រុក_បាណន់')
 225+kmwiki: renaming 5366 (0,'ស្រុក​ថ្មគោល') to (0,'Broken/ស្រុក_ថ្មគោល')
 226+kmwiki: renaming 5367 (0,'ស្រុក​បវេល') to (0,'Broken/ស្រុក_បវេល')
 227+kmwiki: renaming 5433 (0,'ពិភពលោក​') to (0,'Broken/id:5433')
 228+kmwiki: renaming 5454 (0,'ប្រាសាទ​ព្រះវិហារ') to (0,'Broken/id:5454')
 229+kmwiki: renaming 5745 (0,'ប្រាសាទ​បាពួន') to (0,'Broken/ប្រាសាទ_បាពួន')
 230+kmwiki: renaming 6019 (0,'អង្គការ​សហប្រជាជាតិ​') to (0,'Broken/អង្គការ_សហប្រជាជាតិ')
 231+kmwiki: renaming 7335 (0,'​ខេត្ត​សៀមរាប​') to (0,'Broken/id:7335')
 232+kmwiki: renaming 7407 (0,'ខេត្ត​បន្ទាយមានជ័យ') to (0,'Broken/ខេត្ត_បន្ទាយមានជ័យ')
 233+kmwiki: renaming 7543 (0,'ទ្រឹស្តីបទ​កូស៊ីនុស') to (0,'Broken/ទ្រឹស្តីបទ_កូស៊ីនុស')
 234+kmwiki: renaming 7802 (0,'គណកម្មាធិការអូឡាំពិកជាតិ​') to (0,'Broken/គណកម្មាធិការអូឡាំពិកជាតិ')
 235+kmwiki: renaming 7943 (0,'ខេត្ត​បាត់ដំបង') to (0,'Broken/ខេត្ត_បាត់ដំបង')
 236+kmwiki: renaming 8232 (0,'នរោត្តម​ចន្ទរង្សី') to (0,'Broken/នរោត្តម_ចន្ទរង្សី')
 237+kmwiki: renaming 8346 (0,'បំលែង​ឡាប្លាស') to (0,'Broken/បំលែង_ឡាប្លាស')
 238+kmwiki: renaming 8353 (0,'ប្រាសាទប្រែរូប​') to (0,'Broken/ប្រាសាទប្រែរូប')
 239+kmwiki: renaming 8392 (0,'ត្រីកោណសម័ង្ស​') to (0,'Broken/ត្រីកោណសម័ង្ស')
 240+kmwiki: renaming 8413 (0,'​អនុគមន៍ត្រីកោណមាត្រ') to (0,'Broken/អនុគមន៍ត្រីកោណមាត្រ')
 241+kmwiki: renaming 8499 (0,'​រង្វង់​') to (0,'Broken/រង្វង់')
 242+kmwiki: renaming 8607 (0,'ត្រីកោណ​') to (0,'Broken/ត្រីកោណ')
 243+kmwiki: renaming 8826 (0,'ក្រុង​ភ្នំពេញ') to (0,'Broken/id:8826')
 244+kmwiki: renaming 8834 (0,'​មុំ') to (0,'Broken/មុំ')
 245+kmwiki: renaming 8892 (0,'​មហាអំណាច​នុយក្លេអ៊ែរ​') to (0,'Broken/មហាអំណាច_នុយក្លេអ៊ែរ')
 246+kmwiki: renaming 8931 (0,'​ទ្រឹស្តីបទ​វ្យែត') to (0,'Broken/ទ្រឹស្តីបទ_វ្យែត')
 247+kmwiki: renaming 8993 (0,'ក្រលាផ្ទៃ​') to (0,'Broken/ក្រលាផ្ទៃ')
 248+kmwiki: renaming 9009 (0,'សហភាព​សូវៀត​') to (0,'Broken/id:9009')
 249+kmwiki: renaming 9205 (0,'ស្រុក​អង្គស្នួល') to (0,'Broken/ស្រុក_អង្គស្នួល')
 250+kmwiki: renaming 9214 (0,'អ្នក​ភិរម្យ​ភាសា​អ៊ូ') to (0,'Broken/អ្នក_ភិរម្យ_ភាសា_អ៊ូ')
 251+kmwiki: renaming 9455 (0,'ចេក​') to (0,'Broken/ចេក')
 252+kmwiki: renaming 9706 (0,'បារាំង​') to (0,'Broken/បារាំង')
 253+kmwiki: renaming 9774 (0,'​ភូមិវប្បធម៌កម្ពុជា') to (0,'Broken/ភូមិវប្បធម៌កម្ពុជា')
 254+kmwiki: renaming 9776 (0,'ក្រុង​សៀមរាប') to (0,'Broken/ក្រុង_សៀមរាប')
 255+kmwiki: renaming 10031 (0,'កេង​_វ៉ាន់សាក់') to (0,'Broken/កេង_វ៉ាន់សាក់')
 256+kmwiki: renaming 10056 (0,'ស្កុតឡែន​') to (0,'Broken/ស្កុតឡែន')
 257+kmwiki: renaming 10240 (0,'ទ្រឹស្តីបទ​មីកេល') to (0,'Broken/ទ្រឹស្តីបទ_មីកេល')
 258+kmwiki: renaming 10276 (0,'ពហុធា​ប៊ែរនូយី') to (0,'Broken/ពហុធា_ប៊ែរនូយី')
 259+kmwiki: renaming 10503 (0,'កម្មវិធី​អភិវឌ្ឍន៍​សហប្រជាជាតិ') to (0,'Broken/កម្មវិធី_អភិវឌ្ឍន៍_សហប្រជាជាតិ')
 260+kmwiki: renaming 10684 (0,'មហាសមុទ្រ​អាត្លង់ទិក') to (0,'Broken/មហាសមុទ្រ_អាត្លង់ទិក')
 261+kmwiki: renaming 10707 (0,'ហែម​_ចៀវ') to (0,'Broken/ហែម_ចៀវ')
 262+kmwiki: renaming 10750 (0,'កម្ពុជា​ក្រោម') to (0,'Broken/កម្ពុជា_ក្រោម')
 263+knwiki: renaming 1949 (1,'ಸಹಾಯ:ಸಂಪಾದನೆ') to (1,'Broken/\xe0\xb2\xb8\xe0\xb2\xb9\xe0\xb2\xbe\xe0\xb2\xaf\x3a\xe0\xb2\xb8\xe0\xb2\x82\xe0\xb2\xaa\xe0\xb2\xbe\xe0\xb2\xa6\xe0\xb2\xa8\xe0\xb3\x86')
 264+knwiki: renaming 2149 (1,'ವಿಕಿಪೀಡಿಯ:_ಕೃತಿಸ್ವಾಮ್ಯತೆಗಳು') to (1,'Broken/id:2149')
 265+knwiki: renaming 2685 (1,'ಸಹಾಯ:ಹೊಸ_ಲೇಖನವೊಂದನ್ನು_ಪ್ರಾರಂಭಿಸುವುದು_ಹೇಗೆ?') to (1,'Broken/id:2685')
 266+knwiki: renaming 4147 (1,'ವಿಕಿಪೀಡಿಯ:ಚುಟುಕು') to (1,'Broken/\xe0\xb2\xb5\xe0\xb2\xbf\xe0\xb2\x95\xe0\xb2\xbf\xe0\xb2\xaa\xe0\xb3\x80\xe0\xb2\xa1\xe0\xb2\xbf\xe0\xb2\xaf\x3a\xe0\xb2\x9a\xe0\xb3\x81\xe0\xb2\x9f\xe0\xb3\x81\xe0\xb2\x95\xe0\xb3\x81')
 267+knwiki: renaming 4638 (1,'ವಿಕಿಪೀಡಿಯ:ಪ್ರಯೋಗ_ಶಾಲೆ') to (1,'Broken/\xe0\xb2\xb5\xe0\xb2\xbf\xe0\xb2\x95\xe0\xb2\xbf\xe0\xb2\xaa\xe0\xb3\x80\xe0\xb2\xa1\xe0\xb2\xbf\xe0\xb2\xaf\x3a\xe0\xb2\xaa\xe0\xb3\x8d\xe0\xb2\xb0\xe0\xb2\xaf\xe0\xb3\x8b\xe0\xb2\x97_\xe0\xb2\xb6\xe0\xb2\xbe\xe0\xb2\xb2\xe0\xb3\x86')
 268+knwiki: renaming 4879 (1,'ವಿಕಿಪೀಡಿಯ:ಕನ್ನಡ_ವಿಕಿಪೀಡಿಯ_meet_and_press_conference') to (1,'Broken/id:4879')
 269+knwiki: renaming 5137 (1,'ಸಹಾಯ:ಸ೦ಪಾದನೆ') to (1,'Broken/\xe0\xb2\xb8\xe0\xb2\xb9\xe0\xb2\xbe\xe0\xb2\xaf\x3a\xe0\xb2\xb8\xe0\xb3\xa6\xe0\xb2\xaa\xe0\xb2\xbe\xe0\xb2\xa6\xe0\xb2\xa8\xe0\xb3\x86')
 270+knwiki: renaming 5490 (1,'ವಿಶೇಷ:ಯಾದೃಚ್ಛಿಕ') to (1,'Broken/\xe0\xb2\xb5\xe0\xb2\xbf\xe0\xb2\xb6\xe0\xb3\x87\xe0\xb2\xb7\x3a\xe0\xb2\xaf\xe0\xb2\xbe\xe0\xb2\xa6\xe0\xb3\x83\xe0\xb2\x9a\xe0\xb3\x8d\xe0\xb2\x9b\xe0\xb2\xbf\xe0\xb2\x95')
 271+knwiki: renaming 5532 (1,'ವಿಕಿಪೀಡಿಯ:ನಮ್ಮ_ಬಗ್ಗೆ') to (1,'Broken/\xe0\xb2\xb5\xe0\xb2\xbf\xe0\xb2\x95\xe0\xb2\xbf\xe0\xb2\xaa\xe0\xb3\x80\xe0\xb2\xa1\xe0\xb2\xbf\xe0\xb2\xaf\x3a\xe0\xb2\xa8\xe0\xb2\xae\xe0\xb3\x8d\xe0\xb2\xae_\xe0\xb2\xac\xe0\xb2\x97\xe0\xb3\x8d\xe0\xb2\x97\xe0\xb3\x86')
 272+knwiki: renaming 7058 (1,'ವಿಕಿಪೀಡಿಯ:ವಿಹರಿಸಿ') to (1,'Broken/\xe0\xb2\xb5\xe0\xb2\xbf\xe0\xb2\x95\xe0\xb2\xbf\xe0\xb2\xaa\xe0\xb3\x80\xe0\xb2\xa1\xe0\xb2\xbf\xe0\xb2\xaf\x3a\xe0\xb2\xb5\xe0\xb2\xbf\xe0\xb2\xb9\xe0\xb2\xb0\xe0\xb2\xbf\xe0\xb2\xb8\xe0\xb2\xbf')
 273+knwiki: renaming 8383 (1,'ವಿಕಿಪೀಡಿಯ:ವಾರದ_ಸಹಯೋಗ') to (1,'Broken/\xe0\xb2\xb5\xe0\xb2\xbf\xe0\xb2\x95\xe0\xb2\xbf\xe0\xb2\xaa\xe0\xb3\x80\xe0\xb2\xa1\xe0\xb2\xbf\xe0\xb2\xaf\x3a\xe0\xb2\xb5\xe0\xb2\xbe\xe0\xb2\xb0\xe0\xb2\xa6_\xe0\xb2\xb8\xe0\xb2\xb9\xe0\xb2\xaf\xe0\xb3\x8b\xe0\xb2\x97')
 274+knwiki: renaming 9120 (1,'ವಿಕಿಪೀಡಿಯ:ಅರಳಿ_ಕಟ್ಟೆ') to (1,'Broken/\xe0\xb2\xb5\xe0\xb2\xbf\xe0\xb2\x95\xe0\xb2\xbf\xe0\xb2\xaa\xe0\xb3\x80\xe0\xb2\xa1\xe0\xb2\xbf\xe0\xb2\xaf\x3a\xe0\xb2\x85\xe0\xb2\xb0\xe0\xb2\xb3\xe0\xb2\xbf_\xe0\xb2\x95\xe0\xb2\x9f\xe0\xb3\x8d\xe0\xb2\x9f\xe0\xb3\x86')
 275+knwiki: renaming 9431 (1,'ವಿಕಿಪೀಡಿಯ:ಅಡ್ಡದಾರಿ') to (1,'Broken/\xe0\xb2\xb5\xe0\xb2\xbf\xe0\xb2\x95\xe0\xb2\xbf\xe0\xb2\xaa\xe0\xb3\x80\xe0\xb2\xa1\xe0\xb2\xbf\xe0\xb2\xaf\x3a\xe0\xb2\x85\xe0\xb2\xa1\xe0\xb3\x8d\xe0\xb2\xa1\xe0\xb2\xa6\xe0\xb2\xbe\xe0\xb2\xb0\xe0\xb2\xbf')
 276+knwiki: renaming 10326 (1,'ವಿಕಿಪೀಡಿಯ:ಅರಳಿ_ಕಟ್ಟೆ/ಇತರ_ಚರ್ಚೆ') to (1,'Broken/id:10326')
 277+knwiki: renaming 11080 (1,'ವಿಕಿಪೀಡಿಯ:ಅಗತ್ಯ_ಲೇಖನಗಳು') to (1,'Broken/id:11080')
 278+kshwiki: renaming 2989 (1,'W:ksh:Houpsigg') to (1,'Broken/W\x3aksh\x3aHoupsigg')
 279+kshwiki: renaming 140010 (1,'Medmaacher:Düüvelskääl') to (1,'Broken/Medmaacher\x3aD\xc3\xbc\xc3\xbcvelsk\xc3\xa4\xc3\xa4l')
 280+kshwiki: renaming 339289 (1,'Wikipedia:Shpände_för_WiKoelsch') to (1,'Broken/Wikipedia\x3aShp\xc3\xa4nde_f\xc3\xb6r_WiKoelsch')
 281+kshwiki: renaming 464553 (1,'Shpezjal:Letzte_Änderungen') to (1,'Broken/Shpezjal\x3aLetzte_\xc3\x84nderungen')
 282+lawikisource: renaming 6442 (1,'Liber:De_assensione_Stoici_quid_senserint.djvu') to (1,'Broken/Liber\x3aDe_assensione_Stoici_quid_senserint\x2edjvu')
 283+lawikisource: renaming 6523 (1,'Liber:Libri_tres_de_institutione_harmonica') to (1,'Broken/Liber\x3aLibri_tres_de_institutione_harmonica')
 284+lawikisource: renaming 6543 (1,'Liber:De_remediis_utriusque_fortunae') to (1,'Broken/Liber\x3aDe_remediis_utriusque_fortunae')
 285+lawikisource: renaming 6572 (1,'Liber:De_revolutionibus_orbium_coelestium') to (1,'Broken/Liber\x3aDe_revolutionibus_orbium_coelestium')
 286+lawikisource: renaming 7373 (1,'Liber:De_assensione_Stoici_quid_senserint') to (1,'Broken/Liber\x3aDe_assensione_Stoici_quid_senserint')
 287+lawikisource: renaming 7642 (1,'Liber:The_poems_of_Gaius_Valerius_Catullus_-_Francis_Warre_Cornish.djvu') to (1,'Broken/Liber\x3aThe_poems_of_Gaius_Valerius_Catullus_-_Francis_Warre_Cornish\x2edjvu')
 288+lbwiki: renaming 2978 (1,'Hëllef:Éischt_Schrëtt') to (1,'Broken/H\xc3\xabllef\x3a\xc3\x89ischt_Schr\xc3\xabtt')
 289+lbwiki: renaming 6605 (1,'Hëllef:Wéi_réckelen_ech_eng_Säit?') to (1,'Broken/H\xc3\xabllef\x3aW\xc3\xa9i_r\xc3\xa9ckelen_ech_eng_S\xc3\xa4it\x3f')
 290+lbwiki: renaming 16941 (1,'Hëllef:Sichen') to (1,'Broken/H\xc3\xabllef\x3aSichen')
 291+lbwiki: renaming 23739 (1,'Hëllef:Wéi_sichen_ech_eng_Säit') to (1,'Broken/H\xc3\xabllef\x3aW\xc3\xa9i_sichen_ech_eng_S\xc3\xa4it')
 292+lmowiki: renaming 5995 (1,'Purtaal:Entrada') to (1,'Broken/Purtaal\x3aEntrada')
 293+lmowiki: renaming 132386 (1,'Jüt:Dervì_un_cünt') to (1,'Broken/J\xc3\xbct\x3aDerv\xc3\xac_un_c\xc3\xbcnt')
 294+metawiki: renaming 45418 (1,'Wikiversity:Online_Course') to (1,'Broken/Wikiversity\x3aOnline_Course')
 295+metawiki: renaming 52254 (1,'Wikiversity:Faculty_club') to (1,'Broken/Wikiversity\x3aFaculty_club')
 296+mgwiki: renaming 4119 (0,'Utilisateur:Muro_Bot') to (0,'Broken/Muro_Bot')
 297+mgwiki: renaming 4138 (0,'Utilisateur:Jagwar') to (0,'Broken/Jagwar')
 298+mgwiki: renaming 4144 (0,'Modèle:fro') to (0,'Broken/Fro')
 299+mgwiki: renaming 4153 (0,'Utilisateur:WikimediaNotifier/notifications') to (0,'Broken/WikimediaNotifier/notifications')
 300+mgwikibooks: renaming 1867 (0,'Utilisateur:WikimediaNotifier/notifications') to (0,'Broken/WikimediaNotifier/notifications')
 301+mgwiktionary: renaming 2149 (0,'Utilisateur:WikimediaNotifier/notifications') to (0,'Broken/WikimediaNotifier/notifications')
 302+miwiki: renaming 5275 (1,'Wikipedia:Kaupapa') to (1,'Broken/Wikipedia\x3aKaupapa')
 303+miwiki: renaming 5349 (1,'Category:Rautau_21') to (1,'Broken/Category\x3aRautau_21')
 304+mkwiki: renaming 25125 (1,'Портал:Република_Македонија') to (1,'Broken/\xd0\x9f\xd0\xbe\xd1\x80\xd1\x82\xd0\xb0\xd0\xbb\x3a\xd0\xa0\xd0\xb5\xd0\xbf\xd1\x83\xd0\xb1\xd0\xbb\xd0\xb8\xd0\xba\xd0\xb0_\xd0\x9c\xd0\xb0\xd0\xba\xd0\xb5\xd0\xb4\xd0\xbe\xd0\xbd\xd0\xb8\xd1\x98\xd0\xb0')
 305+mkwiki: renaming 30262 (1,'Портал:Историја') to (1,'Broken/\xd0\x9f\xd0\xbe\xd1\x80\xd1\x82\xd0\xb0\xd0\xbb\x3a\xd0\x98\xd1\x81\xd1\x82\xd0\xbe\xd1\x80\xd0\xb8\xd1\x98\xd0\xb0')
 306+mkwiki: renaming 32136 (1,'Портал:Биографија') to (1,'Broken/\xd0\x9f\xd0\xbe\xd1\x80\xd1\x82\xd0\xb0\xd0\xbb\x3a\xd0\x91\xd0\xb8\xd0\xbe\xd0\xb3\xd1\x80\xd0\xb0\xd1\x84\xd0\xb8\xd1\x98\xd0\xb0')
 307+mkwiki: renaming 32612 (1,'Портал:Археологија/галерија_на_слики') to (1,'Broken/id:32612')
 308+mkwiki: renaming 32766 (1,'Портал:Математика') to (1,'Broken/\xd0\x9f\xd0\xbe\xd1\x80\xd1\x82\xd0\xb0\xd0\xbb\x3a\xd0\x9c\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbc\xd0\xb0\xd1\x82\xd0\xb8\xd0\xba\xd0\xb0')
 309+mnwiki: renaming 7815 (1,'Тусламж:Агуулга') to (1,'Broken/\xd0\xa2\xd1\x83\xd1\x81\xd0\xbb\xd0\xb0\xd0\xbc\xd0\xb6\x3a\xd0\x90\xd0\xb3\xd1\x83\xd1\x83\xd0\xbb\xd0\xb3\xd0\xb0')
 310+mrwiki: renaming 15927 (1,'विकिपीडिया:विक्शनरी_नमुना_पत्र१') to (1,'Broken/id:15927')
 311+mrwiki: renaming 15936 (1,'विकिपीडिया:वृत्तपत्रीय_मासिक_आवाहन') to (1,'Broken/id:15936')
 312+mrwiki: renaming 15940 (1,'विकिपीडिया:वृत्तपत्रिय_मासिक_आवाहन') to (1,'Broken/id:15940')
 313+mrwiki: renaming 16761 (1,'विकिपीडिया:संपर्क') to (1,'Broken/\xe0\xa4\xb5\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbf\xe0\xa4\xaa\xe0\xa5\x80\xe0\xa4\xa1\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\x3a\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\xaa\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\x95')
 314+mrwiki: renaming 16967 (1,'विकिपीडिया:साचे') to (1,'Broken/\xe0\xa4\xb5\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbf\xe0\xa4\xaa\xe0\xa5\x80\xe0\xa4\xa1\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\x3a\xe0\xa4\xb8\xe0\xa4\xbe\xe0\xa4\x9a\xe0\xa5\x87')
 315+mrwiki: renaming 17216 (1,'विकिपीडिया:कौल') to (1,'Broken/\xe0\xa4\xb5\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbf\xe0\xa4\xaa\xe0\xa5\x80\xe0\xa4\xa1\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\x3a\xe0\xa4\x95\xe0\xa5\x8c\xe0\xa4\xb2')
 316+mrwiki: renaming 17405 (1,'सदस्य:Vyzasatya') to (1,'Broken/\xe0\xa4\xb8\xe0\xa4\xa6\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xaf\x3aVyzasatya')
 317+mrwiki: renaming 25129 (1,'विकिपीडिया:मदतकेंद्र') to (1,'Broken/\xe0\xa4\xb5\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbf\xe0\xa4\xaa\xe0\xa5\x80\xe0\xa4\xa1\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\x3a\xe0\xa4\xae\xe0\xa4\xa6\xe0\xa4\xa4\xe0\xa4\x95\xe0\xa5\x87\xe0\xa4\x82\xe0\xa4\xa6\xe0\xa5\x8d\xe0\xa4\xb0')
 318+mrwiki: renaming 39210 (1,'विकिपीडिया:कौल/जुने_कौल_१') to (1,'Broken/id:39210')
 319+mrwiki: renaming 55807 (1,'विकिपीडिया:शीर्षकलेखन_संकेत') to (1,'Broken/id:55807')
 320+mrwiki: renaming 57841 (1,'सहाय्य:सहाय्य_पृष्ठ') to (1,'Broken/\xe0\xa4\xb8\xe0\xa4\xb9\xe0\xa4\xbe\xe0\xa4\xaf\xe0\xa5\x8d\xe0\xa4\xaf\x3a\xe0\xa4\xb8\xe0\xa4\xb9\xe0\xa4\xbe\xe0\xa4\xaf\xe0\xa5\x8d\xe0\xa4\xaf_\xe0\xa4\xaa\xe0\xa5\x83\xe0\xa4\xb7\xe0\xa5\x8d\xe0\xa4\xa0')
 321+mrwiktionary: renaming 3201 (0,'विक्शनरी :मदतकेंद्र') to (0,'Broken/विक्शनरी_:मदतकेंद्र')
 322+mywiki: renaming 1648 (0,'စစ်မှန်သော​ယေရှုဘုရား၏အသင်းတော်') to (0,'Broken/စစ်မှန်သော_ယေရှုဘုရား၏အသင်းတော်')
 323+mywiktionary: renaming 1961 (0,'ဗ​ဟို​စာ​မျက်​နှာ​') to (0,'Broken/ဗ_ဟို_စာ_မျက်_နှာ')
 324+napwiki: renaming 6591 (1,'Ajùto:Cosa_mettere_su_Wikipedia') to (1,'Broken/Aj\xc3\xb9to\x3aCosa_mettere_su_Wikipedia')
 325+napwiki: renaming 18062 (1,'Ajùto:Convenzioni') to (1,'Broken/Aj\xc3\xb9to\x3aConvenzioni')
 326+newwiki: renaming 4905 (1,'विकिपिडिया:दुतावास') to (1,'Broken/\xe0\xa4\xb5\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbf\xe0\xa4\xaa\xe0\xa4\xbf\xe0\xa4\xa1\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\x3a\xe0\xa4\xa6\xe0\xa5\x81\xe0\xa4\xa4\xe0\xa4\xbe\xe0\xa4\xb5\xe0\xa4\xbe\xe0\xa4\xb8')
 327+newwiki: renaming 12182 (1,'विकिपिडिया:_देवनागरी_टेम्प्लेट_परियोजना') to (1,'Broken/id:12182')
 328+nlwiki: renaming 1106678 (1,'Portaal:Oudheid/werkplaats/Romeinse_religie') to (1,'Broken/Portaal\x3aOudheid/werkplaats/Romeinse_religie')
 329+nlwikibooks: renaming 5424 (1,'Transwiki:Mangochutney') to (1,'Broken/Transwiki\x3aMangochutney')
 330+nlwikibooks: renaming 5428 (1,'Transwiki:Boerenjongens') to (1,'Broken/Transwiki\x3aBoerenjongens')
 331+nlwikibooks: renaming 6369 (1,'Wikijunior:Natuurkunde/Zwaartekracht') to (1,'Broken/Wikijunior\x3aNatuurkunde/Zwaartekracht')
 332+nlwikibooks: renaming 6465 (1,'Wikijunior:Zonnestelsel/Pluto') to (1,'Broken/Wikijunior\x3aZonnestelsel/Pluto')
 333+nlwikibooks: renaming 6504 (1,'Wikijunior:Zonnestelsel/Zon') to (1,'Broken/Wikijunior\x3aZonnestelsel/Zon')
 334+nlwikibooks: renaming 6605 (1,'Wikijunior:Zonnestelsel/Mercurius') to (1,'Broken/Wikijunior\x3aZonnestelsel/Mercurius')
 335+nlwikibooks: renaming 6708 (1,'Wikijunior:Natuurkunde/Beweging') to (1,'Broken/Wikijunior\x3aNatuurkunde/Beweging')
 336+nlwikibooks: renaming 6843 (1,'Wikijunior:Zonnestelsel/Zonnestelsel') to (1,'Broken/Wikijunior\x3aZonnestelsel/Zonnestelsel')
 337+nlwikibooks: renaming 6859 (1,'Wikijunior:Zonnestelsel/Venus') to (1,'Broken/Wikijunior\x3aZonnestelsel/Venus')
 338+nlwikibooks: renaming 6883 (1,'Wikijunior:Natuurkunde/Inleiding') to (1,'Broken/Wikijunior\x3aNatuurkunde/Inleiding')
 339+nlwikibooks: renaming 7091 (1,'Wikijunior:Bus_en_trein/Toets_trein_NL') to (1,'Broken/Wikijunior\x3aBus_en_trein/Toets_trein_NL')
 340+nlwikibooks: renaming 7455 (1,'Wikijunior:Zonnestelsel/Aarde') to (1,'Broken/Wikijunior\x3aZonnestelsel/Aarde')
 341+nlwikibooks: renaming 7456 (1,'Wikijunior:Zonnestelsel/Mars') to (1,'Broken/Wikijunior\x3aZonnestelsel/Mars')
 342+nlwikibooks: renaming 7457 (1,'Wikijunior:Zonnestelsel/Jupiter') to (1,'Broken/Wikijunior\x3aZonnestelsel/Jupiter')
 343+nlwikibooks: renaming 7458 (1,'Wikijunior:Zonnestelsel/Uranus') to (1,'Broken/Wikijunior\x3aZonnestelsel/Uranus')
 344+nlwikibooks: renaming 7522 (1,'Wikijunior:Natuurkunde/Stoffen_en_hun_eigenschappen') to (1,'Broken/Wikijunior\x3aNatuurkunde/Stoffen_en_hun_eigenschappen')
 345+nlwikibooks: renaming 7803 (1,'Wikijunior:Zonnestelsel/Kometen') to (1,'Broken/Wikijunior\x3aZonnestelsel/Kometen')
 346+nlwikibooks: renaming 8353 (1,'Wikijunior:Natuurkunde/Stoffen_vervormen') to (1,'Broken/Wikijunior\x3aNatuurkunde/Stoffen_vervormen')
 347+nlwikibooks: renaming 8368 (1,'Wikijunior:Natuurkunde/Magnetisme') to (1,'Broken/Wikijunior\x3aNatuurkunde/Magnetisme')
 348+nlwikibooks: renaming 8405 (1,'Wikijunior:Natuurkunde/Hydrauliek_en_pneumatiek') to (1,'Broken/Wikijunior\x3aNatuurkunde/Hydrauliek_en_pneumatiek')
 349+nlwikibooks: renaming 8853 (1,'Wikijunior:_Zonnestelsel/Aarde') to (1,'Broken/Wikijunior\x3a_Zonnestelsel/Aarde')
 350+nlwikibooks: renaming 8857 (1,'Wikijunior:_Zonnestelsel/Jupiter') to (1,'Broken/Wikijunior\x3a_Zonnestelsel/Jupiter')
 351+nlwikibooks: renaming 8859 (1,'Wikijunior:_Zonnestelsel/Kometen') to (1,'Broken/Wikijunior\x3a_Zonnestelsel/Kometen')
 352+nlwikibooks: renaming 8862 (1,'Wikijunior:_Zonnestelsel/Mars') to (1,'Broken/Wikijunior\x3a_Zonnestelsel/Mars')
 353+nlwikibooks: renaming 8864 (1,'Wikijunior:_Zonnestelsel/Mercurius') to (1,'Broken/Wikijunior\x3a_Zonnestelsel/Mercurius')
 354+nlwikibooks: renaming 8868 (1,'Wikijunior:_Zonnestelsel/Pluto') to (1,'Broken/Wikijunior\x3a_Zonnestelsel/Pluto')
 355+nlwikibooks: renaming 8872 (1,'Wikijunior:_Zonnestelsel/Uranus') to (1,'Broken/Wikijunior\x3a_Zonnestelsel/Uranus')
 356+nlwikibooks: renaming 8874 (1,'Wikijunior:_Zonnestelsel/Venus') to (1,'Broken/Wikijunior\x3a_Zonnestelsel/Venus')
 357+nlwikibooks: renaming 8876 (1,'Wikijunior:_Zonnestelsel/Zon') to (1,'Broken/Wikijunior\x3a_Zonnestelsel/Zon')
 358+nlwikibooks: renaming 8878 (1,'Wikijunior:_Zonnestelsel/Zonnestelsel') to (1,'Broken/Wikijunior\x3a_Zonnestelsel/Zonnestelsel')
 359+nlwikibooks: renaming 8899 (1,'Wikijunior:Natuurkunde/Geluid') to (1,'Broken/Wikijunior\x3aNatuurkunde/Geluid')
 360+nlwikibooks: renaming 9191 (1,'Wikijunior:Bus_en_trein/Samenvatting_trein_NL') to (1,'Broken/Wikijunior\x3aBus_en_trein/Samenvatting_trein_NL')
 361+nlwikibooks: renaming 9192 (1,'Wikijunior:Bus_en_trein/Planning,_kaartjes_en_het_toilet_NL') to (1,'Broken/Wikijunior\x3aBus_en_trein/Planning\x2c_kaartjes_en_het_toilet_NL')
 362+nlwikibooks: renaming 9200 (1,'Wikijunior:Bus_en_trein/Planning,_kaartjes_en_het_toilet') to (1,'Broken/Wikijunior\x3aBus_en_trein/Planning\x2c_kaartjes_en_het_toilet')
 363+nlwikibooks: renaming 9202 (1,'Wikijunior:Bus_en_trein/Samenvatting_trein') to (1,'Broken/Wikijunior\x3aBus_en_trein/Samenvatting_trein')
 364+nlwikibooks: renaming 9204 (1,'Wikijunior:Bus_en_trein/Toets_trein') to (1,'Broken/Wikijunior\x3aBus_en_trein/Toets_trein')
 365+nlwikibooks: renaming 9712 (1,'Wikijunior:Verkeer/Voorrang') to (1,'Broken/Wikijunior\x3aVerkeer/Voorrang')
 366+nlwikibooks: renaming 9734 (1,'Wikijunior:Kriebelbeestjes/Lieveheersbeestje') to (1,'Broken/Wikijunior\x3aKriebelbeestjes/Lieveheersbeestje')
 367+nlwikibooks: renaming 9918 (1,'Wikijunior:Kriebelbeestjes/Lieveheersbeestje_extra') to (1,'Broken/Wikijunior\x3aKriebelbeestjes/Lieveheersbeestje_extra')
 368+nlwikibooks: renaming 10158 (1,'Wikijunior:Computerzaken/Word') to (1,'Broken/Wikijunior\x3aComputerzaken/Word')
 369+nlwikibooks: renaming 10205 (1,'Wikijunior:Computerzaken/Hardware') to (1,'Broken/Wikijunior\x3aComputerzaken/Hardware')
 370+nlwikibooks: renaming 10206 (1,'Wikijunior:Computerzaken/Windows') to (1,'Broken/Wikijunior\x3aComputerzaken/Windows')
 371+nlwikibooks: renaming 10207 (1,'Wikijunior:Computerzaken/Internet') to (1,'Broken/Wikijunior\x3aComputerzaken/Internet')
 372+nlwikibooks: renaming 10208 (1,'Wikijunior:Computerzaken/Excel') to (1,'Broken/Wikijunior\x3aComputerzaken/Excel')
 373+nlwikibooks: renaming 10209 (1,'Wikijunior:Computerzaken/Paint_en_Powerpoint') to (1,'Broken/Wikijunior\x3aComputerzaken/Paint_en_Powerpoint')
 374+nlwikibooks: renaming 10210 (1,'Wikijunior:Computerzaken/Access') to (1,'Broken/Wikijunior\x3aComputerzaken/Access')
 375+nlwikibooks: renaming 10211 (1,'Wikijunior:Computerzaken/Einde') to (1,'Broken/Wikijunior\x3aComputerzaken/Einde')
 376+nlwikibooks: renaming 10330 (1,'Wikijunior:Techniek/Technisch_tekenen') to (1,'Broken/Wikijunior\x3aTechniek/Technisch_tekenen')
 377+nlwikimedia: renaming 93 (1,'Wikimedia:Amarant-lounge') to (1,'Broken/Wikimedia\x3aAmarant-lounge')
 378+nlwikimedia: renaming 193 (1,'Wikimedia:Wikimedianen_naar_project') to (1,'Broken/Wikimedia\x3aWikimedianen_naar_project')
 379+nlwikimedia: renaming 291 (1,'Nl:Wikipedia:Kennisnet20050202Nl') to (1,'Broken/id:291')
 380+nlwiktionary: renaming 1738 (1,'WikiWoordenboek:Overzicht_beheerpagina's') to (1,'Broken/WikiWoordenboek\x3aOverzicht_beheerpagina\x27s')
 381+nlwiktionary: renaming 29422 (1,'Wiktionary:Babel_lijst') to (1,'Broken/Wiktionary\x3aBabel_lijst')
 382+nowiki: renaming 9723 (1,'Wikipedia-diskusjon:Administratorer') to (1,'Broken/Wikipedia-diskusjon\x3aAdministratorer')
 383+nowiki: renaming 10064 (1,'MediaWiki-diskusjon:Objektivitet') to (1,'Broken/MediaWiki-diskusjon\x3aObjektivitet')
 384+nowiki: renaming 70251 (1,'Wikipedia:Pressemelding') to (1,'Broken/Wikipedia\x3aPressemelding')
 385+nowiki: renaming 83494 (1,'Portal:Harry_Potter') to (1,'Broken/Portal\x3aHarry_Potter')
 386+nowiki: renaming 256699 (1,'Spesial:Random') to (1,'Broken/Spesial\x3aRandom')
 387+nowikiquote: renaming 1419 (1,'Wikiquote:Dagens_sitat/Juni_2005') to (1,'Broken/Wikiquote\x3aDagens_sitat/Juni_2005')
 388+nowiktionary: renaming 27530 (1,'Tillegg:Sterke_verb_i_norsk') to (1,'Broken/Tillegg\x3aSterke_verb_i_norsk')
 389+nowiktionary: renaming 29977 (1,'Tillegg:Portal') to (1,'Broken/Tillegg\x3aPortal')
 390+ocwiki: renaming 12876 (1,'Wikipèdia:Presa_de_decision/Nom_del_projècte_Wikipèdia_bis') to (1,'Broken/Wikip\xc3\xa8dia\x3aPresa_de_decision/Nom_del_proj\xc3\xa8cte_Wikip\xc3\xa8dia_bis')
 391+ocwiki: renaming 13293 (1,'Wikipèdia:Vandalisme') to (1,'Broken/Wikip\xc3\xa8dia\x3aVandalisme')
 392+ocwiki: renaming 17183 (1,'Portal:Cinèma') to (1,'Broken/Portal\x3aCin\xc3\xa8ma')
 393+ocwiki: renaming 26000 (1,'Portal:Preïstòria') to (1,'Broken/Portal\x3aPre\xc3\xafst\xc3\xb2ria')
 394+ocwiki: renaming 30986 (1,'Portal:Aragon') to (1,'Broken/Portal\x3aAragon')
 395+oswiki: renaming 10225 (1,'Википеди:Хъазуатон_куыст') to (1,'Broken/\xd0\x92\xd0\xb8\xd0\xba\xd0\xb8\xd0\xbf\xd0\xb5\xd0\xb4\xd0\xb8\x3a\xd0\xa5\xd1\x8a\xd0\xb0\xd0\xb7\xd1\x83\xd0\xb0\xd1\x82\xd0\xbe\xd0\xbd_\xd0\xba\xd1\x83\xd1\x8b\xd1\x81\xd1\x82')
 396+oswiki: renaming 10261 (1,'Википеди:Æххуыс') to (1,'Broken/\xd0\x92\xd0\xb8\xd0\xba\xd0\xb8\xd0\xbf\xd0\xb5\xd0\xb4\xd0\xb8\x3a\xc3\x86\xd1\x85\xd1\x85\xd1\x83\xd1\x8b\xd1\x81')
 397+pswiki: renaming 6272 (1,'ويکيپېډيا:د_نابشپړه_ليکنو_موندنه_او_سمون') to (1,'Broken/id:6272')
 398+rowiki: renaming 54302 (1,'Portal:Economie') to (1,'Broken/Portal\x3aEconomie')
 399+rowiki: renaming 162877 (1,'Format:Revoluţionari_români_la_1848') to (1,'Broken/Format\x3aRevolu\xc5\xa3ionari_rom\xc3\xa2ni_la_1848')
 400+rowiki: renaming 371048 (1,'Categorie:Companii_belgiene') to (1,'Broken/Categorie\x3aCompanii_belgiene')
 401+rowiki: renaming 371052 (1,'Imagine:Banca_de_la_primarie.JPG') to (1,'Broken/Imagine\x3aBanca_de_la_primarie\x2eJPG')
 402+rowiki: renaming 371075 (1,'Imagine:Sibiuphoto.jpg') to (1,'Broken/Imagine\x3aSibiuphoto\x2ejpg')
 403+rowikibooks: renaming 2203 (1,'Carte_de_bucate:Mititei_-_Carul_cu_Bere') to (1,'Broken/Carte_de_bucate\x3aMititei_-_Carul_cu_Bere')
 404+rowikibooks: renaming 2722 (1,'Wikijunior:Alfabetul_animal/Y') to (1,'Broken/Wikijunior\x3aAlfabetul_animal/Y')
 405+rowikibooks: renaming 2820 (1,'Carte_de_bucate:Piftie_de_porc') to (1,'Broken/Carte_de_bucate\x3aPiftie_de_porc')
 406+rowiktionary: renaming 1068 (1,'Wikţionar:Despre') to (1,'Broken/Wik\xc5\xa3ionar\x3aDespre')
 407+rowiktionary: renaming 1094 (1,'Wikţionar:Bun_venit') to (1,'Broken/Wik\xc5\xa3ionar\x3aBun_venit')
 408+ruwikinews: renaming 6476 (0,'ВН:IRC') to (0,'Broken/IRC')
 409+ruwikinews: renaming 6780 (0,'ВН:ВН') to (0,'Broken/ВН')
 410+scnwiktionary: renaming 7318 (1,'Wikizziunariu:Grammàtica') to (1,'Broken/Wikizziunariu\x3aGramm\xc3\xa0tica')
 411+scnwiktionary: renaming 7319 (1,'Wikizziunariu:Binvinutu') to (1,'Broken/Wikizziunariu\x3aBinvinutu')
 412+shwiki: renaming 5574 (0,'Šablon:Babel-2') to (0,'Broken/Babel-2')
 413+shwiki: renaming 13990 (0,'Kategorija:Francuski_fizičari') to (0,'Broken/Francuski_fizičari')
 414+shwiki: renaming 15703 (0,'Šablon:Filozofija-navigacija') to (0,'Broken/Filozofija-navigacija')
 415+shwiki: renaming 35524 (0,'Korisnik:_Pinki') to (0,'Broken/Pinki')
 416+shwiki: renaming 45988 (0,'Kategorija:Psihijatrija') to (0,'Broken/Psihijatrija')
 417+shwiki: renaming 54595 (0,'Šablon:Registarske_oznake_motornih_vozila_evropa') to (0,'Broken/Registarske_oznake_motornih_vozila_evropa')
 418+slwiki: renaming 104081 (1,'Portal:Pomoč') to (1,'Broken/Portal\x3aPomo\xc4\x8d')
 419+slwiki: renaming 119299 (1,'Portal:Novice') to (1,'Broken/Portal\x3aNovice')
 420+slwiki: renaming 165149 (1,'Portal:Vojaštvo') to (1,'Broken/Portal\x3aVoja\xc5\xa1tvo')
 421+slwiki: renaming 218171 (0,'Junior_Car_Club_200 mile_race') to (0,'Broken/Junior_Car_Club_200_mile_race')
 422+sqwiki: renaming 23359 (1,'Category:Istog:Foto') to (1,'Broken/Category\x3aIstog\x3aFoto')
 423+sqwiki: renaming 23977 (1,'Category:Ferizaj:Foto') to (1,'Broken/Category\x3aFerizaj\x3aFoto')
 424+sqwiki: renaming 23979 (1,'Figura:1024_3235323664306561.jpg.jpg') to (1,'Broken/Figura\x3a1024_3235323664306561\x2ejpg\x2ejpg')
 425+sqwiki: renaming 23980 (1,'Category:Coat_of_arms_-_Figura') to (1,'Broken/Category\x3aCoat_of_arms_-_Figura')
 426+srwiki: renaming 23937 (1,'Категорија:Жанр:Поезија') to (1,'Broken/\xd0\x9a\xd0\xb0\xd1\x82\xd0\xb5\xd0\xb3\xd0\xbe\xd1\x80\xd0\xb8\xd1\x98\xd0\xb0\x3a\xd0\x96\xd0\xb0\xd0\xbd\xd1\x80\x3a\xd0\x9f\xd0\xbe\xd0\xb5\xd0\xb7\xd0\xb8\xd1\x98\xd0\xb0')
 427+srwiki: renaming 144847 (1,'Википедија:Уживо/недеља,_4._март_2007.') to (1,'Broken/\xd0\x92\xd0\xb8\xd0\xba\xd0\xb8\xd0\xbf\xd0\xb5\xd0\xb4\xd0\xb8\xd1\x98\xd0\xb0\x3a\xd0\xa3\xd0\xb6\xd0\xb8\xd0\xb2\xd0\xbe/\xd0\xbd\xd0\xb5\xd0\xb4\xd0\xb5\xd1\x99\xd0\xb0\x2c_4\x2e_\xd0\xbc\xd0\xb0\xd1\x80\xd1\x82_2007\x2e')
 428+svwiki: renaming 632200 (1,'Användare:E.G./Mall:Användare_moderat') to (1,'Broken/Anv\xc3\xa4ndare\x3aE\x2eG\x2e/Mall\x3aAnv\xc3\xa4ndare_moderat')
 429+svwiktionary: renaming 21880 (1,'WT:SÄ') to (1,'Broken/WT\x3aS\xc3\x84')
 430+tawiki: renaming 42815 (1,'விக்கிப்பீடியா:பங்களிப்பாளர்_கவனத்திற்கு') to (1,'Broken/id:42815')
 431+tawiki: renaming 43274 (1,'விக்கிப்பீடியா:தொகுத்தல்') to (1,'Broken/id:43274')
 432+tawiki: renaming 44471 (1,'விக்கிப்பீடியா:ஆலமரத்தடி') to (1,'Broken/id:44471')
 433+tawiki: renaming 44804 (1,'விக்கிப்பீடியா:சமுதாய_வலைவாசல்') to (1,'Broken/id:44804')
 434+tawiki: renaming 47869 (1,'வலைவாசல்:கணிதம்') to (1,'Broken/\xe0\xae\xb5\xe0\xae\xb2\xe0\xaf\x88\xe0\xae\xb5\xe0\xae\xbe\xe0\xae\x9a\xe0\xae\xb2\xe0\xaf\x8d\x3a\xe0\xae\x95\xe0\xae\xa3\xe0\xae\xbf\xe0\xae\xa4\xe0\xae\xae\xe0\xaf\x8d')
 435+tewiki: renaming 73590 (1,'వేదిక:భారతదేశం') to (1,'Broken/\xe0\xb0\xb5\xe0\xb1\x87\xe0\xb0\xa6\xe0\xb0\xbf\xe0\xb0\x95\x3a\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb0\xa6\xe0\xb1\x87\xe0\xb0\xb6\xe0\xb0\x82')
 436+thwiki: renaming 27886 (0,'พันศักดิ์​_​วิญญรัตน์​') to (0,'Broken/พันศักดิ์_วิญญรัตน์')
 437+thwiki: renaming 40086 (0,'ค.ศ.​_1150') to (0,'Broken/ค.ศ._1150')
 438+thwiki: renaming 44388 (0,'ค.ศ.​1147') to (0,'Broken/ค.ศ._1147')
 439+thwiki: renaming 108711 (1,'สถานีย่อย:ภาษา/ที่เก็บบทความยอดเยี่ยม') to (1,'Broken/id:108711')
 440+thwiki: renaming 110178 (0,'การปฏิวัติรัสเซีย_ค.ศ.​_1905') to (0,'Broken/การปฏิวัติรัสเซีย_ค.ศ._1905')
 441+thwiki: renaming 127400 (1,'สถานีย่อย:ประวัติศาสตร์/ที่เสนอภาพดีเด่น') to (1,'Broken/id:127400')
 442+thwiki: renaming 128804 (1,'สถานีย่อย:ประวัติศาสตร์') to (1,'Broken/id:128804')
 443+thwiki: renaming 206131 (1,'ไฟล์:อุโบสถวัดหมอนไม้.JPG') to (1,'Broken/id:206131')
 444+thwiki: renaming 244394 (0,'โกเอฟาซี​โอเอตูอิ​โอเอโอตูตองกา') to (0,'Broken/โกเอฟาซี_โอเอตูอิ_โอเอโอตูตองกา')
 445+thwikibooks: renaming 2959 (0,'การปฏิรูปหลักสูตรการศึกษาของประ​เทศนอร์​เวย์ปี_2006') to (0,'Broken/การปฏิรูปหลักสูตรการศึกษาของประ_เทศนอร์_เวย์ปี_2006')
 446+thwiktionary: renaming 10041 (0,'​ខ្មែរ') to (0,'Broken/ខ្មែរ')
 447+trwiki: renaming 7833 (1,'Vikipedi:Engelleme_poliçesi') to (1,'Broken/Vikipedi\x3aEngelleme_poli\xc3\xa7esi')
 448+trwiki: renaming 12384 (1,'Vikipedi:Web_Siteleri') to (1,'Broken/Vikipedi\x3aWeb_Siteleri')
 449+trwiki: renaming 12852 (1,'Wikipedia:Makale_istekleri') to (1,'Broken/Wikipedia\x3aMakale_istekleri')
 450+trwiki: renaming 157957 (1,'Wikipedia:CommonsTicker') to (1,'Broken/Wikipedia\x3aCommonsTicker')
 451+ttwiki: renaming 9411 (0,'Шаблон:PressLink') to (0,'Broken/PressLink')
 452+ttwiki: renaming 11007 (0,'Үрнәк:Тел') to (0,'Broken/Тел')
 453+ttwiki: renaming 13299 (0,'Үрнәк:Мәкалә_төпчеге') to (0,'Broken/Мәкалә_төпчеге')
 454+ttwiki: renaming 13651 (0,'Ярдәм:Үзгәртү') to (0,'Broken/Үзгәртү')
 455+ukwiki: renaming 28045 (1,'Вікіпедія:Перші_в_Гуглі') to (1,'Broken/\xd0\x92\xd1\x96\xd0\xba\xd1\x96\xd0\xbf\xd0\xb5\xd0\xb4\xd1\x96\xd1\x8f\x3a\xd0\x9f\xd0\xb5\xd1\x80\xd1\x88\xd1\x96_\xd0\xb2_\xd0\x93\xd1\x83\xd0\xb3\xd0\xbb\xd1\x96')
 456+ukwiki: renaming 29169 (1,'Вікіпедія:Жодних_ориґінальних_досліджень') to (1,'Broken/id:29169')
 457+ukwiki: renaming 30188 (1,'Вікіпедія:Найактивніші') to (1,'Broken/\xd0\x92\xd1\x96\xd0\xba\xd1\x96\xd0\xbf\xd0\xb5\xd0\xb4\xd1\x96\xd1\x8f\x3a\xd0\x9d\xd0\xb0\xd0\xb9\xd0\xb0\xd0\xba\xd1\x82\xd0\xb8\xd0\xb2\xd0\xbd\xd1\x96\xd1\x88\xd1\x96')
 458+ukwiki: renaming 32887 (1,'Користувач:Ліна') to (1,'Broken/\xd0\x9a\xd0\xbe\xd1\x80\xd0\xb8\xd1\x81\xd1\x82\xd1\x83\xd0\xb2\xd0\xb0\xd1\x87\x3a\xd0\x9b\xd1\x96\xd0\xbd\xd0\xb0')
 459+ukwiki: renaming 32888 (1,'Користувач:Comanche') to (1,'Broken/\xd0\x9a\xd0\xbe\xd1\x80\xd0\xb8\xd1\x81\xd1\x82\xd1\x83\xd0\xb2\xd0\xb0\xd1\x87\x3aComanche')
 460+ukwiki: renaming 33871 (1,'Вікіпедія:Шаблони:Незавершені_статті') to (1,'Broken/id:33871')
 461+ukwiki: renaming 35643 (1,'Вікіпедія:Шаблони/Навігаційні/Персоналії') to (1,'Broken/id:35643')
 462+ukwiki: renaming 37593 (1,'Вікіпедія:Посилання_на_джерела') to (1,'Broken/\xd0\x92\xd1\x96\xd0\xba\xd1\x96\xd0\xbf\xd0\xb5\xd0\xb4\xd1\x96\xd1\x8f\x3a\xd0\x9f\xd0\xbe\xd1\x81\xd0\xb8\xd0\xbb\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8f_\xd0\xbd\xd0\xb0_\xd0\xb4\xd0\xb6\xd0\xb5\xd1\x80\xd0\xb5\xd0\xbb\xd0\xb0')
 463+ukwiki: renaming 37705 (1,'Вікіпедія:Зовнішні_посилання') to (1,'Broken/\xd0\x92\xd1\x96\xd0\xba\xd1\x96\xd0\xbf\xd0\xb5\xd0\xb4\xd1\x96\xd1\x8f\x3a\xd0\x97\xd0\xbe\xd0\xb2\xd0\xbd\xd1\x96\xd1\x88\xd0\xbd\xd1\x96_\xd0\xbf\xd0\xbe\xd1\x81\xd0\xb8\xd0\xbb\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8f')
 464+ukwiki: renaming 40082 (1,'Вікіпедія:Іменування_статей') to (1,'Broken/\xd0\x92\xd1\x96\xd0\xba\xd1\x96\xd0\xbf\xd0\xb5\xd0\xb4\xd1\x96\xd1\x8f\x3a\xd0\x86\xd0\xbc\xd0\xb5\xd0\xbd\xd1\x83\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8f_\xd1\x81\xd1\x82\xd0\xb0\xd1\x82\xd0\xb5\xd0\xb9')
 465+ukwiki: renaming 43937 (1,'Вікіпедія:Жодних_оригінальних_досліджень') to (1,'Broken/id:43937')
 466+ukwiki: renaming 83949 (1,'Вікіпедія:УРЕ/Том_1/АЛЮМІНІЙОВІ_СПЛАВИ_-_АНГЛІЙСЬКА_МОВА') to (1,'Broken/id:83949')
 467+ukwiki: renaming 104038 (1,'Вікіпедія:Проект:Добрі_статті') to (1,'Broken/\xd0\x92\xd1\x96\xd0\xba\xd1\x96\xd0\xbf\xd0\xb5\xd0\xb4\xd1\x96\xd1\x8f\x3a\xd0\x9f\xd1\x80\xd0\xbe\xd0\xb5\xd0\xba\xd1\x82\x3a\xd0\x94\xd0\xbe\xd0\xb1\xd1\x80\xd1\x96_\xd1\x81\xd1\x82\xd0\xb0\xd1\x82\xd1\x82\xd1\x96')
 468+ukwiki: renaming 104928 (1,'Вікіпедія:Дотримання_мовних_стандартів') to (1,'Broken/id:104928')
 469+ukwiki: renaming 122011 (1,'Портал:Біологія') to (1,'Broken/\xd0\x9f\xd0\xbe\xd1\x80\xd1\x82\xd0\xb0\xd0\xbb\x3a\xd0\x91\xd1\x96\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xb3\xd1\x96\xd1\x8f')
 470+ukwiki: renaming 122906 (1,'Вікіпедія:Проект:Цей_день_в_історії/2007/26_лютого') to (1,'Broken/id:122906')
 471+ukwiki: renaming 125456 (1,'Портал:Біологія/Вибрана_стаття/Кандидати') to (1,'Broken/id:125456')
 472+ukwiki: renaming 162730 (1,'Портал:Мистецтво') to (1,'Broken/\xd0\x9f\xd0\xbe\xd1\x80\xd1\x82\xd0\xb0\xd0\xbb\x3a\xd0\x9c\xd0\xb8\xd1\x81\xd1\x82\xd0\xb5\xd1\x86\xd1\x82\xd0\xb2\xd0\xbe')
 473+ukwiki: renaming 170541 (1,'Портал:Румунія_і_Молдавія') to (1,'Broken/\xd0\x9f\xd0\xbe\xd1\x80\xd1\x82\xd0\xb0\xd0\xbb\x3a\xd0\xa0\xd1\x83\xd0\xbc\xd1\x83\xd0\xbd\xd1\x96\xd1\x8f_\xd1\x96_\xd0\x9c\xd0\xbe\xd0\xbb\xd0\xb4\xd0\xb0\xd0\xb2\xd1\x96\xd1\x8f')
 474+ukwiki: renaming 171447 (1,'Портал:Пластунство') to (1,'Broken/\xd0\x9f\xd0\xbe\xd1\x80\xd1\x82\xd0\xb0\xd0\xbb\x3a\xd0\x9f\xd0\xbb\xd0\xb0\xd1\x81\xd1\x82\xd1\x83\xd0\xbd\xd1\x81\xd1\x82\xd0\xb2\xd0\xbe')
 475+ukwiki: renaming 195086 (1,'Портал:Спорт/Головні_футбольні_переходи_міжсезоння_(літо_2007)') to (1,'Broken/id:195086')
 476+ukwiki: renaming 211292 (1,'Портал:Японія') to (1,'Broken/\xd0\x9f\xd0\xbe\xd1\x80\xd1\x82\xd0\xb0\xd0\xbb\x3a\xd0\xaf\xd0\xbf\xd0\xbe\xd0\xbd\xd1\x96\xd1\x8f')
 477+ukwiki: renaming 239140 (1,'Вікіпедія:Проект:Український_футбол') to (1,'Broken/id:239140')
 478+ukwiki: renaming 332806 (1,'Портал:Історія') to (1,'Broken/\xd0\x9f\xd0\xbe\xd1\x80\xd1\x82\xd0\xb0\xd0\xbb\x3a\xd0\x86\xd1\x81\xd1\x82\xd0\xbe\xd1\x80\xd1\x96\xd1\x8f')
 479+ukwiki: renaming 336054 (1,'Обговорення_користувача:Leon_II/ілюстрування_гірництва_(17.12.2006—06.01.2007)') to (1,'Broken/id:336054')
 480+ukwiki: renaming 341563 (1,'Вікіпедія:Проект:Тематичне_поповнення/Індекс:Гірнича_справа') to (1,'Broken/id:341563')
 481+ukwiki: renaming 341564 (1,'Вікіпедія:Шаблони/Джерела') to (1,'Broken/\xd0\x92\xd1\x96\xd0\xba\xd1\x96\xd0\xbf\xd0\xb5\xd0\xb4\xd1\x96\xd1\x8f\x3a\xd0\xa8\xd0\xb0\xd0\xb1\xd0\xbb\xd0\xbe\xd0\xbd\xd0\xb8/\xd0\x94\xd0\xb6\xd0\xb5\xd1\x80\xd0\xb5\xd0\xbb\xd0\xb0')
 482+ukwikiquote: renaming 1488 (0,'Вікіцитати:Портал_спільноти') to (0,'Broken/Портал_спільноти')
 483+ukwikiquote: renaming 1492 (1,'Вікіцитати:Портал_спільноти') to (1,'Broken/\xd0\x92\xd1\x96\xd0\xba\xd1\x96\xd1\x86\xd0\xb8\xd1\x82\xd0\xb0\xd1\x82\xd0\xb8\x3a\xd0\x9f\xd0\xbe\xd1\x80\xd1\x82\xd0\xb0\xd0\xbb_\xd1\x81\xd0\xbf\xd1\x96\xd0\xbb\xd1\x8c\xd0\xbd\xd0\xbe\xd1\x82\xd0\xb8')
 484+ukwikiquote: renaming 2725 (0,'Вікіцитати:Адміністратори') to (0,'Broken/Адміністратори')
 485+ukwikiquote: renaming 3001 (0,'Вікіцитати:Про_Вікіцитати') to (0,'Broken/Про_Вікіцитати')
 486+ukwikiquote: renaming 3032 (0,'Вікіцитати:Поточні_події') to (0,'Broken/Поточні_події')
 487+ukwikiquote: renaming 3062 (0,'Вікіцитати:Запити_до_адміністраторів') to (0,'Broken/Запити_до_адміністраторів')
 488+ukwikiquote: renaming 3513 (0,'Вікіцитати:Бюрократи') to (0,'Broken/Бюрократи')
 489+ukwikiquote: renaming 3580 (0,'Вікіцитати:Кнайпа') to (0,'Broken/Кнайпа')
 490+urwiki: renaming 5982 (1,'معاونت:اردو_فونٹ_انسٹالیشن') to (1,'Broken/\xd9\x85\xd8\xb9\xd8\xa7\xd9\x88\xd9\x86\xd8\xaa\x3a\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x88_\xd9\x81\xd9\x88\xd9\x86\xd9\xb9_\xd8\xa7\xd9\x86\xd8\xb3\xd9\xb9\xd8\xa7\xd9\x84\xdb\x8c\xd8\xb4\xd9\x86')
 491+uzwiki: renaming 13698 (1,'Vikipediya:_Jamoa_Portali') to (1,'Broken/Vikipediya\x3a_Jamoa_Portali')
 492+uzwiki: renaming 13707 (1,'Vikipediya:Forum') to (1,'Broken/Vikipediya\x3aForum')
 493+uzwiki: renaming 13749 (1,'Vikipediya:_Forum') to (1,'Broken/Vikipediya\x3a_Forum')
 494+uzwiki: renaming 18743 (1,'Kategoriya:Ingliz_shoirlari') to (1,'Broken/Kategoriya\x3aIngliz_shoirlari')
 495+viwiki: renaming 13644 (1,'Chủ_đề:Vật_lý') to (1,'Broken/Ch\xe1\xbb\xa7_\xc4\x91\xe1\xbb\x81\x3aV\xe1\xba\xadt_l\xc3\xbd')
 496+viwiki: renaming 15445 (1,'Chủ_đề:Phật_giáo') to (1,'Broken/Ch\xe1\xbb\xa7_\xc4\x91\xe1\xbb\x81\x3aPh\xe1\xba\xadt_gi\xc3\xa1o')
 497+viwiki: renaming 36480 (1,'Chủ_đề:Văn_minh_La_Mã_và_Hy_Lạp_cổ_đại') to (1,'Broken/Ch\xe1\xbb\xa7_\xc4\x91\xe1\xbb\x81\x3aV\xc4\x83n_minh_La_M\xc3\xa3_v\xc3\xa0_Hy_L\xe1\xba\xa1p_c\xe1\xbb\x95_\xc4\x91\xe1\xba\xa1i')
 498+viwiki: renaming 63364 (1,'Chủ_đề:Thiên_văn_học') to (1,'Broken/Ch\xe1\xbb\xa7_\xc4\x91\xe1\xbb\x81\x3aThi\xc3\xaan_v\xc4\x83n_h\xe1\xbb\x8dc')
 499+viwiki: renaming 73833 (1,'Chủ_đề:Triết_học') to (1,'Broken/Ch\xe1\xbb\xa7_\xc4\x91\xe1\xbb\x81\x3aTri\xe1\xba\xbft_h\xe1\xbb\x8dc')
 500+viwiki: renaming 90158 (1,'Chủ_đề:Sinh_học') to (1,'Broken/Ch\xe1\xbb\xa7_\xc4\x91\xe1\xbb\x81\x3aSinh_h\xe1\xbb\x8dc')
 501+viwiki: renaming 90601 (1,'Chủ_đề:Việt_Nam') to (1,'Broken/Ch\xe1\xbb\xa7_\xc4\x91\xe1\xbb\x81\x3aVi\xe1\xbb\x87t_Nam')
 502+viwiki: renaming 100277 (1,'Chủ_đề:Hóa_học') to (1,'Broken/Ch\xe1\xbb\xa7_\xc4\x91\xe1\xbb\x81\x3aH\xc3\xb3a_h\xe1\xbb\x8dc')
 503+viwiki: renaming 102689 (1,'Chủ_đề:Địa_lý') to (1,'Broken/Ch\xe1\xbb\xa7_\xc4\x91\xe1\xbb\x81\x3a\xc4\x90\xe1\xbb\x8ba_l\xc3\xbd')
 504+viwiki: renaming 120020 (1,'Chủ_đề:Hướng_đạo') to (1,'Broken/Ch\xe1\xbb\xa7_\xc4\x91\xe1\xbb\x81\x3aH\xc6\xb0\xe1\xbb\x9bng_\xc4\x91\xe1\xba\xa1o')
 505+viwiki: renaming 127624 (1,'Chủ_đề:Cơ_Đốc_giáo') to (1,'Broken/Ch\xe1\xbb\xa7_\xc4\x91\xe1\xbb\x81\x3aC\xc6\xa1_\xc4\x90\xe1\xbb\x91c_gi\xc3\xa1o')
 506+viwiki: renaming 239639 (1,'Chủ_đề:Nhật_Bản/to_do') to (1,'Broken/Ch\xe1\xbb\xa7_\xc4\x91\xe1\xbb\x81\x3aNh\xe1\xba\xadt_B\xe1\xba\xa3n/to_do')
 507+viwiki: renaming 269260 (1,'Chủ_đề:Computer') to (1,'Broken/Ch\xe1\xbb\xa7_\xc4\x91\xe1\xbb\x81\x3aComputer')
 508+viwiki: renaming 269261 (1,'Chủ_đề:Máy_tính') to (1,'Broken/Ch\xe1\xbb\xa7_\xc4\x91\xe1\xbb\x81\x3aM\xc3\xa1y_t\xc3\xadnh')
 509+viwiki: renaming 272823 (0,'Quyền Anh_tại_Thế_vận_hội_Mùa_hè_2008') to (0,'Broken/Quyền_Anh_tại_Thế_vận_hội_Mùa_hè_2008')
 510+viwiki: renaming 320027 (1,'Wikipedia:Dự_án_Disney') to (1,'Broken/Wikipedia\x3aD\xe1\xbb\xb1_\xc3\xa1n_Disney')
 511+yiwiki: renaming 9103 (1,'באניצער:יואלי') to (1,'Broken/\xd7\x91\xd7\x90\xd7\xa0\xd7\x99\xd7\xa6\xd7\xa2\xd7\xa8\x3a\xd7\x99\xd7\x95\xd7\x90\xd7\x9c\xd7\x99')
 512+yiwiki: renaming 10947 (1,'פארטאל:יידישקייט') to (1,'Broken/\xd7\xa4\xd7\x90\xd7\xa8\xd7\x98\xd7\x90\xd7\x9c\x3a\xd7\x99\xd7\x99\xd7\x93\xd7\x99\xd7\xa9\xd7\xa7\xd7\x99\xd7\x99\xd7\x98')
 513+yiwiki: renaming 15387 (1,'פארטאל:נייעס') to (1,'Broken/\xd7\xa4\xd7\x90\xd7\xa8\xd7\x98\xd7\x90\xd7\x9c\x3a\xd7\xa0\xd7\x99\xd7\x99\xd7\xa2\xd7\xa1')
 514+yiwiki: renaming 16819 (1,'פארטאל:אקטועלע_ארטיקלן') to (1,'Broken/\xd7\xa4\xd7\x90\xd7\xa8\xd7\x98\xd7\x90\xd7\x9c\x3a\xd7\x90\xd7\xa7\xd7\x98\xd7\x95\xd7\xa2\xd7\x9c\xd7\xa2_\xd7\x90\xd7\xa8\xd7\x98\xd7\x99\xd7\xa7\xd7\x9c\xd7\x9f')
 515+yiwiki: renaming 18375 (1,'פארטאל:אקטועלע_געשענישן') to (1,'Broken/\xd7\xa4\xd7\x90\xd7\xa8\xd7\x98\xd7\x90\xd7\x9c\x3a\xd7\x90\xd7\xa7\xd7\x98\xd7\x95\xd7\xa2\xd7\x9c\xd7\xa2_\xd7\x92\xd7\xa2\xd7\xa9\xd7\xa2\xd7\xa0\xd7\x99\xd7\xa9\xd7\x9f')
 516+yiwiki: renaming 18386 (1,'פארטאל:תורה') to (1,'Broken/\xd7\xa4\xd7\x90\xd7\xa8\xd7\x98\xd7\x90\xd7\x9c\x3a\xd7\xaa\xd7\x95\xd7\xa8\xd7\x94')
 517+yiwiki: renaming 18505 (1,'פארטאל:ארטאדאקס_יידנטום') to (1,'Broken/\xd7\xa4\xd7\x90\xd7\xa8\xd7\x98\xd7\x90\xd7\x9c\x3a\xd7\x90\xd7\xa8\xd7\x98\xd7\x90\xd7\x93\xd7\x90\xd7\xa7\xd7\xa1_\xd7\x99\xd7\x99\xd7\x93\xd7\xa0\xd7\x98\xd7\x95\xd7\x9d')
 518+yiwiki: renaming 21236 (1,'פארטאל:אויבערשטע_ראם') to (1,'Broken/\xd7\xa4\xd7\x90\xd7\xa8\xd7\x98\xd7\x90\xd7\x9c\x3a\xd7\x90\xd7\x95\xd7\x99\xd7\x91\xd7\xa2\xd7\xa8\xd7\xa9\xd7\x98\xd7\xa2_\xd7\xa8\xd7\x90\xd7\x9d')
 519+yiwiki: renaming 21276 (1,'פארטאל:באזיס') to (1,'Broken/\xd7\xa4\xd7\x90\xd7\xa8\xd7\x98\xd7\x90\xd7\x9c\x3a\xd7\x91\xd7\x90\xd7\x96\xd7\x99\xd7\xa1')
 520+yiwiki: renaming 21326 (1,'פארטאל:חרדישע_וועלט') to (1,'Broken/\xd7\xa4\xd7\x90\xd7\xa8\xd7\x98\xd7\x90\xd7\x9c\x3a\xd7\x97\xd7\xa8\xd7\x93\xd7\x99\xd7\xa9\xd7\xa2_\xd7\x95\xd7\x95\xd7\xa2\xd7\x9c\xd7\x98')
 521+yiwiki: renaming 23877 (1,'פארטאל:וויסנשאפט') to (1,'Broken/\xd7\xa4\xd7\x90\xd7\xa8\xd7\x98\xd7\x90\xd7\x9c\x3a\xd7\x95\xd7\x95\xd7\x99\xd7\xa1\xd7\xa0\xd7\xa9\xd7\x90\xd7\xa4\xd7\x98')
 522+zhwiki: renaming 190270 (1,'WP:WIN') to (1,'Broken/WP\x3aWIN')
 523+zhwiki: renaming 942007 (1,'User:Kongmengxun') to (1,'Broken/User\x3aKongmengxun')
 524+zhwikibooks: renaming 13305 (0,'WB:TEMP') to (0,'Broken/TEMP')
 525+zhwikibooks: renaming 13306 (0,'WB:TMP') to (0,'Broken/TMP')
 526+zhwikibooks: renaming 13307 (0,'WB:SB') to (0,'Broken/SB')
 527+elwikiversity: renaming 146 (1,'Τμήμα:Αγγλικά') to (1,'Broken/\xce\xa4\xce\xbc\xce\xae\xce\xbc\xce\xb1\x3a\xce\x91\xce\xb3\xce\xb3\xce\xbb\xce\xb9\xce\xba\xce\xac')
 528+crhwiki: renaming 147 (1,'Vikipediya:Imlâ/TÜRKİYEDE_YAŞAĞAN_VİKİPEDİSTLER_İÇÜN') to (1,'Broken/Vikipediya\x3aIml\xc3\xa2/T\xc3\x9cRK\xc4\xb0YEDE_YA\xc5\x9eA\xc4\x9eAN_V\xc4\xb0K\xc4\xb0PED\xc4\xb0STLER_\xc4\xb0\xc3\x87\xc3\x9cN')
 529+sewikimedia: renaming 88 (1,'Projekt:Wikipedia-böcker') to (1,'Broken/Projekt\x3aWikipedia-b\xc3\xb6cker')
 530+sewikimedia: renaming 141 (1,'Projekt:Wikipediabok_1') to (1,'Broken/Projekt\x3aWikipediabok_1')
 531+myvwiki: renaming 100 (1,'Википедиясь:Администраторт') to (1,'Broken/\xd0\x92\xd0\xb8\xd0\xba\xd0\xb8\xd0\xbf\xd0\xb5\xd0\xb4\xd0\xb8\xd1\x8f\xd1\x81\xd1\x8c\x3a\xd0\x90\xd0\xb4\xd0\xbc\xd0\xb8\xd0\xbd\xd0\xb8\xd1\x81\xd1\x82\xd1\x80\xd0\xb0\xd1\x82\xd0\xbe\xd1\x80\xd1\x82')
 532+myvwiki: renaming 101 (1,'Википедиясь:Посольстватнэ/Ru') to (1,'Broken/\xd0\x92\xd0\xb8\xd0\xba\xd0\xb8\xd0\xbf\xd0\xb5\xd0\xb4\xd0\xb8\xd1\x8f\xd1\x81\xd1\x8c\x3a\xd0\x9f\xd0\xbe\xd1\x81\xd0\xbe\xd0\xbb\xd1\x8c\xd1\x81\xd1\x82\xd0\xb2\xd0\xb0\xd1\x82\xd0\xbd\xd1\x8d/Ru')
 533+jawikiversity: renaming 487 (0,'Wikiversity_talk:談話室') to (0,'Broken/談話室')
 534+jawikiversity: renaming 488 (0,'Wikiversity_talk:ウィキバーシティとは何か') to (0,'Broken/ウィキバーシティとは何か')
 535+jawikiversity: renaming 489 (0,'Wikiversity_talk:ウィキバーシティとは何でないか') to (0,'Broken/ウィキバーシティとは何でないか')
 536+jawikiversity: renaming 959 (1,'Topic:日本法') to (1,'Broken/Topic\x3a\xe6\x97\xa5\xe6\x9c\xac\xe6\xb3\x95')
 537+jawikiversity: renaming 961 (1,'Topic:プログラミング言語') to (1,'Broken/Topic\x3a\xe3\x83\x97\xe3\x83\xad\xe3\x82\xb0\xe3\x83\xa9\xe3\x83\x9f\xe3\x83\xb3\xe3\x82\xb0\xe8\xa8\x80\xe8\xaa\x9e')
 538+szlwiki: renaming 1443 (1,'Wikipedyjo:Zasady_šrajbůngu') to (1,'Broken/Wikipedyjo\x3aZasady_\xc5\xa1rajb\xc5\xafngu')
 539+ptwikiversity: renaming 2168 (1,'Wikiversidade:_Mecânica_Newtoniana') to (1,'Broken/Wikiversidade\x3a_Mec\xc3\xa2nica_Newtoniana')
 540+ptwikiversity: renaming 2169 (1,'Wikiversidade:_Humanidades') to (1,'Broken/Wikiversidade\x3a_Humanidades')
 541+ptwikiversity: renaming 2170 (1,'Wikiversidade:_Ciências_Sociais_Aplicadas') to (1,'Broken/Wikiversidade\x3a_Ci\xc3\xaancias_Sociais_Aplicadas')
 542+ptwikiversity: renaming 2171 (1,'Wikiversidade:_Ciências_Exatas_e_Ciências_da_Terra') to (1,'Broken/Wikiversidade\x3a_Ci\xc3\xaancias_Exatas_e_Ci\xc3\xaancias_da_Terra')
 543+ptwikiversity: renaming 2172 (1,'Wikiversidade:_Ciências_Biológicas_e_Ciências_da_Saúde') to (1,'Broken/Wikiversidade\x3a_Ci\xc3\xaancias_Biol\xc3\xb3gicas_e_Ci\xc3\xaancias_da_Sa\xc3\xbade')
 544+strategywiki: renaming 39 (0,'Strategic_Planning:About') to (0,'Broken/About')
 545+strategywiki: renaming 76 (0,'Strategic_Planning:Community_Portal') to (0,'Broken/Community_Portal')
 546+strategywiki: renaming 203 (0,'Strategic_Planning:Users') to (0,'Broken/Users')
 547+strategywiki: renaming 207 (1,'Strategic_Planning:Users') to (1,'Broken/Strategic_Planning\x3aUsers')
 548+trwikinews: renaming 141 (0,'Vikihaber:Köy_çeşmesi') to (0,'Broken/Köy_çeşmesi')
 549+trwikinews: renaming 142 (0,'Vikihaber:Köy_çeşmesi/Başlık') to (0,'Broken/Köy_çeşmesi/Başlık')
 550+trwikinews: renaming 143 (0,'Vikihaber:Köy_çeşmesi_(ilginize)') to (0,'Broken/Köy_çeşmesi_(ilginize)')
 551+trwikinews: renaming 144 (0,'Vikihaber:Köy_çeşmesi_(ilginize)/Başlık') to (0,'Broken/Köy_çeşmesi_(ilginize)/Başlık')
 552+trwikinews: renaming 145 (0,'Vikihaber:Köy_çeşmesi_(istekler)') to (0,'Broken/Köy_çeşmesi_(istekler)')
 553+trwikinews: renaming 146 (0,'Vikihaber:Köy_çeşmesi_(istekler)/Başlık') to (0,'Broken/Köy_çeşmesi_(istekler)/Başlık')
 554+trwikinews: renaming 147 (0,'Vikihaber:Köy_çeşmesi_(tümü)') to (0,'Broken/Köy_çeşmesi_(tümü)')
 555+trwikinews: renaming 148 (0,'Vikihaber:Köy_çeşmesi_(yönetmelik)') to (0,'Broken/Köy_çeşmesi_(yönetmelik)')
 556+trwikinews: renaming 149 (0,'Vikihaber:Köy_çeşmesi_(yönetmelik)/Başlık') to (0,'Broken/Köy_çeşmesi_(yönetmelik)/Başlık')
 557+trwikinews: renaming 781 (1,'Portal:Ekonomi_ve_iş') to (1,'Broken/Portal\x3aEkonomi_ve_i\xc5\x9f')
 558+trwikinews: renaming 954 (1,'Portal:Ekonomi') to (1,'Broken/Portal\x3aEkonomi')
 559+
Index: branches/wmf/1.16wmf4/maintenance/fixCleanupTitles/revertCleanupTitles.php
@@ -0,0 +1,67 @@
 2+<?php
 3+
 4+require( '../commandLine.inc' );
 5+
 6+$lines = file( $args[0] );
 7+if ( !$lines ) {
 8+ echo "Unable to open file {$args[0]}\n";
 9+ exit( 1 );
 10+}
 11+
 12+$lines = array_map( 'trim', $lines );
 13+$opsByWiki = array();
 14+
 15+foreach ( $lines as $line ) {
 16+ if ( !preg_match( '/
 17+ ^
 18+ (\w+): \s*
 19+ renaming \s
 20+ (\d+) \s
 21+ \((\d+),\'(.*?)\'\)
 22+ /x',
 23+ $line, $m ) )
 24+ {
 25+ continue;
 26+ }
 27+
 28+ list( $whole, $wiki, $pageId, $ns, $dbk ) = $m;
 29+
 30+ $opsByWiki[$wiki][] = array(
 31+ 'id' => $pageId,
 32+ 'ns' => $ns,
 33+ 'dbk' => $dbk );
 34+}
 35+
 36+foreach ( $opsByWiki as $wiki => $ops ) {
 37+ $lb = wfGetLB( $wiki );
 38+ $db = $lb->getConnection( DB_MASTER, array(), $wiki );
 39+
 40+ foreach ( $ops as $op ) {
 41+ $msg = "{$op['id']} -> {$op['ns']}:{$op['dbk']}";
 42+
 43+ # Sanity check
 44+ $row = $db->selectRow( 'page', array( 'page_namespace', 'page_title' ),
 45+ array( 'page_id' => $op['id'] ), __METHOD__ );
 46+ if ( !$row ) {
 47+ echo "$wiki: missing: $msg\n";
 48+ continue;
 49+ }
 50+
 51+ if ( !preg_match( '/^Broken\//', $row->page_title ) ) {
 52+ echo "$wiki: conflict: $msg\n";
 53+ continue;
 54+ }
 55+
 56+ $db->update( 'page',
 57+ /* SET */ array(
 58+ 'page_namespace' => $op['ns'],
 59+ 'page_title' => $op['dbk'] ),
 60+ /* WHERE */ array(
 61+ 'page_id' => $op['id'] ),
 62+ __METHOD__ );
 63+ echo "$wiki: updated: $msg\n";
 64+ }
 65+ $lb->reuseConnection( $db );
 66+}
 67+
 68+
Index: branches/wmf/1.16wmf4/maintenance/namespaceDupesWT.php
@@ -0,0 +1,308 @@
 2+<?php
 3+/**
 4+ * Check for articles to fix after adding/deleting namespaces
 5+ *
 6+ * Copyright (C) 2005-2007 Brion Vibber <brion@pobox.com>
 7+ * http://www.mediawiki.org/
 8+ *
 9+ * This program is free software; you can redistribute it and/or modify
 10+ * it under the terms of the GNU General Public License as published by
 11+ * the Free Software Foundation; either version 2 of the License, or
 12+ * (at your option) any later version.
 13+ *
 14+ * This program is distributed in the hope that it will be useful,
 15+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 16+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 17+ * GNU General Public License for more details.
 18+ *
 19+ * You should have received a copy of the GNU General Public License along
 20+ * with this program; if not, write to the Free Software Foundation, Inc.,
 21+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 22+ * http://www.gnu.org/copyleft/gpl.html
 23+ *
 24+ * @ingroup Maintenance
 25+ */
 26+
 27+require_once( dirname(__FILE__) . '/Maintenance.php' );
 28+
 29+class NamespaceConflictChecker extends Maintenance {
 30+ public function __construct() {
 31+ parent::__construct();
 32+ $this->mDescription = "";
 33+ $this->addOption( 'fix', 'Attempt to automatically fix errors' );
 34+ $this->addOption( 'suffix', "Dupes will be renamed with correct namespace with\n" .
 35+ "\t\t<text> Appended after the article name", false, true );
 36+ $this->addOption( 'prefix', "Do an explicit check for the given title prefix\n" .
 37+ "\t\tappended after the article name", false, true );
 38+ }
 39+
 40+ public function execute() {
 41+ global $wgTitle;
 42+
 43+ $this->db = wfGetDB( DB_MASTER );
 44+ $wgTitle = Title::newFromText( 'Namespace title conflict cleanup script' );
 45+
 46+ $fix = $this->hasOption( 'fix' );
 47+ $suffix = $this->getOption( 'suffix', '' );
 48+ $prefix = $this->getOption( 'prefix', '' );
 49+ $key = intval( $this->getOption( 'key', 0 ) );
 50+
 51+ if( $prefix ) {
 52+ $retval = $this->checkPrefix( $key, $prefix, $fix, $suffix );
 53+ } else {
 54+ $retval = $this->checkAll( $fix, $suffix );
 55+ }
 56+
 57+ if( $retval ) {
 58+ $this->output( "\nLooks good!\n" );
 59+ } else {
 60+ $this->output( "\nOh noeees\n" );
 61+ }
 62+ }
 63+
 64+ /**
 65+ * @todo Document
 66+ * @param $fix bool Whether or not to fix broken entries
 67+ * @param $suffix String Suffix to append to renamed articles
 68+ */
 69+ private function checkAll( $fix, $suffix = '' ) {
 70+ global $wgContLang, $wgNamespaceAliases, $wgCanonicalNamespaceNames;
 71+ global $wgCapitalLinks;
 72+
 73+ $spaces = array();
 74+
 75+ // List interwikis first, so they'll be overridden
 76+ // by any conflicting local namespaces.
 77+ foreach( $this->getInterwikiList() as $prefix ) {
 78+ $name = $wgContLang->ucfirst( $prefix );
 79+ $spaces[$name] = 0;
 80+ }
 81+
 82+ // Now pull in all canonical and alias namespaces...
 83+ foreach( $wgCanonicalNamespaceNames as $ns => $name ) {
 84+ // This includes $wgExtraNamespaces
 85+ if( $name !== '' ) {
 86+ $spaces[$name] = $ns;
 87+ }
 88+ }
 89+ foreach( $wgContLang->getNamespaces() as $ns => $name ) {
 90+ if( $name !== '' ) {
 91+ $spaces[$name] = $ns;
 92+ }
 93+ }
 94+ foreach( $wgNamespaceAliases as $name => $ns ) {
 95+ $spaces[$name] = $ns;
 96+ }
 97+ foreach( $wgContLang->getNamespaceAliases() as $name => $ns ) {
 98+ $spaces[$name] = $ns;
 99+ }
 100+
 101+ // We'll need to check for lowercase keys as well,
 102+ // since we're doing case-sensitive searches in the db.
 103+ foreach( $spaces as $name => $ns ) {
 104+ $moreNames = array();
 105+ $moreNames[] = $wgContLang->uc( $name );
 106+ $moreNames[] = $wgContLang->ucfirst( $wgContLang->lc( $name ) );
 107+ $moreNames[] = $wgContLang->ucwords( $name );
 108+ $moreNames[] = $wgContLang->ucwords( $wgContLang->lc( $name ) );
 109+ $moreNames[] = $wgContLang->ucwordbreaks( $name );
 110+ $moreNames[] = $wgContLang->ucwordbreaks( $wgContLang->lc( $name ) );
 111+ if( !$wgCapitalLinks ) {
 112+ foreach( $moreNames as $altName ) {
 113+ $moreNames[] = $wgContLang->lcfirst( $altName );
 114+ }
 115+ $moreNames[] = $wgContLang->lcfirst( $name );
 116+ }
 117+ foreach( array_unique( $moreNames ) as $altName ) {
 118+ if( $altName !== $name ) {
 119+ $spaces[$altName] = $ns;
 120+ }
 121+ }
 122+ }
 123+
 124+ ksort( $spaces );
 125+ asort( $spaces );
 126+
 127+ $ok = true;
 128+ foreach( $spaces as $name => $ns ) {
 129+ $ok = $this->checkNamespace( $ns, $name, $fix, $suffix ) && $ok;
 130+ }
 131+ return $ok;
 132+ }
 133+
 134+ /**
 135+ * Get the interwiki list
 136+ * @todo Needs to respect interwiki cache!
 137+ * @return array
 138+ */
 139+ private function getInterwikiList() {
 140+ $result = $this->db->select( 'interwiki', array( 'iw_prefix' ) );
 141+ $prefixes = array();
 142+ foreach( $result as $row ) {
 143+ $prefixes[] = $row->iw_prefix;
 144+ }
 145+ $this->db->freeResult( $result );
 146+ return $prefixes;
 147+ }
 148+
 149+ /**
 150+ * @todo Document
 151+ * @param $ns int A namespace id
 152+ * @param $name String
 153+ * @param $fix bool Whether to fix broken entries
 154+ * @param $suffix String Suffix to append to renamed articles
 155+ */
 156+ private function checkNamespace( $ns, $name, $fix, $suffix = '' ) {
 157+ $conflicts = $this->getConflicts( $ns, $name );
 158+ $count = count( $conflicts );
 159+ if( $count == 0 ) {
 160+ return true;
 161+ }
 162+
 163+ $ok = true;
 164+ foreach( $conflicts as $row ) {
 165+ $resolvable = $this->reportConflict( $row, $suffix );
 166+ $ok = $ok && $resolvable;
 167+ if( $fix && ( $resolvable || $suffix != '' ) ) {
 168+ $ok = $this->resolveConflict( $row, $resolvable, $suffix ) && $ok;
 169+ }
 170+ }
 171+ return $ok;
 172+ }
 173+
 174+ /**
 175+ * @todo: do this for reals
 176+ */
 177+ private function checkPrefix( $key, $prefix, $fix, $suffix = '' ) {
 178+ $this->output( "Checking prefix \"$prefix\" vs namespace $key\n" );
 179+ return $this->checkNamespace( $key, $prefix, $fix, $suffix );
 180+ }
 181+
 182+ /**
 183+ * Find pages in mainspace that have a prefix of the new namespace
 184+ * so we know titles that will need migrating
 185+ * @param $ns int Namespace id (id for new namespace?)
 186+ * @param $name String Prefix that is being made a namespace
 187+ */
 188+ private function getConflicts( $ns, $name ) {
 189+ $page = 'page';
 190+ $table = $this->db->tableName( $page );
 191+
 192+ $prefix = $this->db->strencode( $name );
 193+ $encNamespace = $this->db->addQuotes( $ns );
 194+
 195+ $titleSql = "TRIM(LEADING '$prefix:' FROM {$page}_title)";
 196+ if( $ns == 0 ) {
 197+ // An interwiki; try an alternate encoding with '-' for ':'
 198+ $titleSql = $this->db->buildConcat( array( "'$prefix-'", $titleSql ) );
 199+ }
 200+
 201+ $sql = "SELECT {$page}_id AS id,
 202+ {$page}_title AS oldtitle,
 203+ $encNamespace + {$page}_namespace AS namespace,
 204+ $titleSql AS title,
 205+ {$page}_namespace AS oldnamespace
 206+ FROM {$table}
 207+ WHERE ( {$page}_namespace=0 OR {$page}_namespace=1 )
 208+ AND {$page}_title " . $this->db->buildLike( $name . ':', $this->db->anyString() );
 209+
 210+ $result = $this->db->query( $sql, __METHOD__ );
 211+
 212+ $set = array();
 213+ foreach( $result as $row ) {
 214+ $set[] = $row;
 215+ }
 216+ $this->db->freeResult( $result );
 217+
 218+ return $set;
 219+ }
 220+
 221+ /**
 222+ * Report any conflicts we find
 223+ */
 224+ private function reportConflict( $row, $suffix ) {
 225+ $newTitle = Title::makeTitleSafe( $row->namespace, $row->title );
 226+ if( is_null($newTitle) || !$newTitle->canExist() ) {
 227+ // Title is also an illegal title...
 228+ // For the moment we'll let these slide to cleanupTitles or whoever.
 229+ $this->output( sprintf( "... %d (%d,\"%s\")\n",
 230+ $row->id,
 231+ $row->oldnamespace,
 232+ $row->oldtitle ) );
 233+ $this->output( "... *** cannot resolve automatically; illegal title ***\n" );
 234+ return false;
 235+ }
 236+
 237+ $this->output( sprintf( "... %d (%d,\"%s\") -> (%d,\"%s\") [[%s]]\n",
 238+ $row->id,
 239+ $row->oldnamespace,
 240+ $row->oldtitle,
 241+ $newTitle->getNamespace(),
 242+ $newTitle->getDBkey(),
 243+ $newTitle->getPrefixedText() ) );
 244+
 245+ $id = $newTitle->getArticleId();
 246+ if( $id ) {
 247+ $this->output( "... *** cannot resolve automatically; page exists with ID $id ***\n" );
 248+ return false;
 249+ } else {
 250+ return true;
 251+ }
 252+ }
 253+
 254+ /**
 255+ * Resolve any conflicts
 256+ * @param $row Row from the page table to fix
 257+ * @param $resolveable bool
 258+ * @param $suffix String Suffix to append to the fixed page
 259+ */
 260+ private function resolveConflict( $row, $resolvable, $suffix ) {
 261+ if( !$resolvable ) {
 262+ $this->output( "... *** old title {$row->title}\n" );
 263+ while( true ) {
 264+ $row->title .= $suffix;
 265+ $this->output( "... *** new title {$row->title}\n" );
 266+ $title = Title::makeTitleSafe( $row->namespace, $row->title );
 267+ if ( ! $title ) {
 268+ $this->output( "... !!! invalid title\n" );
 269+ return false;
 270+ }
 271+ if ( $id = $title->getArticleId() ) {
 272+ $this->output( "... *** page exists with ID $id ***\n" );
 273+ } else {
 274+ break;
 275+ }
 276+ }
 277+ $this->output( "... *** using suffixed form [[" . $title->getPrefixedText() . "]] ***\n" );
 278+ }
 279+ $this->resolveConflictOn( $row, 'page', 'page' );
 280+ return true;
 281+ }
 282+
 283+ /**
 284+ * Resolve a given conflict
 285+ * @param $row Row from the old broken entry
 286+ * @param $table String Table to update
 287+ * @param $prefix String Prefix for column name, like page or ar
 288+ */
 289+ private function resolveConflictOn( $row, $table, $prefix ) {
 290+ $this->output( "... resolving on $table... " );
 291+ $newTitle = Title::makeTitleSafe( $row->namespace, $row->title );
 292+ $this->db->update( $table,
 293+ array(
 294+ "{$prefix}_namespace" => $newTitle->getNamespace(),
 295+ "{$prefix}_title" => $newTitle->getDBkey(),
 296+ ),
 297+ array(
 298+ // "{$prefix}_namespace" => 0,
 299+ // "{$prefix}_title" => $row->oldtitle,
 300+ "{$prefix}_id" => $row->id,
 301+ ),
 302+ __METHOD__ );
 303+ $this->output( "ok.\n" );
 304+ return true;
 305+ }
 306+}
 307+
 308+$maintClass = "NamespaceConflictChecker";
 309+require_once( DO_MAINTENANCE );
Index: branches/wmf/1.16wmf4/maintenance/cleanupTitles64966.php
@@ -0,0 +1,154 @@
 2+<?php
 3+/*
 4+ * Script to clean up broken, unparseable titles.
 5+ *
 6+ * Usage: php cleanupTitles.php [--fix]
 7+ * Options:
 8+ * --fix Actually clean up titles; otherwise just checks for them
 9+ *
 10+ * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
 11+ * http://www.mediawiki.org/
 12+ *
 13+ * This program is free software; you can redistribute it and/or modify
 14+ * it under the terms of the GNU General Public License as published by
 15+ * the Free Software Foundation; either version 2 of the License, or
 16+ * (at your option) any later version.
 17+ *
 18+ * This program is distributed in the hope that it will be useful,
 19+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 20+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 21+ * GNU General Public License for more details.
 22+ *
 23+ * You should have received a copy of the GNU General Public License along
 24+ * with this program; if not, write to the Free Software Foundation, Inc.,
 25+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 26+ * http://www.gnu.org/copyleft/gpl.html
 27+ *
 28+ * @author Brion Vibber <brion at pobox.com>
 29+ * @ingroup Maintenance
 30+ */
 31+
 32+require_once( dirname(__FILE__) . '/cleanupTable.inc' );
 33+
 34+class TitleCleanup extends TableCleanup {
 35+ public function __construct() {
 36+ parent::__construct();
 37+ $this->mDescription = "Script to clean up broken, unparseable titles";
 38+ }
 39+
 40+ protected function processRow( $row ) {
 41+ global $wgContLang;
 42+ $display = Title::makeName( $row->page_namespace, $row->page_title );
 43+ $verified = $wgContLang->normalize( $display );
 44+ $title = Title::newFromText( $verified );
 45+
 46+ if( !is_null( $title )
 47+ && $title->canExist()
 48+ && $title->getNamespace() == $row->page_namespace
 49+ && $title->getDBkey() === $row->page_title )
 50+ {
 51+ return $this->progress( 0 ); // all is fine
 52+ }
 53+
 54+ if( $row->page_namespace == NS_FILE && $this->fileExists( $row->page_title ) ) {
 55+ $this->output( "file $row->page_title needs cleanup, please run cleanupImages.php.\n" );
 56+ return $this->progress( 0 );
 57+ } elseif( is_null( $title ) ) {
 58+ $this->output( "page $row->page_id ($display) is illegal.\n" );
 59+ $this->moveIllegalPage( $row );
 60+ return $this->progress( 1 );
 61+ } else {
 62+ $this->output( "page $row->page_id ($display) doesn't match self.\n" );
 63+ $this->moveInconsistentPage( $row, $title );
 64+ return $this->progress( 1 );
 65+ }
 66+ }
 67+
 68+ protected function fileExists( $name ) {
 69+ // XXX: Doesn't actually check for file existence, just presence of image record.
 70+ // This is reasonable, since cleanupImages.php only iterates over the image table.
 71+ $dbr = wfGetDB( DB_SLAVE );
 72+ $row = $dbr->selectRow( 'image', array( 'img_name' ), array( 'img_name' => $name ), __METHOD__ );
 73+ return $row !== false;
 74+ }
 75+
 76+ protected function moveIllegalPage( $row ) {
 77+ $legal = 'A-Za-z0-9_/\\\\-';
 78+ $legalized = preg_replace_callback( "!([^$legal])!",
 79+ array( &$this, 'hexChar' ),
 80+ $row->page_title );
 81+ if( $legalized == '.' ) $legalized = '(dot)';
 82+ if( $legalized == '_' ) $legalized = '(space)';
 83+ $legalized = 'Broken/' . $legalized;
 84+
 85+ $title = Title::newFromText( $legalized );
 86+ if( is_null( $title ) ) {
 87+ $clean = 'Broken/id:' . $row->page_id;
 88+ $this->output( "Couldn't legalize; form '$legalized' still invalid; using '$clean'\n" );
 89+ $title = Title::newFromText( $clean );
 90+ } elseif( $title->exists() ) {
 91+ $clean = 'Broken/id:' . $row->page_id;
 92+ $this->output( "Legalized for '$legalized' exists; using '$clean'\n" );
 93+ $title = Title::newFromText( $clean );
 94+ }
 95+
 96+ $dest = $title->getDBkey();
 97+ if( $this->dryrun ) {
 98+ $this->output( "DRY RUN: would rename $row->page_id ($row->page_namespace,'$row->page_title') to ($row->page_namespace,'$dest')\n" );
 99+ } else {
 100+ $this->output( "renaming $row->page_id ($row->page_namespace,'$row->page_title') to ($row->page_namespace,'$dest')\n" );
 101+ $dbw = wfGetDB( DB_MASTER );
 102+ $dbw->update( 'page',
 103+ array( 'page_title' => $dest ),
 104+ array( 'page_id' => $row->page_id ),
 105+ __METHOD__ );
 106+ }
 107+ }
 108+
 109+ protected function moveInconsistentPage( $row, $title ) {
 110+ if( $title->exists() || $title->getInterwiki() || !$title->canExist() ) {
 111+ if( $title->getInterwiki() || !$title->canExist() ) {
 112+ $prior = $title->getPrefixedDbKey();
 113+ } else {
 114+ $prior = $title->getDBkey();
 115+ }
 116+
 117+ # Old cleanupTitles could move articles there. See bug 23147.
 118+ $ns = $row->page_namespace;
 119+ if ( $ns < 0) $ns = 0;
 120+
 121+ $clean = 'Broken/' . $prior;
 122+ $verified = Title::makeTitleSafe( $ns, $clean );
 123+ if( $verified->exists() ) {
 124+ $blah = "Broken/id:" . $row->page_id;
 125+ $this->output( "Couldn't legalize; form '$clean' exists; using '$blah'\n" );
 126+ $verified = Title::makeTitleSafe( $ns, $blah );
 127+ }
 128+ $title = $verified;
 129+ }
 130+ if( is_null( $title ) ) {
 131+ $this->error( "Something awry; empty title.", true );
 132+ }
 133+ $ns = $title->getNamespace();
 134+ $dest = $title->getDBkey();
 135+
 136+ if( $this->dryrun ) {
 137+ $this->output( "DRY RUN: would rename $row->page_id ($row->page_namespace,'$row->page_title') to ($ns,'$dest')\n" );
 138+ } else {
 139+ $this->output( "renaming $row->page_id ($row->page_namespace,'$row->page_title') to ($ns,'$dest')\n" );
 140+ $dbw = wfGetDB( DB_MASTER );
 141+ $dbw->update( 'page',
 142+ array(
 143+ 'page_namespace' => $ns,
 144+ 'page_title' => $dest
 145+ ),
 146+ array( 'page_id' => $row->page_id ),
 147+ __METHOD__ );
 148+ $linkCache = LinkCache::singleton();
 149+ $linkCache->clear();
 150+ }
 151+ }
 152+}
 153+
 154+$maintClass = "TitleCleanup";
 155+require_once( DO_MAINTENANCE );
Index: branches/wmf/1.16wmf4/maintenance/wmf/checkTranscacheEmpty.php
@@ -0,0 +1,18 @@
 2+<?php
 3+require_once( dirname(__FILE__).'/../commandLine.inc' );
 4+
 5+$bad = 0;
 6+$good = 0;
 7+foreach ( $wgLocalDatabases as $wiki ) {
 8+ $lb = wfGetLB( $wiki );
 9+ $db = $lb->getConnection( DB_SLAVE, array(), $wiki );
 10+ $notEmpty = $db->selectField( 'transcache', '1', false, 'checkTranscacheEmpty.php' );
 11+ if ( $notEmpty ) {
 12+ echo "$wiki\n";
 13+ $bad++;
 14+ } else {
 15+ $good++;
 16+ }
 17+}
 18+echo "bad = $bad, good = $good\n";
 19+
Index: branches/wmf/1.16wmf4/maintenance/rL.php
@@ -0,0 +1,286 @@
 2+<?php
 3+/**
 4+ * This program is free software; you can redistribute it and/or modify
 5+ * it under the terms of the GNU General Public License as published by
 6+ * the Free Software Foundation; either version 2 of the License, or
 7+ * (at your option) any later version.
 8+ *
 9+ * This program is distributed in the hope that it will be useful,
 10+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 11+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 12+ * GNU General Public License for more details.
 13+ *
 14+ * You should have received a copy of the GNU General Public License along
 15+ * with this program; if not, write to the Free Software Foundation, Inc.,
 16+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 17+ * http://www.gnu.org/copyleft/gpl.html
 18+ *
 19+ * @ingroup Maintenance
 20+ */
 21+
 22+require_once( dirname(__FILE__) . '/Maintenance.php' );
 23+
 24+class RefreshLinks extends Maintenance {
 25+ public function __construct() {
 26+ parent::__construct();
 27+ $this->mDescription = "Refresh link tables";
 28+ $this->addOption( 'dfn-only', 'Delete links from nonexistent articles only' );
 29+ $this->addOption( 'new-only', 'Only affect articles with just a single edit' );
 30+ $this->addOption( 'redirects-only', 'Only fix redirects, not all links' );
 31+ $this->addOption( 'old-redirects-only', 'Only fix redirects with no redirect table entry' );
 32+ $this->addOption( 'm', 'Maximum replication lag', false, true );
 33+ $this->addOption( 'e', 'Last page id to refresh', false, true );
 34+ $this->addArg( 'start', 'Page_id to start from, default 1', false );
 35+ $this->setBatchSize( 100 );
 36+ }
 37+
 38+ public function execute() {
 39+ global $wgMemc;
 40+ global $wgCacheEpoch;
 41+ $wgCacheEpoch = '20100423090000';
 42+ if( !$this->hasOption( 'dfn-only' ) ) {
 43+ $start = $this->getArg( 0, 1 );
 44+ $new = $this->getOption( 'new-only', false );
 45+ $max = $this->getOption( 'm', false );
 46+ $end = $this->getOption( 'e', 0 );
 47+ $redir = $this->getOption( 'redirects-only', false );
 48+ $oldRedir = $this->getOption( 'old-redirects-only', false );
 49+ $this->doRefreshLinks( $start, $new, $max, $end, $redir, $oldRedir );
 50+ }
 51+ $this->deleteLinksFromNonexistent( $max, $this->mBatchSize );
 52+ }
 53+
 54+ /**
 55+ * Do the actual link refreshing.
 56+ * @param $start int Page_id to start from
 57+ * @param $newOnly bool Only do pages with 1 edit
 58+ * @param $maxLag int Max DB replication lag
 59+ * @param $end int Page_id to stop at
 60+ * @param $redirectsOnly bool Only fix redirects
 61+ * @param $oldRedirectsOnly bool Only fix redirects without redirect entries
 62+ */
 63+ private function doRefreshLinks( $start, $newOnly = false, $maxLag = false,
 64+ $end = 0, $redirectsOnly = false, $oldRedirectsOnly = false ) {
 65+ global $wgUser, $wgParser, $wgUseTidy;
 66+
 67+ $reportingInterval = 100;
 68+ $dbr = wfGetDB( DB_SLAVE );
 69+ $start = intval( $start );
 70+
 71+ # Don't generate TeX PNGs (lack of a sensible current directory causes errors anyway)
 72+ $wgUser->setOption('math', MW_MATH_SOURCE);
 73+
 74+ # Don't generate extension images (e.g. Timeline)
 75+ #if( method_exists( $wgParser, "clearTagHooks" ) ) {
 76+ # $wgParser->clearTagHooks();
 77+ #}
 78+
 79+ # Don't use HTML tidy
 80+ $wgUseTidy = false;
 81+
 82+ $what = $redirectsOnly ? "redirects" : "links";
 83+
 84+ if( $oldRedirectsOnly ) {
 85+ # This entire code path is cut-and-pasted from below. Hurrah.
 86+ $res = $dbr->query(
 87+ "SELECT page_id ".
 88+ "FROM page ".
 89+ "LEFT JOIN redirect ON page_id=rd_from ".
 90+ "WHERE page_is_redirect=1 AND rd_from IS NULL AND ".
 91+ ($end == 0 ? "page_id >= $start"
 92+ : "page_id BETWEEN $start AND $end"),
 93+ __METHOD__
 94+ );
 95+ $num = $dbr->numRows( $res );
 96+ $this->output( "Refreshing $num old redirects from $start...\n" );
 97+
 98+ foreach( $res as $row ) {
 99+ if ( !( ++$i % $reportingInterval ) ) {
 100+ $this->output( "$i\n" );
 101+ wfWaitForSlaves( $maxLag );
 102+ }
 103+ $this->fixRedirect( $row->page_id );
 104+ }
 105+ } elseif( $newOnly ) {
 106+ $this->output( "Refreshing $what from " );
 107+ $res = $dbr->select( 'page',
 108+ array( 'page_id' ),
 109+ array(
 110+ 'page_is_new' => 1,
 111+ "page_id >= $start" ),
 112+ __METHOD__
 113+ );
 114+ $num = $dbr->numRows( $res );
 115+ $this->output( "$num new articles...\n" );
 116+
 117+ $i = 0;
 118+ foreach ( $res as $row ) {
 119+ if ( !( ++$i % $reportingInterval ) ) {
 120+ $this->output( "$i\n" );
 121+ wfWaitForSlaves( $maxLag );
 122+ }
 123+ if($redirectsOnly)
 124+ $this->fixRedirect( $row->page_id );
 125+ else
 126+ $this->fixLinksFromArticle( $row->page_id );
 127+ }
 128+ } else {
 129+ if ( !$end ) {
 130+ $maxPage = $dbr->selectField( 'page', 'max(page_id)', false );
 131+ $maxRD = $dbr->selectField( 'redirect', 'max(rd_from)', false );
 132+ $end = max( $maxPage, $maxRD );
 133+ }
 134+ $this->output( "Refreshing redirects table.\n" );
 135+ $this->output( "Starting from page_id $start of $end.\n" );
 136+
 137+ for ($id = $start; $id <= $end; $id++) {
 138+
 139+ if ( !($id % $reportingInterval) ) {
 140+ $this->output( "$id\n" );
 141+ wfWaitForSlaves( $maxLag );
 142+ }
 143+ $this->fixRedirect( $id );
 144+ }
 145+
 146+ if(!$redirectsOnly) {
 147+ $this->output( "Refreshing links table.\n" );
 148+ $this->output( "Starting from page_id $start of $end.\n" );
 149+
 150+ for ($id = $start; $id <= $end; $id++) {
 151+
 152+ if ( !($id % $reportingInterval) ) {
 153+ $this->output( "$id\n" );
 154+ wfWaitForSlaves( $maxLag );
 155+ }
 156+ $this->fixLinksFromArticle( $id );
 157+ }
 158+ }
 159+ }
 160+ }
 161+
 162+ /**
 163+ * Update the redirect entry for a given page
 164+ * @param $id int The page_id of the redirect
 165+ */
 166+ private function fixRedirect( $id ){
 167+ global $wgTitle, $wgArticle;
 168+
 169+ $wgTitle = Title::newFromID( $id );
 170+ $dbw = wfGetDB( DB_MASTER );
 171+
 172+ if ( is_null( $wgTitle ) ) {
 173+ // This page doesn't exist (any more)
 174+ // Delete any redirect table entry for it
 175+ $dbw->delete( 'redirect', array( 'rd_from' => $id ),
 176+ __METHOD__ );
 177+ return;
 178+ }
 179+ $wgArticle = new Article($wgTitle);
 180+
 181+ $rt = $wgArticle->followRedirect();
 182+
 183+ if($rt == false || !is_object($rt)) {
 184+ // $wgTitle is not a redirect
 185+ // Delete any redirect table entry for it
 186+ $dbw->delete( 'redirect', array( 'rd_from' => $id ),
 187+ __METHOD__ );
 188+ } else {
 189+ $wgArticle->updateRedirectOn($dbw,$rt);
 190+ }
 191+ }
 192+
 193+ /**
 194+ * Run LinksUpdate for all links on a given page_id
 195+ * @param $id int The page_id
 196+ */
 197+ private function fixLinksFromArticle( $id ) {
 198+ global $wgTitle, $wgParser;
 199+
 200+ $wgTitle = Title::newFromID( $id );
 201+ $dbw = wfGetDB( DB_MASTER );
 202+
 203+ $linkCache =& LinkCache::singleton();
 204+ $linkCache->clear();
 205+
 206+ if ( is_null( $wgTitle ) ) {
 207+ return;
 208+ }
 209+ $dbw->begin();
 210+
 211+ $revision = Revision::newFromTitle( $wgTitle );
 212+ if ( !$revision ) {
 213+ return;
 214+ }
 215+
 216+ $options = new ParserOptions;
 217+ $parserOutput = $wgParser->parse( $revision->getText(), $wgTitle, $options, true, true, $revision->getId() );
 218+ $update = new LinksUpdate( $wgTitle, $parserOutput, false );
 219+ $update->doUpdate();
 220+ $dbw->commit();
 221+ }
 222+
 223+ /*
 224+ * Removes non-existing links from pages from pagelinks, imagelinks,
 225+ * categorylinks, templatelinks and externallinks tables.
 226+ *
 227+ * @param $maxLag
 228+ * @param $batchSize The size of deletion batches
 229+ *
 230+ * @author Merlijn van Deen <valhallasw@arctus.nl>
 231+ */
 232+ private function deleteLinksFromNonexistent( $maxLag = 0, $batchSize = 100 ) {
 233+ wfWaitForSlaves( $maxLag );
 234+
 235+ $dbw = wfGetDB( DB_MASTER );
 236+
 237+ $lb = wfGetLBFactory()->newMainLB();
 238+ $dbr = $lb->getConnection( DB_SLAVE );
 239+ $dbr->bufferResults( false );
 240+
 241+ $linksTables = array( // table name => page_id field
 242+ 'pagelinks' => 'pl_from',
 243+ 'imagelinks' => 'il_from',
 244+ 'categorylinks' => 'cl_from',
 245+ 'templatelinks' => 'tl_from',
 246+ 'externallinks' => 'el_from',
 247+ );
 248+
 249+ foreach ( $linksTables as $table => $field ) {
 250+ $this->output( "Retrieving illegal entries from $table... " );
 251+
 252+ // SELECT DISTINCT( $field ) FROM $table LEFT JOIN page ON $field=page_id WHERE page_id IS NULL;
 253+ $results = $dbr->select( array( $table, 'page' ),
 254+ $field,
 255+ array('page_id' => null ),
 256+ __METHOD__,
 257+ 'DISTINCT',
 258+ array( 'page' => array( 'LEFT JOIN', "$field=page_id"))
 259+ );
 260+
 261+ $counter = 0;
 262+ $list = array();
 263+ $this->output( "0.." );
 264+
 265+ foreach( $results as $row ) {
 266+ $counter++;
 267+ $list[] = $row->$field;
 268+ if ( ( $counter % $batchSize ) == 0 ) {
 269+ wfWaitForSlaves(5);
 270+ $dbw->delete( $table, array( $field => $list ), __METHOD__ );
 271+
 272+ $this->output( $counter . ".." );
 273+ $list = array();
 274+ }
 275+ }
 276+ $this->output( $counter );
 277+ if (count($list) > 0) {
 278+ $dbw->delete( $table, array( $field => $list ), __METHOD__ );
 279+ }
 280+ $this->output( "\n" );
 281+ }
 282+ $lb->closeAll();
 283+ }
 284+}
 285+
 286+$maintClass = 'RefreshLinks';
 287+require_once( DO_MAINTENANCE );
Index: branches/wmf/1.16wmf4/maintenance/unsuppressCrossWiki.php
@@ -0,0 +1,46 @@
 2+<?php
 3+
 4+require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 5+
 6+class unsuppressCrossWiki extends Maintenance {
 7+ public function __construct() {
 8+ parent::__construct();
 9+ $this->mDescription = "Show number of jobs waiting in master database";
 10+ }
 11+
 12+ public function execute() {
 13+ $userName = 'The Thing That Should Not Be'; // <- targer username
 14+
 15+ $user = new CentralAuthUser( $userName );
 16+ if ( !$user->exists() ) {
 17+ echo "Cannot unsuppress non-existent user {$userName}!\n";
 18+ exit( 0 );
 19+ }
 20+ $userName = $user->getName(); // sanity
 21+ $wikis = $user->listAttached(); // wikis with attached accounts
 22+ foreach ( $wikis as $wiki ) {
 23+ $lb = wfGetLB( $wiki );
 24+ $dbw = $lb->getConnection( DB_MASTER, array(), $wiki );
 25+ # Get local ID like $user->localUserData( $wiki ) does
 26+ $localUserId = $dbw->selectField( 'user', 'user_id',
 27+ array( 'user_name' => $userName ), __METHOD__ );
 28+
 29+ $delUserBit = Revision::DELETED_USER;
 30+ $hiddenCount = $dbw->selectField( 'revision', 'COUNT(*)',
 31+ array( 'rev_user' => $localUserId, "rev_deleted & $delUserBit != 0" ), __METHOD__ );
 32+ echo "$hiddenCount edits have the username hidden on \"$wiki\"\n";
 33+ # Unsuppress username on edits
 34+ if ( $hiddenCount > 0 ) {
 35+ echo "Unsuppressed edits of attached account (local id $localUserId) on \"$wiki\"...";
 36+ IPBlockForm::unsuppressUserName( $userName, $localUserId, $dbw );
 37+ echo "done!\n\n";
 38+ }
 39+ $lb->reuseConnection( $dbw ); // not really needed
 40+ # Don't lag too bad
 41+ wfWaitForSlaves( 5 );
 42+ }
 43+ }
 44+}
 45+
 46+$maintClass = "unsuppressCrossWiki";
 47+require_once( DO_MAINTENANCE );
Index: branches/wmf/1.16wmf4/maintenance/purgeStaleMemcachedText.php
@@ -0,0 +1,34 @@
 2+<?php
 3+
 4+require_once( dirname( __FILE__ ) . '/commandLine.inc' );
 5+
 6+function purgeStaleMemcachedText() {
 7+ global $wgMemc, $wgDBname;
 8+ $db = wfGetDB( DB_MASTER );
 9+ $maxTextId = $db->selectField( 'text', 'max(old_id)' );
 10+ $latestReplicatedTextId = $db->selectField( array( 'recentchanges', 'revision' ), 'rev_text_id',
 11+ array( 'rev_id = rc_this_oldid', "rc_timestamp < '20101225183000'"), 'purgeStaleMemcachedText',
 12+ array( 'ORDER BY' => 'rc_timestamp DESC' ) );
 13+ $latestReplicatedTextId -= 100; # A bit of paranoia
 14+
 15+ echo "Going to purge text entries from $latestReplicatedTextId to $maxTextId in $wgDBname\n";
 16+
 17+ for ( $i = $latestReplicatedTextId; $i < $maxTextId; $i++ ) {
 18+ $key = wfMemcKey( 'revisiontext', 'textid', $i );
 19+
 20+ while (1) {
 21+ if (! $wgMemc->delete( $key ) ) {
 22+ echo "Memcache delete for $key returned false\n";
 23+ }
 24+ if ( $wgMemc->get( $key ) ) {
 25+ echo "There's still content in $key!\n";
 26+ } else {
 27+ break;
 28+ }
 29+ }
 30+
 31+ }
 32+}
 33+
 34+purgeStaleMemcachedText();
 35+
Index: branches/wmf/1.16wmf4/maintenance/listDatabases.php
@@ -0,0 +1,5 @@
 2+<? include("commandLine.inc");
 3+
 4+foreach ($wgLocalDatabases as $db) {
 5+print "$db\n";
 6+}
Index: branches/wmf/1.16wmf4/maintenance/x-mctest.php
@@ -0,0 +1,84 @@
 2+<?php
 3+/**
 4+ * This script makes several 'set', 'incr' and 'get' requests on every
 5+ * memcached server and shows a report.
 6+ *
 7+ * This program is free software; you can redistribute it and/or modify
 8+ * it under the terms of the GNU General Public License as published by
 9+ * the Free Software Foundation; either version 2 of the License, or
 10+ * (at your option) any later version.
 11+ *
 12+ * This program is distributed in the hope that it will be useful,
 13+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 14+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 15+ * GNU General Public License for more details.
 16+ *
 17+ * You should have received a copy of the GNU General Public License along
 18+ * with this program; if not, write to the Free Software Foundation, Inc.,
 19+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 20+ * http://www.gnu.org/copyleft/gpl.html
 21+ *
 22+ * @ingroup Maintenance
 23+ */
 24+
 25+require_once( dirname(__FILE__) . '/Maintenance.php' );
 26+
 27+class mcTest extends Maintenance {
 28+ public function __construct() {
 29+ parent::__construct();
 30+ $this->mDescription = "Makes several 'set', 'incr' and 'get' requests on every"
 31+ . " memcached server and shows a report";
 32+ $this->addOption( 'i', 'Number of iterations', false, true );
 33+ $this->addArg( 'server', 'Memcached server to test', false );
 34+ }
 35+
 36+ public function execute() {
 37+ global $wgMemCachedServers;
 38+
 39+ $iterations = $this->getOption( 'i', 100 );
 40+ if( $this->hasArg() )
 41+ $wgMemCachedServers = array( $this->getArg() );
 42+
 43+ foreach ( $wgMemCachedServers as $server ) {
 44+ $this->output( $server . " " );
 45+ $mcc = new MemCachedClientforWiki( array('persistant' => true) );
 46+ $mcc->set_debug(true);
 47+ $mcc->set_servers( array( $server ) );
 48+ $set = 0;
 49+ $incr = 0;
 50+ $get = 0;
 51+ $time_start = $this->microtime_float();
 52+ for ( $i=1; $i<=$iterations; $i++ ) {
 53+ if ( !is_null( $mcc->set( "test$i", $i ) ) ) {
 54+ $set++;
 55+ }
 56+ }
 57+ for ( $i=1; $i<=$iterations; $i++ ) {
 58+ if ( !is_null( $mcc->incr( "test$i", $i ) ) ) {
 59+ $incr++;
 60+ }
 61+ }
 62+ for ( $i=1; $i<=$iterations; $i++ ) {
 63+ $value = $mcc->get( "test$i" );
 64+ if ( $value == $i*2 ) {
 65+ $get++;
 66+ }
 67+ }
 68+ $exectime = $this->microtime_float() - $time_start;
 69+
 70+ $this->output( "set: $set incr: $incr get: $get time: $exectime\n" );
 71+ }
 72+ }
 73+
 74+ /**
 75+ * Return microtime() as a float
 76+ * @return float
 77+ */
 78+ private function microtime_float() {
 79+ list($usec, $sec) = explode(" ", microtime());
 80+ return ((float)$usec + (float)$sec);
 81+ }
 82+}
 83+
 84+$maintClass = "mcTest";
 85+require_once( DO_MAINTENANCE );

Follow-up revisions

RevisionCommit summaryAuthorDate
r816991.17wmf1: Merge r80908 from 1.16wmf4 to prevent SVN from deleting all these f...catrope08:23, 8 February 2011

Status & tagging log