function bootstrap_and_dispatch() { $phases = _drush_bootstrap_phases(FALSE, TRUE); $return = ''; $command_found = FALSE; _drush_bootstrap_output_prepare(); foreach ($phases as $phase) { if (drush_bootstrap_to_phase($phase)) { $command = drush_parse_command(); if (is_array($command)) { $bootstrap_result = drush_bootstrap_to_phase($command['bootstrap']); drush_enforce_requirement_bootstrap_phase($command); drush_enforce_requirement_core($command); drush_enforce_requirement_drupal_dependencies($command); drush_enforce_requirement_drush_dependencies($command); if ($bootstrap_result && empty($command['bootstrap_errors'])) { drush_log(dt("Found command: !command (commandfile=!commandfile)", array('!command' => $command['command'], '!commandfile' => $command['commandfile'])), 'bootstrap'); $command_found = TRUE; // Dispatch the command(s). $return = drush_dispatch($command); // Prevent a '1' at the end of the output. if ($return === TRUE) { $return = ''; } if (drush_get_context('DRUSH_DEBUG') && !drush_get_context('DRUSH_QUIET')) { // @todo Create version independant wrapper around Drupal timers. Use it. drush_print_timers(); } break; } } } else { break; } } if (!$command_found) { // If we reach this point, command doesn't fit requirements or we have not // found either a valid or matching command. // If no command was found check if it belongs to a disabled module. if (!$command) { $command = drush_command_belongs_to_disabled_module(); } // Set errors related to this command. $args = implode(' ', drush_get_arguments()); if (isset($command) && is_array($command)) { foreach ($command['bootstrap_errors'] as $key => $error) { drush_set_error($key, $error); } drush_set_error('DRUSH_COMMAND_NOT_EXECUTABLE', dt("The drush command '!args' could not be executed.", array('!args' => $args))); } elseif (!empty($args)) { drush_set_error('DRUSH_COMMAND_NOT_FOUND', dt("The drush command '!args' could not be found. Run `drush cache-clear drush` to clear the commandfile cache if you have installed new extensions.", array('!args' => $args))); } // Set errors that occurred in the bootstrap phases. $errors = drush_get_context('DRUSH_BOOTSTRAP_ERRORS', array()); foreach ($errors as $code => $message) { drush_set_error($code, $message); } } return $return; }
function _drush_bootstrap_and_dispatch() { $phases = _drush_bootstrap_phases(FALSE, TRUE); $return = ''; $command_found = FALSE; _drush_bootstrap_output_prepare(); foreach ($phases as $phase) { if (drush_bootstrap_to_phase($phase)) { $command = drush_parse_command(); if (is_array($command)) { $bootstrap_result = drush_bootstrap_to_phase($command['bootstrap']); drush_enforce_requirement_bootstrap_phase($command); drush_enforce_requirement_core($command); drush_enforce_requirement_drupal_dependencies($command); drush_enforce_requirement_drush_dependencies($command); if ($bootstrap_result && empty($command['bootstrap_errors'])) { drush_log(dt("Found command: !command (commandfile=!commandfile)", array('!command' => $command['command'], '!commandfile' => $command['commandfile'])), 'bootstrap'); $command_found = TRUE; // Dispatch the command(s). $return = drush_dispatch($command); // prevent a '1' at the end of the output if ($return === TRUE) { $return = ''; } if (drush_get_context('DRUSH_DEBUG') && !drush_get_context('DRUSH_QUIET')) { drush_print_timers(); } drush_log(dt('Peak memory usage was !peak', array('!peak' => drush_format_size(memory_get_peak_usage()))), 'memory'); break; } } } else { break; } } if (!$command_found) { // If we reach this point, we have not found either a valid or matching command. $args = implode(' ', drush_get_arguments()); if (isset($command) && is_array($command)) { foreach ($command['bootstrap_errors'] as $key => $error) { drush_set_error($key, $error); } drush_set_error('DRUSH_COMMAND_NOT_EXECUTABLE', dt("The drush command '!args' could not be executed.", array('!args' => $args))); } elseif (!empty($args)) { drush_set_error('DRUSH_COMMAND_NOT_FOUND', dt("The drush command '!args' could not be found.", array('!args' => $args))); } // Set errors that occurred in the bootstrap phases. $errors = drush_get_context('DRUSH_BOOTSTRAP_ERRORS', array()); foreach ($errors as $code => $message) { drush_set_error($code, $message); } } return $return; }
function enforce_requirement(&$command) { drush_enforce_requirement_bootstrap_phase($command); drush_enforce_requirement_core($command); drush_enforce_requirement_drush_dependencies($command); }
/** * Called by Drush when a command is selected, but before it runs. This gives * the Boot class an opportunity to determine if any minimum requirements * (e.g. minimum Backdrop version) declared in the command have been met. * * @return bool TRUE if command is valid. $command['bootstrap_errors'] * should be populated with an array of error messages if the command is not * valid. */ function enforce_requirement(&$command) { drush_enforce_requirement_bootstrap_phase($command); drush_enforce_requirement_core($command); drush_enforce_requirement_drush_dependencies($command); // @todo: Support Backdrop and(?) Drupal dependencies. // $this->drush_enforce_requirement_backdrop_dependencies($command); // $this->drush_enforce_requirement_drupal_dependencies($command); return empty($command['bootstrap_errors']); }
/** * The main Drush function. * * - Parses the command line arguments, configuration files and environment. * - Prepares and executes a Drupal bootstrap, if possible, * - Dispatches the given command. * * @return * Whatever the given command returns. */ function drush_main() { $phases = _drush_bootstrap_phases(FALSE, TRUE); drush_set_context('DRUSH_BOOTSTRAP_PHASE', DRUSH_BOOTSTRAP_NONE); // We need some global options processed at this early stage. Namely --debug. drush_parse_args(); _drush_bootstrap_global_options(); $return = ''; $command_found = FALSE; foreach ($phases as $phase) { if (drush_bootstrap_to_phase($phase)) { $command = drush_parse_command(); // Process a remote command if 'remote-host' option is set. if (drush_remote_command()) { $command_found = TRUE; break; } if (is_array($command)) { $bootstrap_result = drush_bootstrap_to_phase($command['bootstrap']); drush_enforce_requirement_bootstrap_phase($command); drush_enforce_requirement_core($command); drush_enforce_requirement_drupal_dependencies($command); drush_enforce_requirement_drush_dependencies($command); if ($bootstrap_result && empty($command['bootstrap_errors'])) { drush_log(dt("Found command: !command (commandfile=!commandfile)", array('!command' => $command['command'], '!commandfile' => $command['commandfile'])), 'bootstrap'); $command_found = TRUE; // Dispatch the command(s). $return = drush_dispatch($command); // prevent a '1' at the end of the output if ($return === TRUE) { $return = ''; } if (drush_get_context('DRUSH_DEBUG')) { drush_print_timers(); } drush_log(dt('Peak memory usage was !peak', array('!peak' => drush_format_size(memory_get_peak_usage()))), 'memory'); break; } } } else { break; } } if (!$command_found) { // If we reach this point, we have not found either a valid or matching command. $args = implode(' ', drush_get_arguments()); if (isset($command) && is_array($command)) { foreach ($command['bootstrap_errors'] as $key => $error) { drush_set_error($key, $error); } drush_set_error('DRUSH_COMMAND_NOT_EXECUTABLE', dt("The drush command '!args' could not be executed.", array('!args' => $args))); } elseif (!empty($args)) { drush_set_error('DRUSH_COMMAND_NOT_FOUND', dt("The drush command '!args' could not be found.", array('!args' => $args))); } // Set errors that ocurred in the bootstrap phases. $errors = drush_get_context('DRUSH_BOOTSTRAP_ERRORS', array()); foreach ($errors as $code => $message) { drush_set_error($code, $message); } } // We set this context to let the shutdown function know we reached the end of drush_main(); drush_set_context("DRUSH_EXECUTION_COMPLETED", TRUE); // After this point the drush_shutdown function will run, // exiting with the correct exit code. return $return; }