Index: update.php =================================================================== RCS file: /cvs/drupal/drupal/update.php,v retrieving revision 1.264 diff -u -F^f -r1.264 update.php --- update.php 24 Oct 2008 18:47:02 -0000 1.264 +++ update.php 25 Oct 2008 01:00:41 -0000 @@ -574,6 +574,37 @@ function update_fix_d6_requirements() { } /** + * Users who still have a Drupal 6 database (and are in the process of + * updating to Drupal 7) need extra help before a full bootstrap can be + * achieved. This function does the necessary preliminary work that allows + * the bootstrap to be successful. + * + * No access check has been performed when this function is called, so no + * changes to the database should be made here. + */ +function update_prepare_d7_bootstrap() { + // Allow the database system to work even though the registry has not + // been created yet. + drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE); + include_once DRUPAL_ROOT . '/includes/install.inc'; + drupal_install_init_database(); + spl_autoload_unregister('drupal_autoload_class'); + spl_autoload_unregister('drupal_autoload_interface'); + // The new {blocked_ips} table is used in Drupal 7 to store a list of + // banned IP addresses. If this table doesn't exist then we are still + // running on a Drupal 6 database, so suppress the unavoidable errors + // that occur. + try { + drupal_bootstrap(DRUPAL_BOOTSTRAP_ACCESS); + } + catch (Exception $e) { + if (db_table_exists('blocked_ips')) { + throw $e; + } + } +} + +/** * Add the update task list to the current page. */ function update_task_list($active = NULL) { @@ -655,6 +686,7 @@ function update_check_requirements() { install_goto('update.php?op=info'); } +update_prepare_d7_bootstrap(); drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); drupal_maintenance_theme(); Index: includes/database/database.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/database/database.inc,v retrieving revision 1.15 diff -u -F^f -r1.15 database.inc --- includes/database/database.inc 20 Oct 2008 11:28:30 -0000 1.15 +++ includes/database/database.inc 25 Oct 2008 01:00:42 -0000 @@ -410,9 +410,7 @@ } } catch (PDOException $e) { - if (!function_exists('module_implements')) { - _db_need_install(); - } + _db_check_install_needed(); if ($options['throw_exception']) { if ($query instanceof DatabaseStatement) { $query_string = $stmt->queryString; @@ -885,11 +883,9 @@ final protected static function parseConnectionInfo() { global $databases; - if (empty($databases)) { - _db_need_install(); - } - $databaseInfo = $databases; + _db_check_install_needed(); + $databaseInfo = $databases; foreach ($databaseInfo as $index => $info) { foreach ($databaseInfo[$index] as $target => $value) { // If there is no "driver" property, then we assume it's an array of @@ -1009,7 +1005,7 @@ // It is extremely rare that an exception will be generated here other // than when installing. We therefore intercept it and try the installer, // passing on the exception otherwise. - _db_need_install(); + _db_check_install_needed(); throw $e; } } @@ -2011,8 +2007,14 @@ function db_result(DatabaseStatement $st return $statement->fetchField(); } -function _db_need_install() { - if (!function_exists('install_goto')) { +/** + * Redirect the user to the installation script if Drupal has not been + * installed yet (i.e., if no $databases array has been defined in the + * settings file) and we are not already there. Otherwise, do nothing. + */ +function _db_check_install_needed() { + global $databases; + if (empty($databases) && !function_exists('install_main')) { include_once DRUPAL_ROOT . '/includes/install.inc'; install_goto('install.php'); } Index: includes/database/pgsql/database.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/database/pgsql/database.inc,v retrieving revision 1.3 diff -u -F^f -r1.3 database.inc --- includes/database/pgsql/database.inc 15 Sep 2008 20:48:07 -0000 1.3 +++ includes/database/pgsql/database.inc 25 Oct 2008 01:00:42 -0000 @@ -58,10 +58,7 @@ } } catch (PDOException $e) { - if (!function_exists('module_implements')) { - _db_need_install(); - } - //watchdog('database', var_export($e, TRUE) . $e->getMessage(), NULL, WATCHDOG_ERROR); + _db_check_install_needed(); if ($options['throw_exception']) { if ($query instanceof DatabaseStatement) { $query_string = $stmt->queryString; Index: modules/node/node.module =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.module,v retrieving revision 1.989 diff -u -F^f -r1.989 node.module --- modules/node/node.module 25 Oct 2008 00:23:03 -0000 1.989 +++ modules/node/node.module 25 Oct 2008 01:00:44 -0000 @@ -591,8 +591,9 @@ function _node_types_build() { while ($type_object = db_fetch_object($type_result)) { // Check for node types from disabled modules and mark their types for removal. // Types defined by the node module in the database (rather than by a separate - // module using hook_node_info) have a base value of 'node_content'. - if ($type_object->base != 'node_content' && empty($info_array[$type_object->type])) { + // module using hook_node_info) have a base value of 'node_content'. The isset() + // check prevents errors on old (pre-Drupal 7) databases. + if (isset($type_object->base) && $type_object->base != 'node_content' && empty($info_array[$type_object->type])) { $type_object->disabled = TRUE; } if (!isset($_node_types[$type_object->type]) || $type_object->modified) { Index: modules/system/system.install =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.install,v retrieving revision 1.272 diff -u -F^f -r1.272 system.install --- modules/system/system.install 13 Oct 2008 20:29:42 -0000 1.272 +++ modules/system/system.install 25 Oct 2008 01:00:46 -0000 @@ -3042,8 +3042,8 @@ function system_update_7009() { */ function system_update_7010() { $ret = array(); - db_change_field($ret, 'menu_router', 'load_functions', 'load_functions', array('type' => 'text', 'not null' => TRUE, 'default' => '')); - db_change_field($ret, 'menu_router', 'to_arg_functions', 'to_arg_functions', array('type' => 'text', 'not null' => TRUE, 'default' => '',)); + db_change_field($ret, 'menu_router', 'load_functions', 'load_functions', array('type' => 'text', 'not null' => TRUE)); + db_change_field($ret, 'menu_router', 'to_arg_functions', 'to_arg_functions', array('type' => 'text', 'not null' => TRUE)); return $ret; }