Added wfShellMaintenanceCmd() for Het Deploy support

This commit is contained in:
Aaron Schulz 2011-09-23 20:42:22 +00:00
parent ff4f4d8b99
commit 122a14140a
2 changed files with 51 additions and 0 deletions

View file

@ -2804,6 +2804,31 @@ function wfInitShellLocale() {
}
}
/**
* Generate a shell-escaped command line string to run a maintenance script.
* Note that $parameters should be a flat array and an option with an argument
* should consist of two consecutive items in the array (do not use "--option value").
* @param $script string MediaWiki maintenance script path
* @param $parameters Array Arguments and options to the script
* @param $options Array Associative array of options:
* 'php': The path to the php executable
* 'wrapper': Path to a PHP wrapper to handle the maintenance script
* @return Array
*/
function wfShellMaintenanceCmd( $script, array $parameters = array(), array $options = array() ) {
global $wgPhpCli;
// Give site config file a chance to run the script in a wrapper.
// The caller may likely want to call wfBasename() on $script.
wfRunHooks( 'wfShellMaintenanceCmd', array( &$script, &$parameters, &$options ) );
$cmd = isset( $options['php'] ) ? array( $options['php'] ) : array( $wgPhpCli );
if ( isset( $options['wrapper'] ) ) {
$cmd[] = $options['wrapper'];
}
$cmd[] = $script;
// Escape each parameter for shell
return implode( " ", array_map( 'wfEscapeShellArg', array_merge( $cmd, $parameters ) ) );
}
/**
* This function works like "use VERSION" in Perl, the program will die with a
* backtrace if the current version of PHP is less than the version provided

View file

@ -905,6 +905,32 @@ class GlobalTest extends MediaWikiTestCase {
return $a;
}
/**
* @dataProvider provideWfShellMaintenanceCmdList
*/
function testWfShellMaintenanceCmd( $script, $parameters, $options, $expected, $description ) {
$actual = wfShellMaintenanceCmd( $script, $parameters, $options );
$this->assertEquals( $expected, $actual, $description );
}
function provideWfShellMaintenanceCmdList() {
global $wgPhpCli;
return array(
array( 'eval.php', array( '--help', '--test' ), array(),
"\"$wgPhpCli\" \"eval.php\" \"--help\" \"--test\"",
"Called eval.php --help --test" ),
array( 'eval.php', array( '--help', '--test space' ), array('php' => 'php5'),
"\"php5\" \"eval.php\" \"--help\" \"--test space\"",
"Called eval.php --help --test with php option" ),
array( 'eval.php', array( '--help', '--test', 'X' ), array('wrapper' => 'MWScript.php'),
"\"$wgPhpCli\" \"MWScript.php\" \"eval.php\" \"--help\" \"--test\" \"X\"",
"Called eval.php --help --test with wrapper option" ),
array( 'eval.php', array( '--help', '--test', 'y' ), array('php' => 'php5', 'wrapper' => 'MWScript.php'),
"\"php5\" \"MWScript.php\" \"eval.php\" \"--help\" \"--test\" \"y\"",
"Called eval.php --help --test with wrapper and php option" ),
);
}
/* TODO: many more! */
}