2004-02-23 07:44:11 +00:00
|
|
|
<?php
|
2004-09-03 20:33:01 +00:00
|
|
|
/**
|
WARNING: HUGE COMMIT
Doxygen documentation update:
* Changed alls @addtogroup to @ingroup. @addtogroup adds the comment to the group description, but doesn't add the file, class, function, ... to the group like @ingroup does. See for example http://svn.wikimedia.org/doc/group__SpecialPage.html where it's impossible to see related files, classes, ... that should belong to that group.
* Added @file to file description, it seems that it should be explicitely decalred for file descriptions, otherwise doxygen will think that the comment document the first class, variabled, function, ... that is in that file.
* Removed some empty comments
* Removed some ?>
Added following groups:
* ExternalStorage
* JobQueue
* MaintenanceLanguage
One more thing: there are still a lot of warnings when generating the doc.
2008-05-20 17:13:28 +00:00
|
|
|
* @file
|
2004-09-03 20:33:01 +00:00
|
|
|
* @todo document
|
WARNING: HUGE COMMIT
Doxygen documentation update:
* Changed alls @addtogroup to @ingroup. @addtogroup adds the comment to the group description, but doesn't add the file, class, function, ... to the group like @ingroup does. See for example http://svn.wikimedia.org/doc/group__SpecialPage.html where it's impossible to see related files, classes, ... that should belong to that group.
* Added @file to file description, it seems that it should be explicitely decalred for file descriptions, otherwise doxygen will think that the comment document the first class, variabled, function, ... that is in that file.
* Removed some empty comments
* Removed some ?>
Added following groups:
* ExternalStorage
* JobQueue
* MaintenanceLanguage
One more thing: there are still a lot of warnings when generating the doc.
2008-05-20 17:13:28 +00:00
|
|
|
* @ingroup Maintenance
|
|
|
|
|
* @defgroup Maintenance Maintenance
|
2004-09-03 20:33:01 +00:00
|
|
|
*/
|
2004-06-15 15:18:50 +00:00
|
|
|
|
2006-05-28 21:25:03 +00:00
|
|
|
$wgRequestTime = microtime(true);
|
2006-04-04 05:45:38 +00:00
|
|
|
|
2004-09-03 20:33:01 +00:00
|
|
|
/** */
|
2004-06-15 15:18:50 +00:00
|
|
|
# Abort if called from a web server
|
|
|
|
|
if ( isset( $_SERVER ) && array_key_exists( 'REQUEST_METHOD', $_SERVER ) ) {
|
|
|
|
|
print "This script must be run from the command line\n";
|
|
|
|
|
exit();
|
|
|
|
|
}
|
|
|
|
|
|
2006-10-15 20:12:08 +00:00
|
|
|
if( version_compare( PHP_VERSION, '5.0.0' ) < 0 ) {
|
|
|
|
|
print "Sorry! This version of MediaWiki requires PHP 5; you are running " .
|
|
|
|
|
PHP_VERSION . ".\n\n" .
|
|
|
|
|
"If you are sure you already have PHP 5 installed, it may be " .
|
|
|
|
|
"installed\n" .
|
|
|
|
|
"in a different path from PHP 4. Check with your system administrator.\n";
|
|
|
|
|
die( -1 );
|
|
|
|
|
}
|
|
|
|
|
|
2005-12-03 19:25:39 +00:00
|
|
|
define('MEDIAWIKI',true);
|
2004-08-11 02:08:47 +00:00
|
|
|
|
2004-06-15 15:18:50 +00:00
|
|
|
# Process command line arguments
|
|
|
|
|
# $options becomes an array with keys set to the option names
|
|
|
|
|
# $optionsWithArgs is an array of GNU-style options that take an argument. The arguments are returned
|
|
|
|
|
# in the values of $options.
|
2005-06-19 01:05:56 +00:00
|
|
|
# $args becomes a zero-based array containing the non-option arguments
|
2004-06-15 15:18:50 +00:00
|
|
|
|
|
|
|
|
if ( !isset( $optionsWithArgs ) ) {
|
|
|
|
|
$optionsWithArgs = array();
|
|
|
|
|
}
|
2006-01-17 09:01:26 +00:00
|
|
|
$optionsWithArgs[] = 'conf'; # For specifying the location of LocalSettings.php
|
2007-06-08 18:12:07 +00:00
|
|
|
$optionsWithArgs[] = 'aconf'; # As above for AdminSettings.php
|
2008-06-04 01:46:53 +00:00
|
|
|
$optionsWithArgs[] = 'wiki'; # For specifying the wiki ID
|
2004-06-15 15:18:50 +00:00
|
|
|
|
|
|
|
|
$self = array_shift( $argv );
|
2008-05-02 06:09:58 +00:00
|
|
|
$IP = ( getenv('MW_INSTALL_PATH') !== false
|
|
|
|
|
? getenv('MW_INSTALL_PATH')
|
|
|
|
|
: realpath( dirname( __FILE__ ) . '/..' ) );
|
2006-02-28 05:24:52 +00:00
|
|
|
#chdir( $IP );
|
2006-07-26 07:15:39 +00:00
|
|
|
require_once( "$IP/StartProfiler.php" );
|
2004-06-15 15:18:50 +00:00
|
|
|
|
|
|
|
|
$options = array();
|
|
|
|
|
$args = array();
|
|
|
|
|
|
2005-12-03 19:25:39 +00:00
|
|
|
|
|
|
|
|
# Parse arguments
|
2004-06-15 15:18:50 +00:00
|
|
|
for( $arg = reset( $argv ); $arg !== false; $arg = next( $argv ) ) {
|
2006-04-16 06:29:44 +00:00
|
|
|
if ( $arg == '--' ) {
|
|
|
|
|
# End of options, remainder should be considered arguments
|
|
|
|
|
$arg = next( $argv );
|
|
|
|
|
while( $arg !== false ) {
|
|
|
|
|
$args[] = $arg;
|
|
|
|
|
$arg = next( $argv );
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
} elseif ( substr( $arg, 0, 2 ) == '--' ) {
|
2004-06-15 15:18:50 +00:00
|
|
|
# Long options
|
|
|
|
|
$option = substr( $arg, 2 );
|
|
|
|
|
if ( in_array( $option, $optionsWithArgs ) ) {
|
|
|
|
|
$param = next( $argv );
|
|
|
|
|
if ( $param === false ) {
|
2008-05-10 16:25:49 +00:00
|
|
|
echo "$arg needs a value after it\n";
|
2006-01-14 02:49:43 +00:00
|
|
|
die( -1 );
|
2004-06-15 15:18:50 +00:00
|
|
|
}
|
|
|
|
|
$options[$option] = $param;
|
|
|
|
|
} else {
|
2004-10-18 08:10:22 +00:00
|
|
|
$bits = explode( '=', $option, 2 );
|
|
|
|
|
if( count( $bits ) > 1 ) {
|
|
|
|
|
$option = $bits[0];
|
|
|
|
|
$param = $bits[1];
|
|
|
|
|
} else {
|
|
|
|
|
$param = 1;
|
|
|
|
|
}
|
|
|
|
|
$options[$option] = $param;
|
2004-06-15 15:18:50 +00:00
|
|
|
}
|
2006-01-12 08:40:13 +00:00
|
|
|
} elseif ( substr( $arg, 0, 1 ) == '-' ) {
|
2004-06-15 15:18:50 +00:00
|
|
|
# Short options
|
|
|
|
|
for ( $p=1; $p<strlen( $arg ); $p++ ) {
|
|
|
|
|
$option = $arg{$p};
|
|
|
|
|
if ( in_array( $option, $optionsWithArgs ) ) {
|
|
|
|
|
$param = next( $argv );
|
|
|
|
|
if ( $param === false ) {
|
2008-05-10 16:25:49 +00:00
|
|
|
echo "$arg needs a value after it\n";
|
2006-01-14 02:49:43 +00:00
|
|
|
die( -1 );
|
2004-06-15 15:18:50 +00:00
|
|
|
}
|
|
|
|
|
$options[$option] = $param;
|
|
|
|
|
} else {
|
|
|
|
|
$options[$option] = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$args[] = $arg;
|
2004-06-12 12:56:00 +00:00
|
|
|
}
|
2004-06-15 15:18:50 +00:00
|
|
|
}
|
2004-03-23 10:28:28 +00:00
|
|
|
|
2005-12-03 19:25:39 +00:00
|
|
|
|
2004-06-15 15:18:50 +00:00
|
|
|
# General initialisation
|
|
|
|
|
|
|
|
|
|
$wgCommandLineMode = true;
|
|
|
|
|
# Turn off output buffering if it's on
|
|
|
|
|
@ob_end_flush();
|
2005-11-10 08:06:04 +00:00
|
|
|
$sep = PATH_SEPARATOR;
|
2004-03-23 10:28:28 +00:00
|
|
|
|
2005-06-26 03:21:13 +00:00
|
|
|
if (!isset( $wgUseNormalUser ) ) {
|
|
|
|
|
$wgUseNormalUser = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( file_exists( '/home/wikipedia/common/langlist' ) ) {
|
2004-06-15 15:18:50 +00:00
|
|
|
$wgWikiFarm = true;
|
2008-05-12 22:01:44 +00:00
|
|
|
#$cluster = trim( file_get_contents( '/etc/cluster' ) );
|
|
|
|
|
$cluster = 'pmtpa';
|
2006-02-28 05:24:52 +00:00
|
|
|
require_once( "$IP/includes/SiteConfiguration.php" );
|
2004-08-14 06:10:56 +00:00
|
|
|
|
2006-02-28 05:24:52 +00:00
|
|
|
# Get $wgConf
|
|
|
|
|
require( "$IP/wgConf.php" );
|
2004-08-14 06:10:56 +00:00
|
|
|
|
2005-06-24 21:42:00 +00:00
|
|
|
if ( empty( $wgNoDBParam ) ) {
|
|
|
|
|
# Check if we were passed a db name
|
2008-06-04 01:46:53 +00:00
|
|
|
if ( isset( $options['wiki'] ) ) {
|
|
|
|
|
$db = $options['wiki'];
|
|
|
|
|
} else {
|
|
|
|
|
$db = array_shift( $args );
|
|
|
|
|
}
|
2005-06-26 18:48:34 +00:00
|
|
|
list( $site, $lang ) = $wgConf->siteFromDB( $db );
|
2004-08-14 06:10:56 +00:00
|
|
|
|
2005-06-24 21:42:00 +00:00
|
|
|
# If not, work out the language and site the old way
|
|
|
|
|
if ( is_null( $site ) || is_null( $lang ) ) {
|
2006-01-07 13:31:29 +00:00
|
|
|
if ( !$db ) {
|
2005-12-03 19:25:39 +00:00
|
|
|
$lang = 'aa';
|
2005-06-24 21:42:00 +00:00
|
|
|
} else {
|
|
|
|
|
$lang = $db;
|
|
|
|
|
}
|
|
|
|
|
if ( isset( $args[0] ) ) {
|
|
|
|
|
$site = array_shift( $args );
|
|
|
|
|
} else {
|
2005-12-03 19:25:39 +00:00
|
|
|
$site = 'wikipedia';
|
2005-06-24 21:42:00 +00:00
|
|
|
}
|
2004-08-14 06:10:56 +00:00
|
|
|
}
|
2005-06-24 21:42:00 +00:00
|
|
|
} else {
|
2005-12-03 19:25:39 +00:00
|
|
|
$lang = 'aa';
|
|
|
|
|
$site = 'wikipedia';
|
2004-06-15 15:18:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# This is for the IRC scripts, which now run as the apache user
|
|
|
|
|
# The apache user doesn't have access to the wikiadmin_pass command
|
2005-12-03 19:25:39 +00:00
|
|
|
if ( $_ENV['USER'] == 'apache' ) {
|
2006-09-28 09:04:39 +00:00
|
|
|
#if ( posix_geteuid() == 48 ) {
|
2005-06-26 03:21:13 +00:00
|
|
|
$wgUseNormalUser = true;
|
|
|
|
|
}
|
|
|
|
|
|
2005-12-03 19:25:39 +00:00
|
|
|
putenv( 'wikilang='.$lang);
|
2004-06-15 15:18:50 +00:00
|
|
|
|
|
|
|
|
$DP = $IP;
|
2005-12-03 19:25:39 +00:00
|
|
|
ini_set( 'include_path', ".:$IP:$IP/includes:$IP/languages:$IP/maintenance" );
|
2004-06-15 15:18:50 +00:00
|
|
|
|
2008-05-12 22:01:44 +00:00
|
|
|
if ( $lang == 'test' && $site == 'wikipedia' ) {
|
|
|
|
|
define( 'TESTWIKI', 1 );
|
|
|
|
|
}
|
|
|
|
|
|
2006-07-26 07:15:39 +00:00
|
|
|
#require_once( $IP.'/includes/ProfilerStub.php' );
|
2005-12-03 19:25:39 +00:00
|
|
|
require_once( $IP.'/includes/Defines.php' );
|
|
|
|
|
require_once( $IP.'/CommonSettings.php' );
|
2005-06-26 07:02:40 +00:00
|
|
|
|
2006-02-28 05:24:52 +00:00
|
|
|
$bin = '/home/wikipedia/bin';
|
2005-10-22 20:52:30 +00:00
|
|
|
if ( $wgUseRootUser ) {
|
2005-12-03 19:25:39 +00:00
|
|
|
$wgDBuser = $wgDBadminuser = 'root';
|
2006-02-28 05:24:52 +00:00
|
|
|
$wgDBpassword = $wgDBadminpassword = trim(`$bin/mysql_root_pass`);
|
2005-10-22 20:52:30 +00:00
|
|
|
} elseif ( !$wgUseNormalUser ) {
|
2005-12-03 19:25:39 +00:00
|
|
|
$wgDBuser = $wgDBadminuser = 'wikiadmin';
|
2006-02-28 05:24:52 +00:00
|
|
|
$wgDBpassword = $wgDBadminpassword = trim(`$bin/wikiadmin_pass`);
|
2005-06-26 07:02:40 +00:00
|
|
|
}
|
2004-06-15 15:18:50 +00:00
|
|
|
} else {
|
|
|
|
|
$wgWikiFarm = false;
|
2006-01-17 09:01:26 +00:00
|
|
|
if ( isset( $options['conf'] ) ) {
|
|
|
|
|
$settingsFile = $options['conf'];
|
|
|
|
|
} else {
|
2006-08-04 20:59:13 +00:00
|
|
|
$settingsFile = "$IP/LocalSettings.php";
|
2006-01-17 09:01:26 +00:00
|
|
|
}
|
2008-06-04 01:46:53 +00:00
|
|
|
if ( isset( $options['wiki'] ) ) {
|
|
|
|
|
$bits = explode( '-', $options['wiki'] );
|
|
|
|
|
if ( count( $bits ) == 1 ) {
|
|
|
|
|
$bits[] = '';
|
|
|
|
|
}
|
|
|
|
|
define( 'MW_DB', $bits[0] );
|
|
|
|
|
define( 'MW_PREFIX', $bits[1] );
|
|
|
|
|
}
|
2004-02-23 07:44:11 +00:00
|
|
|
|
2004-06-12 12:56:00 +00:00
|
|
|
if ( ! is_readable( $settingsFile ) ) {
|
|
|
|
|
print "A copy of your installation's LocalSettings.php\n" .
|
2007-01-25 21:10:19 +00:00
|
|
|
"must exist and be readable in the source directory.\n";
|
2006-04-04 10:19:19 +00:00
|
|
|
exit( 1 );
|
2004-06-12 12:56:00 +00:00
|
|
|
}
|
|
|
|
|
$wgCommandLineMode = true;
|
2004-06-15 15:18:50 +00:00
|
|
|
$DP = $IP;
|
2006-07-26 07:15:39 +00:00
|
|
|
#require_once( $IP.'/includes/ProfilerStub.php' );
|
2005-12-03 19:25:39 +00:00
|
|
|
require_once( $IP.'/includes/Defines.php' );
|
2004-08-11 02:08:47 +00:00
|
|
|
require_once( $settingsFile );
|
2007-06-06 16:01:14 +00:00
|
|
|
/* ini_set( 'include_path', ".$sep$IP$sep$IP/includes$sep$IP/languages$sep$IP/maintenance" ); */
|
2006-01-07 13:31:29 +00:00
|
|
|
|
2007-06-08 18:12:07 +00:00
|
|
|
$adminSettings = isset( $options['aconf'] )
|
|
|
|
|
? $options['aconf']
|
|
|
|
|
: "{$IP}/AdminSettings.php";
|
|
|
|
|
if( is_readable( $adminSettings ) )
|
|
|
|
|
require_once( $adminSettings );
|
|
|
|
|
|
2004-06-12 12:56:00 +00:00
|
|
|
}
|
2004-06-15 15:18:50 +00:00
|
|
|
|
|
|
|
|
# Turn off output buffering again, it might have been turned on in the settings files
|
2006-11-29 05:45:03 +00:00
|
|
|
if( ob_get_level() ) {
|
|
|
|
|
ob_end_flush();
|
|
|
|
|
}
|
2004-06-26 07:08:31 +00:00
|
|
|
# Same with these
|
2004-06-15 15:18:50 +00:00
|
|
|
$wgCommandLineMode = true;
|
2004-06-26 07:08:31 +00:00
|
|
|
|
2006-04-04 06:36:02 +00:00
|
|
|
if ( empty( $wgUseNormalUser ) && isset( $wgDBadminuser ) ) {
|
2005-06-19 01:05:56 +00:00
|
|
|
$wgDBuser = $wgDBadminuser;
|
|
|
|
|
$wgDBpassword = $wgDBadminpassword;
|
|
|
|
|
|
2006-04-04 06:36:02 +00:00
|
|
|
if( $wgDBservers ) {
|
|
|
|
|
foreach ( $wgDBservers as $i => $server ) {
|
|
|
|
|
$wgDBservers[$i]['user'] = $wgDBuser;
|
|
|
|
|
$wgDBservers[$i]['password'] = $wgDBpassword;
|
|
|
|
|
}
|
2005-06-19 01:05:56 +00:00
|
|
|
}
|
2008-05-12 22:01:44 +00:00
|
|
|
if( isset( $wgLBFactoryConf['serverTemplate'] ) ) {
|
|
|
|
|
$wgLBFactoryConf['serverTemplate']['user'] = $wgDBuser;
|
|
|
|
|
$wgLBFactoryConf['serverTemplate']['password'] = $wgDBpassword;
|
|
|
|
|
}
|
2005-06-19 01:05:56 +00:00
|
|
|
}
|
|
|
|
|
|
2005-10-22 20:52:30 +00:00
|
|
|
if ( defined( 'MW_CMDLINE_CALLBACK' ) ) {
|
|
|
|
|
$fn = MW_CMDLINE_CALLBACK;
|
|
|
|
|
$fn();
|
|
|
|
|
}
|
|
|
|
|
|
2005-06-19 01:05:56 +00:00
|
|
|
ini_set( 'memory_limit', -1 );
|
2004-06-15 15:18:50 +00:00
|
|
|
|
2007-12-06 21:07:49 +00:00
|
|
|
if( version_compare( phpversion(), '5.2.4' ) >= 0 ) {
|
|
|
|
|
// Send PHP warnings and errors to stderr instead of stdout.
|
|
|
|
|
// This aids in diagnosing problems, while keeping messages
|
|
|
|
|
// out of redirected output.
|
|
|
|
|
if( ini_get( 'display_errors' ) ) {
|
|
|
|
|
ini_set( 'display_errors', 'stderr' );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Don't touch the setting on earlier versions of PHP,
|
|
|
|
|
// as setting it would disable output if you'd wanted it.
|
|
|
|
|
|
|
|
|
|
// Note that exceptions are also sent to stderr when
|
|
|
|
|
// command-line mode is on, regardless of PHP version.
|
|
|
|
|
}
|
2006-09-28 09:04:39 +00:00
|
|
|
$wgShowSQLErrors = true;
|
|
|
|
|
|
2007-06-06 16:01:14 +00:00
|
|
|
require_once( "$IP/includes/Setup.php" );
|
|
|
|
|
require_once( "$IP/install-utils.inc" );
|
2006-07-26 07:15:39 +00:00
|
|
|
$wgTitle = null; # Much much faster startup than creating a title object
|
2008-04-17 19:20:27 +00:00
|
|
|
@set_time_limit(0);
|