https://www.mediawiki.org/wiki/Special:Code/MediaWiki/115024
Revision: 115024 Author: aaron Date: 2012-04-24 19:48:45 +0000 (Tue, 24 Apr 2012) Log Message: ----------- Factored out MWWikiversions.php code and made refreshWikiversionsCDB use it. Modified Paths: -------------- trunk/tools/mwmultiversion/multiversion/refreshWikiversionsCDB Added Paths: ----------- trunk/tools/mwmultiversion/multiversion/MWWikiversions.php Added: trunk/tools/mwmultiversion/multiversion/MWWikiversions.php =================================================================== --- trunk/tools/mwmultiversion/multiversion/MWWikiversions.php (rev 0) +++ trunk/tools/mwmultiversion/multiversion/MWWikiversions.php 2012-04-24 19:48:45 UTC (rev 115024) @@ -0,0 +1,94 @@ + +<?php +require_once( dirname( __FILE__ ) . '/defines.php' ); +/** + * Helper class for reading the wikiversions.dat file + */ +class MWWikiversions { + /** + * @param $srcPath string Path to wikiversions.dat + * @return Array List of wiki version rows + */ + public static function getWikiVerionRows( $srcPath ) { + $data = file_get_contents( $srcPath ); + if ( $data === false ) { + die( "Unable to read $srcPath.\n" ); + } + // Read the lines of the dat file into an array... + $verList = explode( "\n", $data ); + if ( !count( $verList ) ) { + die( "Empty table in $srcPath.\n" ); + } + // Convert each raw line into a row array... + $result = array(); + foreach ( $verList as $lineNo => $line ) { + $row = self::rowFromLine( $line, $lineNo ); + if ( is_array( $row ) ) { + $result[] = $row; + } + } + return $result; + } + + /** + * Get a wiki version row from a line of wikiversions.dat + * + * @param $line string + * @param $lineNo integer Line # from wikiversions.dat + * @return Array|null (dbname, version, extended version, comment) + */ + public static function rowFromLine( $line, $lineNo ) { + // Strip comments and ignore comment lines... + $len = strcspn( $line, '#' ); + if ( $len === 0 ) { + return null; // comment line or empty line + } + $row = substr( $line, 0, $len ); + $comment = substr( $line, $len + 1 ); // exclude the '#' + + // Get the column values for this row... + $items = explode( ' ', trim( $row ) ); // cleanup w/s + if ( count( $items ) === 3 ) { + list( $dbName, $version, $extVersion ) = $items; + } elseif ( count( $items ) === 2 ) { + list( $dbName, $version ) = $items; + $extVersion = '*'; // none + } else { + die( "Invalid row on line $lineNo ('$line').\n" ); + } + + // Sanity check version directory + if ( !is_dir( MULTIVER_COMMON_HOME . '/' . $version ) ) { + die( "Invalid version dir on line $lineNo ('$line').\n" ); + } + + return array( $dbName, $version, $extVersion, $comment ); + } + + /** + * @param $row Array Wiki version row + * @return string Line for wikiversions.dat + */ + public static function lineFromRow( array $row ) { + list( $dbName, $version, $extVersion, $comment ) = $row; + $line = "$dbName $version $extVersion"; + if ( $comment !== '' ) { + $line .= " #$comment"; + } + return $line; + } + + /** + * Get an array of DB names from a .dblist file. + * + * @param $srcPath string + * @return Array (DB name => position in list) + */ + public static function getDbList( $srcPath ) { + $data = file_get_contents( $srcPath ); + if ( $data === false ) { + die( "Unable to read $srcPath.\n" ); + } + return array_flip( array_filter( explode( "\n", $data ) ) ); + } +} Modified: trunk/tools/mwmultiversion/multiversion/refreshWikiversionsCDB =================================================================== --- trunk/tools/mwmultiversion/multiversion/refreshWikiversionsCDB 2012-04-24 19:18:09 UTC (rev 115023) +++ trunk/tools/mwmultiversion/multiversion/refreshWikiversionsCDB 2012-04-24 19:48:45 UTC (rev 115024) @@ -2,6 +2,7 @@ <?php error_reporting( E_ALL ); require_once( dirname( __FILE__ ) . '/defines.php' ); +require_once( dirname( __FILE__ ) . '/MWWikiversions.php' ); /* * Populate wikiversions.cdb file using all the items in wikiversions.dat * @@ -13,7 +14,7 @@ $finalDBPath = MULTIVER_CDB_DIR_HOME . '/wikiversions.cdb'; // Get the array of sanitized wikiversion rows... - $rows = getWikiVerionRows( $srcPath ); + $rows = MWWikiversions::getWikiVerionRows( $srcPath ); # Build the new database at the temp location... @unlink( $tmpDBPath ); // clear any old temp file for sanity @@ -22,7 +23,7 @@ die( "Unable to create wikiversions.cdb.tmp.\n" ); } foreach ( $rows as $row ) { - list( $dbName, $version, $extVersion ) = $row; + list( $dbName, $version, $extVersion, $comment ) = $row; dba_insert( "ver:$dbName", $version, $db ); dba_insert( "ext:$dbName", $extVersion, $db ); } @@ -42,45 +43,4 @@ print "wikiversions.cdb successfully built.\n"; } -function getWikiVerionRows( $srcPath ) { - $data = file_get_contents( $srcPath ); - if ( $data === false ) { - die( "Unable to read wikiversions.dat.\n" ); - } - // Read the lines of the dat file into an array... - $verList = array_filter( explode( "\n", $data ) ); - if ( !count( $verList ) ) { - die( "Empty table in wikiversions.dat.\n" ); - } - - $result = array(); - foreach ( $verList as $lineNo => $line ) { - // Strip comments and ignore comment lines... - $len = strcspn( $line, '#' ); - if ( $len === 0 ) { - continue; // comment line - } - $row = substr( $line, 0, $len ); - - // Get the column values for this row... - $items = explode( ' ', trim( $row ) ); // cleanup w/s - if ( count( $items ) === 3 ) { - list( $dbName, $version, $extVersion ) = $items; - } elseif ( count( $items ) === 2 ) { - list( $dbName, $version ) = $items; - $extVersion = ''; // none - } else { - die( "Invalid row on line $lineNo ('$line').\n" ); - } - - // Sanity check version directory - if ( !is_dir( MULTIVER_COMMON_HOME . '/' . $version ) ) { - die( "Invalid version dir on line $lineNo ('$line').\n" ); - } - - $result[] = array( $dbName, $version, $extVersion ); - } - return $result; -} - refreshWikiversionsCDB(); _______________________________________________ MediaWiki-CVS mailing list MediaWiki-CVS@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs