--- drush/drush_tools/drush_tools.module.orig 2008-08-10 20:42:40.000000000 -0400 +++ drush/drush_tools/drush_tools.module 2009-01-16 14:55:13.000000000 -0500 @@ -52,6 +52,10 @@ function drush_tools_drush_command() { 'callback' => 'drush_tools_eval', 'description' => 'Evaluate a command', ); + $items['update'] = array( + 'callback' => 'drush_tools_update', + 'description' => 'Run all the schema changes from the command-line (replacement for update.php)', + ); return $items; } @@ -162,4 +166,89 @@ function drush_tools_watchdog_delete($ty function drush_tools_eval($command) { eval($command); -} \ No newline at end of file +} + +/** + * Run all the schema changes from the command-line (replacement for update.php) + */ +function drush_tools_update($command = '') { + ob_start(); + require_once 'includes/install.inc'; + require_once 'update.php'; + $ret = ob_get_contents(); + drupal_load_updates(); + ob_end_clean(); + + $list = module_list(); + $update_list = array(); + foreach ($list as $module) { + $updates = drupal_get_schema_versions($module); + if ($updates !== FALSE) { + $latest = 0; + $base = drupal_get_installed_schema_version($module); + foreach ($updates as $update) { + if ($update > $base) { + if ($update > $latest) { $latest = $update; } + $update_list[$module][] = $update; + } + } + if ($latest) { + sort($update_list[$module]); + printf("%-30s %5d -> %5d (%s)\n", $module, $base, $latest, join(', ', $update_list[$module])); + } else { + printf("%-30s %5d\n", $module, $base); + } + } + } + if (count($update_list) == 0) return; + if ($command != 'force' && !drush_confirm(t('Do you really want to continue?'))) { + drush_die('Aborting.'); + } + ob_start(); + foreach ($update_list as $module => $versions) { + foreach ($versions as $v) { + print "Running " . $module . "_update_" . $v . "\n"; + update_data($module, $v); + } + } + $updates = ob_get_contents(); + + cache_clear_all('*', 'cache', TRUE); + cache_clear_all('*', 'cache_page', TRUE); + cache_clear_all('*', 'cache_menu', TRUE); + cache_clear_all('*', 'cache_filter', TRUE); + drupal_clear_css_cache(); + ob_end_clean(); + $output = ''; + if (!empty($_SESSION['update_results'])) { + $output .= "The following queries were executed:\n"; + foreach ($_SESSION['update_results'] as $module => $updates) { + $output .= "\n" . $module . "\n--------------------------\n"; + foreach ($updates as $number => $queries) { + $output .= 'Update #'. $number . ":\n"; + foreach ($queries as $query) { + if ($query['success']) { + $output .= "SUCCESS: " . $query['query'] . "\n"; + } + else { + $output .= "FAILURE: " . $query['query'] . "\n"; + } + } + if (!count($queries)) { + $output .= "No queries\n"; + } + } + } + $output .= "\n"; + if ($all_messages = drupal_get_messages()) { + foreach ($all_messages as $type => $messages) { + foreach ($messages as $message) { + $output .= '['. $type .'] '. $message."\n"; + } + $output .= "\n"; + } + } + print $output; + unset($_SESSION['update_results']); + } +} --- drush/drush_pm/drush_pm.module.orig 2009-01-16 15:03:58.000000000 -0500 +++ drush/drush_pm/drush_pm.module 2009-01-16 15:04:35.000000000 -0500 @@ -365,7 +365,7 @@ function drush_pm_update_packages($relea if ($backup_dir) { drush_print(t("Backups were saved into the directory !backup_dir.", array('!backup_dir' => $backup_dir))); } - drush_print(t("You should now run update.php through your browser.")); + drush_print(t("You should now run update.php through your browser or run drush update (requires drush_tools).")); } /**