From b9b85843572bf283f48285001e276ba7e61b63f6 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Sun, 22 Feb 2009 13:37:51 +0100 Subject: updated to MediaWiki 1.14.0 --- maintenance/updateRestrictions.php | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'maintenance/updateRestrictions.php') diff --git a/maintenance/updateRestrictions.php b/maintenance/updateRestrictions.php index c2d256e3..f0567b5b 100644 --- a/maintenance/updateRestrictions.php +++ b/maintenance/updateRestrictions.php @@ -25,6 +25,11 @@ function migrate_page_restrictions( $db ) { $start = $db->selectField( 'page', 'MIN(page_id)', false, __FUNCTION__ ); $end = $db->selectField( 'page', 'MAX(page_id)', false, __FUNCTION__ ); + + if( !$start ) { + die("Nothing to do.\n"); + } + # Do remaining chunk $end += BATCH_SIZE - 1; $blockStart = $start; @@ -32,18 +37,19 @@ function migrate_page_restrictions( $db ) { $encodedExpiry = 'infinity'; while ( $blockEnd <= $end ) { echo "...doing page_id from $blockStart to $blockEnd\n"; - $cond = "page_id BETWEEN $blockStart AND $blockEnd AND page_restrictions !='' AND page_restrictions !='edit=:move='"; + $cond = "page_id BETWEEN $blockStart AND $blockEnd AND page_restrictions !=''"; $res = $db->select( 'page', array('page_id', 'page_restrictions'), $cond, __FUNCTION__ ); $batch = array(); while ( $row = $db->fetchObject( $res ) ) { $oldRestrictions = array(); foreach( explode( ':', trim( $row->page_restrictions ) ) as $restrict ) { $temp = explode( '=', trim( $restrict ) ); - if(count($temp) == 1) { + // Make sure we are not settings restrictions to "" + if( count($temp) == 1 && $temp[0] ) { // old old format should be treated as edit/move restriction $oldRestrictions["edit"] = trim( $temp[0] ); $oldRestrictions["move"] = trim( $temp[0] ); - } else { + } else if( $temp[1] ) { $oldRestrictions[$temp[0]] = trim( $temp[1] ); } } @@ -61,12 +67,21 @@ function migrate_page_restrictions( $db ) { # We use insert() and not replace() as Article.php replaces # page_restrictions with '' when protected in the restrictions table if ( count( $batch ) ) { - $db->insert( 'page_restrictions', $batch, __FUNCTION__, array( 'IGNORE' ) ); + $ok = $db->deadlockLoop( + array( $db, 'insert' ), + 'page_restrictions', $batch, __FUNCTION__, array( 'IGNORE' ) ); + if( !$ok ) { + throw new MWException( "Deadlock loop failed wtf :(" ); + } } $blockStart += BATCH_SIZE - 1; $blockEnd += BATCH_SIZE - 1; wfWaitForSlaves( 5 ); } + echo "...removing dead rows from page_restrictions\n"; + // Kill any broken rows from previous imports + $db->delete( 'page_restrictions', array( 'pr_level' => '' ) ); + echo "...Done!\n"; } -- cgit v1.2.3-54-g00ecf