function drush_bootstrap($argc, $argv) { global $args, $override, $conf; // Parse command line options and arguments. $args = drush_parse_args($argv, array('h', 'u', 'r', 'l')); // We use PWD if available because getcwd() resolves symlinks, which // could take us outside of the Drupal root, making it impossible to find. $path = $_SERVER['PWD']; if (empty($path)) { $path = getcwd(); } // Convert windows paths. $path = drush_convert_path($path); // Try and locate the Drupal root directory $root = _drush_locate_root($path); // Load .drushrc file if available. Allows you to provide defaults for options and variables. drush_load_rc($root); $uri = FALSE; // If the current directory contains a settings.php we assume that is the desired site URI. if (file_exists('./settings.php')) { // Export the following settings.php variables to the global namespace. global $db_url, $db_prefix, $cookie_domain, $conf, $installed_profile, $update_free_access; // If the settings.php has a defined path we use the URI from that. include_once './settings.php'; if (isset($base_url)) { $uri = $base_url; } else { // Alternatively we default to the name of the current directory, if it is not 'default'. $elements = explode('/', $path); $current = array_pop($elements); if ($current != 'default') { $uri = 'http://' . $current; } } } // Define basic options as constants. define('DRUSH_URI', drush_get_option(array('l', 'uri'), $uri)); define('DRUSH_VERBOSE', drush_get_option(array('v', 'verbose'), FALSE)); define('DRUSH_AFFIRMATIVE', drush_get_option(array('y', 'yes'), FALSE)); define('DRUSH_SIMULATE', drush_get_option(array('s', 'simulate'), FALSE)); // TODO: Make use of this as soon as the external define('DRUSH_USER', drush_get_option(array('u', 'user'), 0)); // If no root is defined, we try to guess from the current directory. define('DRUSH_DRUPAL_ROOT', drush_get_option(array('r', 'root'), $root)); // If the Drupal directory can't be found, and no -r option was specified, // or the path specified in -r does not point to a Drupal directory, // we have no alternative but to give up the ghost at this point. // (NOTE: t() is not available yet.) if (!DRUSH_DRUPAL_ROOT || !is_dir(DRUSH_DRUPAL_ROOT) || !file_exists(DRUSH_DRUPAL_ROOT . '/' . DRUSH_DRUPAL_BOOTSTRAP)) { $dir = ''; if (DRUSH_DRUPAL_ROOT) { $dir = ' in ' . DRUSH_DRUPAL_ROOT; } // Provide a helpful exit message, letting the user know where we looked // (if we looked at all) and a hint on how to specify the directory manually. $message = "E: Could not locate a Drupal installation directory{$dir}. Aborting.\n"; $message .= "Hint: You can specify your Drupal installation directory with the --root\n"; $message .= "parameter on the command line or \$options['root'] in your drushrc.php file.\n"; die($message); } // Fake the necessary HTTP headers that Drupal needs: if (DRUSH_URI) { $drupal_base_url = parse_url(DRUSH_URI); $_SERVER['HTTP_HOST'] = $drupal_base_url['host']; $_SERVER['PHP_SELF'] = $drupal_base_url['path'] . '/index.php'; } else { $_SERVER['HTTP_HOST'] = NULL; $_SERVER['PHP_SELF'] = NULL; } $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] = $_SERVER['PHP_SELF']; $_SERVER['REMOTE_ADDR'] = ''; $_SERVER['REQUEST_METHOD'] = NULL; $_SERVER['SERVER_SOFTWARE'] = NULL; // Change to Drupal root dir. chdir(DRUSH_DRUPAL_ROOT); // Bootstrap Drupal. _drush_bootstrap_drupal(); /** * Allow the drushrc.php file to override $conf settings. * This is a separate variable because the $conf array gets initialized to an empty array, * in the drupal bootstrap process, and changes in settings.php would wipe out the drushrc.php * settings */ if (is_array($override)) { $conf = array_merge($conf, $override); } // Login the specified user (if given). if (DRUSH_USER) { _drush_login(DRUSH_USER); } // Now we can use all of Drupal. if (DRUSH_SIMULATE) { drush_print(t('SIMULATION MODE IS ENABLED. NO ACTUAL ACTION WILL BE TAKEN. SYSTEM WILL REMAIN UNCHANGED.')); } // Dispatch the command. $output = drush_dispatch($args['commands']); // prevent a '1' at the end of the outputs if ($output === true) { $output = ''; } // TODO: Terminate with the correct exit status. return $output; }
function drush_bootstrap($argc, $argv) { global $args, $override, $conf; // Parse command line options and arguments. $args = drush_parse_args($argv, array('h', 'u', 'r', 'l')); // Load .drushrc file if available. Allows you to provide defaults for options and variables. drush_load_rc(); // Define basic options as constants. define('DRUSH_URI', drush_get_option(array('l', 'uri'), FALSE)); define('DRUSH_VERBOSE', drush_get_option(array('v', 'verbose'), FALSE)); define('DRUSH_AFFIRMATIVE', drush_get_option(array('y', 'yes'), FALSE)); define('DRUSH_SIMULATE', drush_get_option(array('s', 'simulate'), FALSE)); // TODO: Make use of this as soon as the external define('DRUSH_USER', drush_get_option(array('u', 'user'), 0)); // If no root is defined, we try to guess from the current directory. define('DRUSH_DRUPAL_ROOT', drush_get_option(array('r', 'root'), _drush_locate_root())); // If the Drupal directory can't be found, and no -r option was specified, // or the path specified in -r does not point to a Drupal directory, // we have no alternative but to give up the ghost at this point. // (NOTE: t() is not available yet.) if (!DRUSH_DRUPAL_ROOT || !is_dir(DRUSH_DRUPAL_ROOT) || !file_exists(DRUSH_DRUPAL_ROOT . '/' . DRUSH_DRUPAL_BOOTSTRAP)) { exit("E: Could not locate the Drupal installation directory. Aborting.\n"); } // Fake the necessary HTTP headers that Drupal needs: $drupal_base_url = parse_url(DRUSH_URI); $_SERVER['HTTP_HOST'] = $drupal_base_url['host']; $_SERVER['PHP_SELF'] = $drupal_base_url['path'] . '/index.php'; $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] = $_SERVER['PHP_SELF']; $_SERVER['REMOTE_ADDR'] = NULL; $_SERVER['REQUEST_METHOD'] = NULL; $_SERVER['SERVER_SOFTWARE'] = NULL; // Change to Drupal root dir. chdir(DRUSH_DRUPAL_ROOT); // Bootstrap Drupal. _drush_bootstrap_drupal(); /** * Allow the drushrc.php file to override $conf settings. * This is a separate variable because the $conf array gets initialized to an empty array, * in the drupal bootstrap process, and changes in settings.php would wipe out the drushrc.php * settings */ if (is_array($override)) { $conf = array_merge($conf, $override); } // Login the specified user (if given). if (DRUSH_USER) { _drush_login(DRUSH_USER); } // Now we can use all of Drupal. if (DRUSH_SIMULATE) { drush_print(t('SIMULATION MODE IS ENABLED. NO ACTUAL ACTION WILL BE TAKEN. SYSTEM WILL REMAIN UNCHANGED.')); } // Dispatch the command. $output = drush_dispatch($args['commands']); // prevent a '1' at the end of the outputs if ($output === true) { $output = ''; } // TODO: Terminate with the correct exit status. return $output; }