function drush_main
8.0.x preflight.inc | drush_main() |
6.x drush.php | drush_main() |
7.x drush.php | drush_main() |
3.x drush.php | drush_main() |
4.x drush.php | drush_main() |
5.x drush.php | drush_main() |
master preflight.inc | drush_main() |
The main Drush function.
- Runs "early" option code, if set (see global options).
- Parses the command line arguments, configuration files and environment.
- Prepares and executes a Drupal bootstrap, if possible,
- Dispatches the given command.
function_exists('drush_main') may be used by modules to detect whether they are being called from Drush. See http://drupal.org/node/1181308 and http://drupal.org/node/827478
Return value
mixed Whatever the given command returns.
2 calls to drush_main()
- drush.php in ./
drush.php - drush is a PHP script implementing a command line shell for Drupal.
- drush_startup in includes/
startup.inc - drush_startup is called once, by the Drush "finder" script -- the "drush" script at the Drush root. It finds the correct Drush "wrapper" or "launcher" script to use, and executes it with process replacement.
File
- includes/
preflight.inc, line 25 - Preflight, postflight and shutdown code.
Code
function drush_main() {
// Load Drush core include files, and parse command line arguments.
if (drush_preflight_prepare() === FALSE) {
return (1);
}
// Start code coverage collection.
if ($coverage_file = drush_get_option('drush-coverage', FALSE)) {
drush_set_context('DRUSH_CODE_COVERAGE', $coverage_file);
xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);
register_shutdown_function('drush_coverage_shutdown');
}
// Load the global Drush configuration files, and global Drush commands.
// Find the selected site based on --root, --uri or cwd
// Preflight the selected site, and load any configuration and commandfiles associated with it.
// Select and return the bootstrap class.
$bootstrap = drush_preflight();
// Reset our bootstrap phase to the beginning
drush_set_context('DRUSH_BOOTSTRAP_PHASE', DRUSH_BOOTSTRAP_NONE);
$return = '';
if (!drush_get_error()) {
if ($file = drush_get_option('early', FALSE)) {
require_once drush_is_absolute_path($file) ? $file : DRUSH_BASE_PATH . DIRECTORY_SEPARATOR . $file;
$function = 'drush_early_' . basename($file, '.inc');
if (function_exists($function)) {
if ($return = $function()) {
// If the function returns FALSE, we continue and attempt to bootstrap
// as normal. Otherwise, we exit early with the returned output.
if ($return === TRUE) {
$return = '';
}
}
}
}
else {
// Do any necessary preprocessing operations on the command,
// perhaps handling immediately.
$command_handled = drush_preflight_command_dispatch();
if (!$command_handled) {
$return = $bootstrap->bootstrap_and_dispatch();
}
}
}
// TODO: Get rid of global variable access here, and just trust
// the bootstrap object returned from drush_preflight(). This will
// require some adjustments to Drush bootstrapping.
// See: https://github.com/drush-ops/drush/pull/1303
if ($bootstrap = drush_get_bootstrap_object()) {
$bootstrap->terminate();
}
drush_postflight();
// How strict are we? If we are very strict, turn 'ok' into 'error'
// if there are any warnings in the log.
if (($return == 0) && (drush_get_option('strict') > 1) && drush_log_has_errors()) {
$return = 1;
}
// After this point the drush_shutdown function will run,
// exiting with the correct exit code.
return $return;
}