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
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs