- Patch by justinrandell: cleaning up the Drupal bootstrap code, removing bootstrap flag in system table.

merge-requests/26/head
Dries Buytaert 2008-11-24 10:41:40 +00:00
parent 8e985b3fbc
commit 5083e13522
10 changed files with 26 additions and 61 deletions

View File

@ -673,18 +673,6 @@ function page_get_cache() {
return $cache;
}
/**
* Call all init or exit hooks without including all modules.
*
* @param $hook
* The name of the bootstrap hook we wish to invoke.
*/
function bootstrap_invoke_all($hook) {
foreach (module_implements($hook) as $module) {
module_invoke($module, $hook);
}
}
/**
* Includes a file with the provided type and name. This prevents
* including a theme, engine, module, etc., more than once.
@ -789,13 +777,6 @@ function drupal_page_cache_header($cache) {
print $cache->data;
}
/**
* Define the critical hooks that force modules to always be loaded.
*/
function bootstrap_hooks() {
return array('boot', 'exit');
}
/**
* Unserializes and appends elements from a serialized string.
*
@ -1157,14 +1138,14 @@ function _drupal_bootstrap($phase) {
if (!$cache || $cache_mode != CACHE_AGGRESSIVE) {
// Load module handling.
require_once DRUPAL_ROOT . '/includes/module.inc';
bootstrap_invoke_all('boot');
module_invoke_all('boot');
}
// If there is a cached page, display it.
if ($cache) {
drupal_page_cache_header($cache);
// If the skipping of the bootstrap hooks is not enforced, call hook_exit.
if ($cache_mode != CACHE_AGGRESSIVE) {
bootstrap_invoke_all('exit');
module_invoke_all('exit');
}
// We are done.
exit;
@ -1368,7 +1349,7 @@ function drupal_get_schema($table = NULL, $rebuild = FALSE) {
// "prime" module_list() here to to values we want, specifically
// "yes rebuild the list and don't limit to bootstrap".
// TODO: Remove this call after http://drupal.org/node/222109 is fixed.
module_list(TRUE, FALSE);
module_list(TRUE);
module_load_all_includes('install');
}

View File

@ -571,7 +571,7 @@ function drupal_install_system() {
$system_versions = drupal_get_schema_versions('system');
$system_version = $system_versions ? max($system_versions) : SCHEMA_INSTALLED;
db_query("INSERT INTO {system} (filename, name, type, owner, status, bootstrap, schema_version) VALUES('%s', '%s', '%s', '%s', %d, %d, %d)", $system_path . '/system.module', 'system', 'module', '', 1, 0, $system_version);
db_query("INSERT INTO {system} (filename, name, type, owner, status, schema_version) VALUES('%s', '%s', '%s', '%s', %d, %d)", $system_path . '/system.module', 'system', 'module', '', 1, $system_version);
// Now that we've installed things properly, bootstrap the full Drupal environment
drupal_install_init_database();
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

View File

@ -21,7 +21,7 @@ define('MODULE_IMPLEMENTS_CLEAR_CACHE', -2);
* Load all the modules that have been enabled in the system table.
*/
function module_load_all() {
foreach (module_list(TRUE, FALSE) as $module) {
foreach (module_list(TRUE) as $module) {
drupal_load('module', $module);
}
}
@ -33,9 +33,6 @@ function module_load_all() {
* @param $refresh
* Whether to force the module list to be regenerated (such as after the
* administrator has changed the system settings).
* @param $bootstrap
* Whether to return the reduced set of modules loaded in "bootstrap mode"
* for cached pages. See bootstrap.inc.
* @param $sort
* By default, modules are ordered by weight and filename. Set this option to
* TRUE to return a module list ordered only by module name.
@ -46,7 +43,7 @@ function module_load_all() {
* An associative array whose keys and values are the names of all loaded
* modules.
*/
function module_list($refresh = FALSE, $bootstrap = TRUE, $sort = FALSE, $fixed_list = NULL) {
function module_list($refresh = FALSE, $sort = FALSE, $fixed_list = NULL) {
static $list = array(), $sorted_list;
if (empty($list) || $refresh || $fixed_list) {
@ -59,12 +56,7 @@ function module_list($refresh = FALSE, $bootstrap = TRUE, $sort = FALSE, $fixed_
}
}
else {
if ($bootstrap) {
$result = db_query("SELECT name, filename FROM {system} WHERE type = 'module' AND status = 1 AND bootstrap = 1 ORDER BY weight ASC, filename ASC");
}
else {
$result = db_query("SELECT name, filename FROM {system} WHERE type = 'module' AND status = 1 ORDER BY weight ASC, filename ASC");
}
$result = db_query("SELECT name, filename FROM {system} WHERE type = 'module' AND status = 1 ORDER BY weight ASC, filename ASC");
while ($module = db_fetch_object($result)) {
if (file_exists($module->filename)) {
drupal_get_filename('module', $module->name, $module->filename);
@ -125,24 +117,14 @@ function module_rebuild_cache() {
// modify the data in the .info files if necessary.
drupal_alter('system_info', $files[$filename]->info, $files[$filename]);
// Log the critical hooks implemented by this module.
$bootstrap = 0;
foreach (bootstrap_hooks() as $hook) {
// Only look for hooks in installed modules.
if (!empty($file->status) && in_array($file->name, module_implements($hook))) {
$bootstrap = 1;
break;
}
}
// Update the contents of the system table:
if (isset($file->status) || (isset($file->old_filename) && $file->old_filename != $file->filename)) {
db_query("UPDATE {system} SET info = '%s', name = '%s', filename = '%s', bootstrap = %d WHERE filename = '%s'", serialize($files[$filename]->info), $file->name, $file->filename, $bootstrap, $file->old_filename);
db_query("UPDATE {system} SET info = '%s', name = '%s', filename = '%s' WHERE filename = '%s'", serialize($files[$filename]->info), $file->name, $file->filename, $file->old_filename);
}
else {
// This is a new module.
$files[$filename]->status = 0;
db_query("INSERT INTO {system} (name, info, type, filename, status, bootstrap) VALUES ('%s', '%s', '%s', '%s', %d, %d)", $file->name, serialize($files[$filename]->info), 'module', $file->filename, 0, $bootstrap);
db_query("INSERT INTO {system} (name, info, type, filename, status) VALUES ('%s', '%s', '%s', '%s', %d)", $file->name, serialize($files[$filename]->info), 'module', $file->filename, 0);
}
}
$files = _module_build_dependencies($files);
@ -295,7 +277,7 @@ function module_enable($module_list) {
if (!empty($invoke_modules)) {
// Refresh the module list to include the new enabled module.
module_list(TRUE, FALSE);
module_list(TRUE);
// Force to regenerate the stored list of hook implementations.
registry_rebuild();
}
@ -345,7 +327,7 @@ function module_disable($module_list) {
// so we can still call module hooks to get information.
module_invoke_all('modules_disabled', $invoke_modules);
// Refresh the module list to exclude the disabled modules.
module_list(TRUE, FALSE);
module_list(TRUE);
// Force to regenerate the stored list of hook implementations.
registry_rebuild();
}

View File

@ -39,7 +39,7 @@ function _drupal_maintenance_theme() {
// Load module basics (needed for hook invokes).
$module_list['system']['filename'] = 'modules/system/system.module';
$module_list['filter']['filename'] = 'modules/filter/filter.module';
module_list(TRUE, FALSE, FALSE, $module_list);
module_list(TRUE, FALSE, $module_list);
drupal_load('module', 'system');
drupal_load('module', 'filter');

View File

@ -52,7 +52,7 @@ function install_main() {
include_once DRUPAL_ROOT . '/includes/module.inc';
$module_list['system']['filename'] = 'modules/system/system.module';
$module_list['filter']['filename'] = 'modules/filter/filter.module';
module_list(TRUE, FALSE, FALSE, $module_list);
module_list(TRUE, FALSE, $module_list);
drupal_load('module', 'system');
drupal_load('module', 'filter');

View File

@ -940,7 +940,7 @@ function system_modules_submit($form, &$form_state) {
drupal_install_modules($new_modules);
}
$current_module_list = module_list(TRUE, FALSE);
$current_module_list = module_list(TRUE);
if ($old_module_list != $current_module_list) {
drupal_set_message(t('The configuration options have been saved.'));
}

View File

@ -1208,12 +1208,6 @@ function system_schema() {
'not null' => TRUE,
'default' => 0,
),
'bootstrap' => array(
'description' => "Boolean indicating whether this module is loaded during Drupal's early bootstrapping phase (e.g. even before the page cache is consulted).",
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
'schema_version' => array(
'description' => "The module's database schema version number. -1 if the module is not installed (its tables do not exist); 0 or the largest N of the module's hook_update_N() function that has either been run or existed when the module was first installed.",
'type' => 'int',
@ -1236,7 +1230,6 @@ function system_schema() {
'primary key' => array('filename'),
'indexes' => array(
'modules' => array(array('type', 12), 'status', 'weight', 'filename'),
'bootstrap' => array(array('type', 12), 'status', 'bootstrap', 'weight', 'filename'),
),
);
@ -3130,6 +3123,15 @@ function system_update_7013() {
return $ret;
}
/**
* Drop the bootstrap column from the {system} table.
*/
function system_update_7014() {
$ret = array();
db_drop_field($ret, 'system', 'bootstrap');
return $ret;
}
/**
* @} End of "defgroup updates-6.x-to-7.x"
* The next series of updates should start at 8000.

View File

@ -1088,7 +1088,7 @@ function system_theme_data() {
$theme->owner = '';
}
db_query("INSERT INTO {system} (name, owner, info, type, filename, status, bootstrap) VALUES ('%s', '%s', '%s', '%s', '%s', %d, %d)", $theme->name, $theme->owner, serialize($theme->info), 'theme', $theme->filename, isset($theme->status) ? $theme->status : 0, 0);
db_query("INSERT INTO {system} (name, owner, info, type, filename, status) VALUES ('%s', '%s', '%s', '%s', '%s', %d)", $theme->name, $theme->owner, serialize($theme->info), 'theme', $theme->filename, isset($theme->status) ? $theme->status : 0);
}
return $themes;

View File

@ -133,7 +133,7 @@ class EnableDisableCoreTestCase extends DrupalWebTestCase {
* @param boolean $enabled Module state.
*/
function assertModules(Array $modules, $enabled) {
module_list(TRUE, FALSE);
module_list(TRUE);
foreach ($modules as $module) {
if ($enabled) {
$message = 'Module "@module" is enabled.';

View File

@ -663,7 +663,7 @@ if (empty($op)) {
include_once DRUPAL_ROOT . '/includes/module.inc';
$module_list['system']['filename'] = 'modules/system/system.module';
$module_list['filter']['filename'] = 'modules/filter/filter.module';
module_list(TRUE, FALSE, FALSE, $module_list);
module_list(TRUE, FALSE, $module_list);
drupal_load('module', 'system');
drupal_load('module', 'filter');