function system_update_8601

Fix missing install profile after updating to Drupal 8.6.9 with Drush 8.

File

core/modules/system/system.install, line 2528

Code

function system_update_8601() {
  $extension_config = \Drupal::configFactory()->getEditable('core.extension');
  $install_profile = $extension_config->get('profile');
  if (!$install_profile) {
    // There's no install profile configured.
    return;
  }
  $modules = $extension_config->get('module');
  if (isset($modules[$install_profile])) {
    // The install profile is already in the installed module list.
    return;
  }
  // Ensure the install profile is available.
  if (!\Drupal::service('extension.list.module')->exists($install_profile)) {
    return t('The %install_profile install profile configured in core.extension is not available.', [
      '%install_profile' => $install_profile,
    ]);
  }
  // Add the install profile to the list of enabled modules.
  $modules[$install_profile] = 1000;
  $modules = module_config_sort($modules);
  $extension_config->set('module', $modules)
    ->save(TRUE);
  // Build a module list from the updated extension configuration.
  $current_module_filenames = \Drupal::moduleHandler()->getModuleList();
  $current_modules = array_fill_keys(array_keys($current_module_filenames), 0);
  $current_modules = module_config_sort(array_merge($current_modules, $extension_config->get('module')));
  $module_filenames = [];
  foreach ($current_modules as $name => $weight) {
    if (isset($current_module_filenames[$name])) {
      $module_filenames[$name] = $current_module_filenames[$name];
    }
    else {
      $module_path = \Drupal::service('extension.list.module')->getPath($name);
      $pathname = "{$module_path}/{$name}.info.yml";
      $filename = file_exists($module_path . "/{$name}.module") ? "{$name}.module" : NULL;
      $module_filenames[$name] = new Extension(\Drupal::root(), 'module', $pathname, $filename);
    }
  }
  // Update the module handler list to contain the missing install profile.
  \Drupal::moduleHandler()->setModuleList($module_filenames);
  \Drupal::moduleHandler()->load($install_profile);
  // Clear the static cache of the "extension.list.module" service to pick
  // up the new install profile correctly.
  \Drupal::service('extension.list.profile')->reset();
  // Clear the static cache of the "extension.list.module" service to pick
  // up the new module, since it merges the installation status of modules
  // into its statically cached list.
  \Drupal::service('extension.list.module')->reset();
  // Update the kernel to include the missing profile.
  \Drupal::service('kernel')->updateModules($module_filenames, $module_filenames);
  return t('The %install_profile install profile has been added to the installed module list.', [
    '%install_profile' => $install_profile,
  ]);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.