From 98b84b7adbf2dfee104167e4014ecd03fb965fff Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Mon, 28 Dec 2009 10:48:51 +0000 Subject: - Patch #661420 by justinrandell, David_Rothstein: made installation of modules much more efficient. --- includes/bootstrap.inc | 16 +++++++++++++++- includes/module.inc | 8 ++++---- includes/registry.inc | 9 +++++---- 3 files changed, 24 insertions(+), 9 deletions(-) (limited to 'includes') diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc index 29b925350..b9bf2d6d0 100644 --- a/includes/bootstrap.inc +++ b/includes/bootstrap.inc @@ -2098,8 +2098,22 @@ function _registry_check_code($type, $name = NULL) { * each interface or class in the database. */ function registry_rebuild() { + system_rebuild_module_data(); + registry_update(); +} + +/** + * Update the registry based on the latest files listed in the database. + * + * This function should be used when system_rebuild_module_data() does not need + * to be called, because it is already known that the list of files in the + * {system} table matches those in the file system. + * + * @see registry_rebuild() + */ +function registry_update() { require_once DRUPAL_ROOT . '/includes/registry.inc'; - _registry_rebuild(); + _registry_update(); } /** diff --git a/includes/module.inc b/includes/module.inc index ba44dc46e..e3f31a009 100644 --- a/includes/module.inc +++ b/includes/module.inc @@ -319,8 +319,8 @@ function module_enable($module_list, $disable_modules_installed_hook = FALSE) { system_list_reset(); module_list(TRUE); module_implements('', FALSE, TRUE); - // Force to regenerate the stored list of hook implementations. - registry_rebuild(); + // Update the registry to include the new enabled module. + registry_update(); // Refresh the schema to include the new enabled module. drupal_get_schema(NULL, TRUE); @@ -383,8 +383,8 @@ function module_disable($module_list) { // Invoke hook_modules_disabled before disabling modules, // so we can still call module hooks to get information. module_invoke_all('modules_disabled', $invoke_modules); - // Force to regenerate the stored list of hook implementations. - registry_rebuild(); + // Update the registry to remove the newly-disabled module. + registry_update(); } // If there remains no more node_access module, rebuilding will be diff --git a/includes/registry.inc b/includes/registry.inc index be7154851..16b869b76 100644 --- a/includes/registry.inc +++ b/includes/registry.inc @@ -17,9 +17,9 @@ */ /** - * @see registry_rebuild. + * @see registry_update(). */ -function _registry_rebuild() { +function _registry_update() { // The registry serves as a central autoloader for all classes, including // the database query builders. However, the registry rebuild process @@ -35,11 +35,12 @@ function _registry_rebuild() { require_once DRUPAL_ROOT . '/includes/database/' . $driver . '/query.inc'; // Get current list of modules and their files. - $modules = system_rebuild_module_data(); + $modules = db_query("SELECT * FROM {system} WHERE type = 'module'")->fetchAll(); // Get the list of files we are going to parse. $files = array(); foreach ($modules as &$module) { - $dir = dirname($module->uri); + $module->info = unserialize($module->info); + $dir = dirname($module->filename); // Store the module directory for use in hook_registry_files_alter(). $module->dir = $dir; -- cgit v1.2.3