Index: update.php
===================================================================
RCS file: /cvs/drupal/drupal/update.php,v
retrieving revision 1.285
diff -u -p -r1.285 update.php
--- update.php	24 May 2009 17:39:30 -0000	1.285
+++ update.php	2 Jun 2009 06:42:08 -0000
@@ -163,6 +163,13 @@ function update_do_one($module, $number,
   if (!empty($context['results'][$module]['#abort'])) {
     return;
   }
+  
+  // Abort if there are new, unmet dependencies.
+  $unmet = update_check_dependencies($module);
+  if (count($unmet)) {
+    $context['results'][$module]['#abort'] = TRUE;
+    return;
+  }
 
   $function = $module . '_update_' . $number;
   if (function_exists($function)) {
@@ -473,6 +480,29 @@ function update_create_batch_table() {
 }
 
 /**
+ * Updated versions of a module can introduce new dependencies.
+ * Returns array of dependent modules that are disabled.
+ */
+function update_check_dependencies($module) {
+  $files = module_rebuild_cache();
+  $dependencies = $files[$module]->info['dependencies'];
+  $unmet = array();
+  if (count($dependencies)) {
+    $met_modules = db_select('system', 's')
+      ->fields('s', array('name'))
+      ->condition('status', 1)
+      ->condition('name', $dependencies, 'IN')
+      ->execute();
+    $met = array();
+    foreach ($met_modules as $met_module) {
+      $met[] = $met_module->name;
+    }
+    $unmet = array_diff($dependencies, $met);
+  }
+  return $unmet;
+}
+
+/**
  * Disable anything in the {system} table that is not compatible with the
  * current version of Drupal core.
  */
