function BaseBoot::bootstrap_and_dispatch

8.0.x BaseBoot.php BaseBoot::bootstrap_and_dispatch()
7.x BaseBoot.php BaseBoot::bootstrap_and_dispatch()
master BaseBoot.php BaseBoot::bootstrap_and_dispatch()

Main entrypoint to bootstrap the selected CMS and execute the selected command.

The implementation provided in BaseBoot should be sufficient; this method usually will not need to be overridden.

Overrides Boot::bootstrap_and_dispatch

File

lib/Drush/Boot/BaseBoot.php, line 46

Namespace

Drush\Boot

Class

BaseBoot

Code

function bootstrap_and_dispatch() {
  $phases = $this->bootstrap_init_phases();

  $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)) {
        $command += $this->command_defaults();
        // Insure that we have bootstrapped to a high enough
        // phase for the command prior to enforcing requirements.
        $bootstrap_result = drush_bootstrap_to_phase($command['bootstrap']);
        $this->enforce_requirement($command);

        if ($bootstrap_result && empty($command['bootstrap_errors'])) {
          drush_log(dt("Found command: !command (commandfile=!commandfile)", array('!command' => $command['command'], '!commandfile' => $command['commandfile'])), LogLevel::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.
    $this->report_command_error($command);
  }
  return $return;
}