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

Reply via email to