Index: update.php
===================================================================
RCS file: /cvs/drupal/drupal/update.php,v
retrieving revision 1.247
diff -u -p -r1.247 update.php
--- update.php	7 Jan 2008 19:43:28 -0000	1.247
+++ update.php	12 Jan 2008 03:19:41 -0000
@@ -158,9 +158,14 @@ function update_do_one($module, $number,
   if (!isset($context['results'][$module][$number])) {
     $context['results'][$module][$number] = array();
   }
-  $context['results'][$module][$number] = array_merge($context['results'][$module][$number], $ret);;
-
-  if ($context['finished'] == 1) {
+  $context['results'][$module][$number] = array_merge($context['results'][$module][$number], $ret);
+  // An update function can abort so that the schema version is not incremented,
+  // and also display a message. To abort, return a $ret array with an element like:
+  // $ret['#update_failed'] = array('success' => FALSE, 'query' => "Why I failed")
+  // Note that this will not prevent later updates for the same module from running
+  // and updating the schema version. Thus, you will need to add code to check the
+  // schema version in later updates and abort them, too.
+  if ($context['finished'] == 1 && empty($ret['#update_failed'])) {
     // Update the installed version
     drupal_set_installed_schema_version($module, $number);
   }
