- Patch #661420 by justinrandell, David_Rothstein: made installation of modules much more efficient.

merge-requests/26/head
Dries Buytaert 2009-12-28 10:48:51 +00:00
parent d24e2c1384
commit 98b84b7adb
4 changed files with 33 additions and 18 deletions

View File

@ -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();
}
/**

View File

@ -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

View File

@ -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;

View File

@ -2192,7 +2192,7 @@ function hook_disable() {
* 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
* the related module's name and weight as used internally by
* _registry_rebuild() and related functions.
* _registry_update() and related functions.
*
* For example:
* @code
@ -2202,17 +2202,17 @@ function hook_disable() {
* );
* @endcode
* @param $modules
* List of all the modules provided as returned by drupal_system_listing().
* The list also contains the .info file information in the property 'info'.
* An additional 'dir' property has been added to the module information
* which provides the path to the directory in which the module resides. The
* example shows how to take advantage of the property both properties.
* An array containing all module information stored in the {system} table.
* Each element of the array also contains the module's .info file
* information in the property 'info'. An additional 'dir' property has been
* added to the module information which provides the path to the directory
* 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()
*/
function hook_registry_files_alter(&$files, $module_cache) {
function hook_registry_files_alter(&$files, $modules) {
foreach ($modules as $module) {
// Only add test files for disabled modules, as enabled modules should
// already include any test files they provide.