Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Wikipedia: Mediawiki-CVS
SVN: [114978] trunk/tools/mwmultiversion/multiversion/ refreshWikiversionsCDB
 

Index | Next | Previous | View Flat


aaron at svn

Apr 19, 2012, 2:14 PM


Views: 69
Permalink
SVN: [114978] trunk/tools/mwmultiversion/multiversion/ refreshWikiversionsCDB

https://www.mediawiki.org/wiki/Special:Code/MediaWiki/114978

Revision: 114978
Author: aaron
Date: 2012-04-19 21:14:57 +0000 (Thu, 19 Apr 2012)
Log Message:
-----------
Bug 36079 - "refreshWikiversionsCDB should fail if invalid version is specified in wikiversions.dat". Also added support for comments using #.

Modified Paths:
--------------
trunk/tools/mwmultiversion/multiversion/refreshWikiversionsCDB

Modified: trunk/tools/mwmultiversion/multiversion/refreshWikiversionsCDB
===================================================================
--- trunk/tools/mwmultiversion/multiversion/refreshWikiversionsCDB 2012-04-19 21:11:12 UTC (rev 114977)
+++ trunk/tools/mwmultiversion/multiversion/refreshWikiversionsCDB 2012-04-19 21:14:57 UTC (rev 114978)
@@ -8,38 +8,32 @@
* @return void
*/
function refreshWikiversionsCDB() {
- $path = MULTIVER_CDB_DIR_HOME . '/wikiversions.dat';
- $verList = array_filter( explode( "\n", file_get_contents( $path ) ) );
- if ( !count( $verList ) ) {
- die( "Unable to read wikiversions.dat.\n" );
- }
-
+ $srcPath = MULTIVER_CDB_DIR_HOME . '/wikiversions.dat';
$tmpDBPath = MULTIVER_CDB_DIR_HOME . '/wikiversions.cdb.tmp';
$finalDBPath = MULTIVER_CDB_DIR_HOME . '/wikiversions.cdb';

- # Build new database at temp location...
+ // Get the array of sanitized wikiversion rows...
+ $rows = getWikiVerionRows( $srcPath );
+
+ # Build the new database at the temp location...
+ @unlink( $tmpDBPath ); // clear any old temp file for sanity
$db = dba_open( $tmpDBPath, "n", "cdb_make" );
if ( !$db ) {
die( "Unable to create wikiversions.cdb.tmp.\n" );
}
- foreach ( $verList as $row ) {
- $items = explode( ' ', $row );
- $dbName = $items[0];
- $version = $items[1];
- $extVersion = isset( $items[2] ) ? $items[2] : '';
-
+ foreach ( $rows as $row ) {
+ list( $dbName, $version, $extVersion ) = $row;
dba_insert( "ver:$dbName", $version, $db );
dba_insert( "ext:$dbName", $extVersion, $db );
}
dba_close( $db );

- # Sanity...
- if ( !file_exists( $tmpDBPath ) ) {
+ # Sanity check the temp file...
+ if ( !is_file( $tmpDBPath ) ) {
die( "Unable to create wikiversions.cdb.tmp.\n" );
}

- # Move to final location only when finished...
- @unlink( $finalDBPath );
+ # Move temp file to the final location only when finished...
if ( !rename( $tmpDBPath, $finalDBPath ) ) {
die( "Unable to move wikiversions.cdb.tmp to wikiversions.cdb.\n" );
}
@@ -48,4 +42,45 @@
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 [at] lists
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Subject User Time
SVN: [114978] trunk/tools/mwmultiversion/multiversion/ refreshWikiversionsCDB aaron at svn Apr 19, 2012, 2:14 PM

  Index | Next | Previous | View Flat
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.