Commit 98b84b7a authored by Dries's avatar Dries

- Patch #661420 by justinrandell, David_Rothstein: made installation of...

- Patch #661420 by justinrandell, David_Rothstein: made installation of modules much more efficient.
parent d24e2c13
...@@ -2098,8 +2098,22 @@ function _registry_check_code($type, $name = NULL) { ...@@ -2098,8 +2098,22 @@ function _registry_check_code($type, $name = NULL) {
* each interface or class in the database. * each interface or class in the database.
*/ */
function registry_rebuild() { 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'; require_once DRUPAL_ROOT . '/includes/registry.inc';
_registry_rebuild(); _registry_update();
} }
/** /**
......
...@@ -319,8 +319,8 @@ function module_enable($module_list, $disable_modules_installed_hook = FALSE) { ...@@ -319,8 +319,8 @@ function module_enable($module_list, $disable_modules_installed_hook = FALSE) {
system_list_reset(); system_list_reset();
module_list(TRUE); module_list(TRUE);
module_implements('', FALSE, TRUE); module_implements('', FALSE, TRUE);
// Force to regenerate the stored list of hook implementations. // Update the registry to include the new enabled module.
registry_rebuild(); registry_update();
// Refresh the schema to include the new enabled module. // Refresh the schema to include the new enabled module.
drupal_get_schema(NULL, TRUE); drupal_get_schema(NULL, TRUE);
...@@ -383,8 +383,8 @@ function module_disable($module_list) { ...@@ -383,8 +383,8 @@ function module_disable($module_list) {
// Invoke hook_modules_disabled before disabling modules, // Invoke hook_modules_disabled before disabling modules,
// so we can still call module hooks to get information. // so we can still call module hooks to get information.
module_invoke_all('modules_disabled', $invoke_modules); module_invoke_all('modules_disabled', $invoke_modules);
// Force to regenerate the stored list of hook implementations. // Update the registry to remove the newly-disabled module.
registry_rebuild(); registry_update();
} }
// If there remains no more node_access module, rebuilding will be // If there remains no more node_access module, rebuilding will be
......
...@@ -17,9 +17,9 @@ ...@@ -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 registry serves as a central autoloader for all classes, including
// the database query builders. However, the registry rebuild process // the database query builders. However, the registry rebuild process
...@@ -35,11 +35,12 @@ function _registry_rebuild() { ...@@ -35,11 +35,12 @@ function _registry_rebuild() {
require_once DRUPAL_ROOT . '/includes/database/' . $driver . '/query.inc'; require_once DRUPAL_ROOT . '/includes/database/' . $driver . '/query.inc';
// Get current list of modules and their files. // 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. // Get the list of files we are going to parse.
$files = array(); $files = array();
foreach ($modules as &$module) { 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(). // Store the module directory for use in hook_registry_files_alter().
$module->dir = $dir; $module->dir = $dir;
......
...@@ -2192,7 +2192,7 @@ function hook_disable() { ...@@ -2192,7 +2192,7 @@ function hook_disable() {
* files found in each enabled module's info file and the core includes * files found in each enabled module's info file and the core includes
* directory. The array is keyed by the file path and contains an array of * directory. The array is keyed by the file path and contains an array of
* the related module's name and weight as used internally by * the related module's name and weight as used internally by
* _registry_rebuild() and related functions. * _registry_update() and related functions.
* *
* For example: * For example:
* @code * @code
...@@ -2202,17 +2202,17 @@ function hook_disable() { ...@@ -2202,17 +2202,17 @@ function hook_disable() {
* ); * );
* @endcode * @endcode
* @param $modules * @param $modules
* List of all the modules provided as returned by drupal_system_listing(). * An array containing all module information stored in the {system} table.
* The list also contains the .info file information in the property 'info'. * Each element of the array also contains the module's .info file
* An additional 'dir' property has been added to the module information * information in the property 'info'. An additional 'dir' property has been
* which provides the path to the directory in which the module resides. The * added to the module information which provides the path to the directory
* example shows how to take advantage of the property both properties. * in which the module resides. The example shows how to take advantage of
* * both properties.
* @see _registry_rebuild() *
* @see drupal_system_listing() * @see _registry_update()
* @see simpletest_test_get_all() * @see simpletest_test_get_all()
*/ */
function hook_registry_files_alter(&$files, $module_cache) { function hook_registry_files_alter(&$files, $modules) {
foreach ($modules as $module) { foreach ($modules as $module) {
// Only add test files for disabled modules, as enabled modules should // Only add test files for disabled modules, as enabled modules should
// already include any test files they provide. // already include any test files they provide.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment