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 ); |