diff --git a/core/core.services.yml b/core/core.services.yml index 7b41a1d..2ca6e94 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -243,10 +243,6 @@ services: public: false tags: - { name: backend_overridable } - config.storage.file: - class: Drupal\Core\Config\FileStorage - factory: Drupal\Core\Config\FileStorageFactory::getActive - public: false config.storage.staging: class: Drupal\Core\Config\FileStorage factory: Drupal\Core\Config\FileStorageFactory::getStaging diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc index 9849d43..f30ba15 100644 --- a/core/includes/bootstrap.inc +++ b/core/includes/bootstrap.inc @@ -100,6 +100,9 @@ * $config_directories key for active directory. * * @see config_get_config_directory() + * + * @deprecated Drupal 8.0.0 no longer creates an active directory. This will be + * removed in Drupal 9.0.x */ const CONFIG_ACTIVE_DIRECTORY = 'active'; @@ -163,7 +166,7 @@ function conf_path($require_settings = TRUE, $reset = FALSE, Request $request = * * @param string $type * (optional) The type of config directory to return. Drupal core provides - * 'active' and 'staging'. Defaults to CONFIG_ACTIVE_DIRECTORY. + * 'staging'. Defaults to CONFIG_ACTIVE_DIRECTORY. * * @return string * The configuration directory path. diff --git a/core/includes/file.inc b/core/includes/file.inc index 4440d41..0708707 100644 --- a/core/includes/file.inc +++ b/core/includes/file.inc @@ -427,7 +427,6 @@ function file_ensure_htaccess() { file_save_htaccess('private://', TRUE); } file_save_htaccess('temporary://', TRUE); - file_save_htaccess(config_get_config_directory(), TRUE); file_save_htaccess(config_get_config_directory(CONFIG_STAGING_DIRECTORY), TRUE); } diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc index 6f1add0..b846a91 100644 --- a/core/includes/install.core.inc +++ b/core/includes/install.core.inc @@ -366,7 +366,7 @@ function install_begin_request($class_loader, &$install_state) { \Drupal::setContainer($container); // Determine whether base system services are ready to operate. - $install_state['config_verified'] = install_ensure_config_directory(CONFIG_ACTIVE_DIRECTORY) && install_ensure_config_directory(CONFIG_STAGING_DIRECTORY); + $install_state['config_verified'] = install_ensure_config_directory(CONFIG_STAGING_DIRECTORY); $install_state['database_verified'] = install_verify_database_settings(); $install_state['settings_verified'] = $install_state['config_verified'] && $install_state['database_verified']; diff --git a/core/includes/install.inc b/core/includes/install.inc index 6f7c8c7..f095573 100644 --- a/core/includes/install.inc +++ b/core/includes/install.inc @@ -468,12 +468,6 @@ function drupal_install_config_directories() { // manually defined in the existing already. $settings = []; $config_directories_hash = Crypt::randomBytesBase64(55); - if (empty($config_directories[CONFIG_ACTIVE_DIRECTORY])) { - $settings['config_directories'][CONFIG_ACTIVE_DIRECTORY] = (object) [ - 'value' => conf_path() . '/files/config_' . $config_directories_hash . '/active', - 'required' => TRUE, - ]; - } if (empty($config_directories[CONFIG_STAGING_DIRECTORY])) { $settings['config_directories'][CONFIG_STAGING_DIRECTORY] = (object) [ 'value' => conf_path() . '/files/config_' . $config_directories_hash . '/staging', @@ -486,36 +480,25 @@ function drupal_install_config_directories() { drupal_rewrite_settings($settings); } - // Ensure the config directories exist or can be created, and are writable. - foreach (array(CONFIG_ACTIVE_DIRECTORY, CONFIG_STAGING_DIRECTORY) as $config_type) { - // This should never fail, since if the config directory was specified in - // settings.php it will have already been created and verified earlier, and - // if it wasn't specified in settings.php, it is created here inside the - // public files directory, which has already been verified to be writable - // itself. But if it somehow fails anyway, the installation cannot proceed. - // Bail out using a similar error message as in system_requirements(). - if (!install_ensure_config_directory($config_type)) { - throw new Exception(t('The directory %directory could not be created or could not be made writable. To proceed with the installation, either create the directory and modify its permissions manually or ensure that the installer has the permissions to create it automatically. For more information, see the online handbook.', array( - '%directory' => config_get_config_directory($config_type), - '@handbook_url' => 'https://www.drupal.org/server-permissions', - ))); - } - - // Put a README.txt into each config directory. This is required so that - // they can later be added to git. Since these directories are auto- - // created, we have to write out the README rather than just adding it - // to the drupal core repo. - switch ($config_type) { - case CONFIG_ACTIVE_DIRECTORY: - $text = 'If you change the configuration system to use file storage instead of the database for the active Drupal site configuration, this directory will contain the active configuration. By default, this directory will be empty. If you are using files to store the active configuration, and you want to move it between environments, files from this directory should be placed in the staging directory on the target server. To make this configuration active, visit admin/config/development/configuration/sync on the target server.'; - break; - case CONFIG_STAGING_DIRECTORY: - $text = 'This directory contains configuration to be imported into your Drupal site. To make this configuration active, visit admin/config/development/configuration/sync.'; - break; - } - $text .= ' For information about deploying configuration between servers, see https://www.drupal.org/documentation/administer/config'; - file_put_contents(config_get_config_directory($config_type) . '/README.txt', $text); + // This should never fail, since if the config directory was specified in + // settings.php it will have already been created and verified earlier, and + // if it wasn't specified in settings.php, it is created here inside the + // public files directory, which has already been verified to be writable + // itself. But if it somehow fails anyway, the installation cannot proceed. + // Bail out using a similar error message as in system_requirements(). + if (!install_ensure_config_directory(CONFIG_STAGING_DIRECTORY)) { + throw new Exception(t('The directory %directory could not be created or could not be made writable. To proceed with the installation, either create the directory and modify its permissions manually or ensure that the installer has the permissions to create it automatically. For more information, see the online handbook.', array( + '%directory' => config_get_config_directory(CONFIG_STAGING_DIRECTORY), + '@handbook_url' => 'https://www.drupal.org/server-permissions', + ))); } + + // Put a README.txt into each config directory. This is required so that + // they can later be added to git. Since these directories are auto- + // created, we have to write out the README rather than just adding it + // to the drupal core repo. + $text = 'This directory contains configuration to be imported into your Drupal site. To make this configuration active, visit admin/config/development/configuration/sync.' .' For information about deploying configuration between servers, see https://www.drupal.org/documentation/administer/config'; + file_put_contents(config_get_config_directory(CONFIG_STAGING_DIRECTORY) . '/README.txt', $text); } /** diff --git a/core/lib/Drupal/Core/Config/BootstrapConfigStorageFactory.php b/core/lib/Drupal/Core/Config/BootstrapConfigStorageFactory.php index c2abc3b..0f20e48 100644 --- a/core/lib/Drupal/Core/Config/BootstrapConfigStorageFactory.php +++ b/core/lib/Drupal/Core/Config/BootstrapConfigStorageFactory.php @@ -48,7 +48,13 @@ public static function getDatabaseStorage() { /** * Returns a File-based configuration storage implementation. * + * If there is no active configuration directory calling this method will + * result in an error. + * * @return \Drupal\Core\Config\FileStorage + * + * @deprecated Drupal 8.0.0 no longer creates an active directory. This will + * be removed in Drupal 9.0.x. */ public static function getFileStorage() { return new FileStorage(config_get_config_directory(CONFIG_ACTIVE_DIRECTORY)); diff --git a/core/lib/Drupal/Core/Config/FileStorageFactory.php b/core/lib/Drupal/Core/Config/FileStorageFactory.php index 1768df4..0fd3e5a 100644 --- a/core/lib/Drupal/Core/Config/FileStorageFactory.php +++ b/core/lib/Drupal/Core/Config/FileStorageFactory.php @@ -15,6 +15,9 @@ class FileStorageFactory { * Returns a FileStorage object working with the active config directory. * * @return \Drupal\Core\Config\FileStorage FileStorage + * + * @deprecated Drupal 8.0.0 no longer creates an active directory. This will + * be removed in Drupal 9.0.x */ static function getActive() { return new FileStorage(config_get_config_directory(CONFIG_ACTIVE_DIRECTORY)); diff --git a/core/modules/config/src/Tests/ConfigFileContentTest.php b/core/modules/config/src/Tests/ConfigFileContentTest.php index 3a62f85..ebe08ec 100644 --- a/core/modules/config/src/Tests/ConfigFileContentTest.php +++ b/core/modules/config/src/Tests/ConfigFileContentTest.php @@ -210,7 +210,7 @@ function testSerialization() { ); // Encode and write, and reload and decode the configuration data. - $filestorage = new FileStorage($this->configDirectories[CONFIG_ACTIVE_DIRECTORY]); + $filestorage = new FileStorage($this->configDirectories[CONFIG_STAGING_DIRECTORY]); $filestorage->write($name, $config_data); $config_parsed = $filestorage->read($name); diff --git a/core/modules/config/src/Tests/Storage/CachedStorageTest.php b/core/modules/config/src/Tests/Storage/CachedStorageTest.php index a88b344..8ca0eed 100644 --- a/core/modules/config/src/Tests/Storage/CachedStorageTest.php +++ b/core/modules/config/src/Tests/Storage/CachedStorageTest.php @@ -36,7 +36,10 @@ class CachedStorageTest extends ConfigStorageTestBase { protected function setUp() { parent::setUp(); - $this->fileStorage = new FileStorage($this->configDirectories[CONFIG_ACTIVE_DIRECTORY]); + // Create a directory. + $dir = $this->publicFilesDirectory . '/config'; + mkdir($dir); + $this->fileStorage = new FileStorage($dir); $this->storage = new CachedStorage($this->fileStorage, \Drupal::service('cache.config')); $this->cache = \Drupal::service('cache_factory')->get('config'); // ::listAll() verifications require other configuration data to exist. diff --git a/core/modules/config/src/Tests/Storage/FileStorageTest.php b/core/modules/config/src/Tests/Storage/FileStorageTest.php index dae7266..b1b5d8b 100644 --- a/core/modules/config/src/Tests/Storage/FileStorageTest.php +++ b/core/modules/config/src/Tests/Storage/FileStorageTest.php @@ -18,12 +18,22 @@ class FileStorageTest extends ConfigStorageTestBase { /** + * A directory to store configuration in. + * + * @var string + */ + protected $directory; + + /** * {@inheritdoc} */ protected function setUp() { parent::setUp(); - $this->storage = new FileStorage($this->configDirectories[CONFIG_ACTIVE_DIRECTORY]); - $this->invalidStorage = new FileStorage($this->configDirectories[CONFIG_ACTIVE_DIRECTORY] . '/nonexisting'); + // Create a directory. + $this->directory = $this->publicFilesDirectory . '/config'; + mkdir($this->directory); + $this->storage = new FileStorage($this->directory); + $this->invalidStorage = new FileStorage($this->directory . '/nonexisting'); // FileStorage::listAll() requires other configuration data to exist. $this->storage->write('system.performance', $this->config('system.performance')->get()); @@ -60,7 +70,7 @@ public function testlistAll() { $this->assertIdentical($config_files, $expected_files, 'Relative path, two config files found.'); // Initialize FileStorage with absolute file path. - $absolute_path = realpath($this->configDirectories[CONFIG_ACTIVE_DIRECTORY]); + $absolute_path = realpath($this->directory); $storage_absolute_path = new FileStorage($absolute_path); $config_files = $storage_absolute_path->listAll(); $this->assertIdentical($config_files, $expected_files, 'Absolute path, two config files found.'); diff --git a/core/modules/simpletest/src/KernelTestBase.php b/core/modules/simpletest/src/KernelTestBase.php index e8d1ba2..e8d89f4 100644 --- a/core/modules/simpletest/src/KernelTestBase.php +++ b/core/modules/simpletest/src/KernelTestBase.php @@ -112,23 +112,20 @@ protected function beforePrepareEnvironment() { * @see config_get_config_directory() * * @throws \RuntimeException - * Thrown when CONFIG_ACTIVE_DIRECTORY or CONFIG_STAGING_DIRECTORY cannot - * be created or made writable. + * Thrown when CONFIG_STAGING_DIRECTORY cannot be created or made writable. */ protected function prepareConfigDirectories() { $this->configDirectories = array(); include_once DRUPAL_ROOT . '/core/includes/install.inc'; - foreach (array(CONFIG_ACTIVE_DIRECTORY, CONFIG_STAGING_DIRECTORY) as $type) { - // Assign the relative path to the global variable. - $path = $this->siteDirectory . '/config_' . $type; - $GLOBALS['config_directories'][$type] = $path; - // Ensure the directory can be created and is writeable. - if (!install_ensure_config_directory($type)) { - throw new \RuntimeException("Failed to create '$type' config directory $path"); - } - // Provide the already resolved path for tests. - $this->configDirectories[$type] = $path; + // Assign the relative path to the global variable. + $path = $this->siteDirectory . '/config_' . CONFIG_STAGING_DIRECTORY; + $GLOBALS['config_directories'][CONFIG_STAGING_DIRECTORY] = $path; + // Ensure the directory can be created and is writeable. + if (!install_ensure_config_directory(CONFIG_STAGING_DIRECTORY)) { + throw new \RuntimeException("Failed to create '$type' config directory $path"); } + // Provide the already resolved path for tests. + $this->configDirectories[CONFIG_STAGING_DIRECTORY] = $path; } /** diff --git a/core/modules/system/src/Tests/Installer/InstallerExistingSettingsNoProfileTest.php b/core/modules/system/src/Tests/Installer/InstallerExistingSettingsNoProfileTest.php index 61dd5be..9e97b38 100644 --- a/core/modules/system/src/Tests/Installer/InstallerExistingSettingsNoProfileTest.php +++ b/core/modules/system/src/Tests/Installer/InstallerExistingSettingsNoProfileTest.php @@ -44,16 +44,11 @@ protected function setUp() { // Pre-configure config directories. $this->settings['config_directories'] = array( - CONFIG_ACTIVE_DIRECTORY => (object) array( - 'value' => conf_path() . '/files/config_active', - 'required' => TRUE, - ), CONFIG_STAGING_DIRECTORY => (object) array( 'value' => conf_path() . '/files/config_staging', 'required' => TRUE, ), ); - mkdir($this->settings['config_directories'][CONFIG_ACTIVE_DIRECTORY]->value, 0777, TRUE); mkdir($this->settings['config_directories'][CONFIG_STAGING_DIRECTORY]->value, 0777, TRUE); parent::setUp(); diff --git a/core/modules/system/src/Tests/Installer/InstallerExistingSettingsTest.php b/core/modules/system/src/Tests/Installer/InstallerExistingSettingsTest.php index 25be1ef..dba2fd8 100644 --- a/core/modules/system/src/Tests/Installer/InstallerExistingSettingsTest.php +++ b/core/modules/system/src/Tests/Installer/InstallerExistingSettingsTest.php @@ -50,16 +50,11 @@ protected function setUp() { // Pre-configure config directories. $this->settings['config_directories'] = array( - CONFIG_ACTIVE_DIRECTORY => (object) array( - 'value' => conf_path() . '/files/config_active', - 'required' => TRUE, - ), CONFIG_STAGING_DIRECTORY => (object) array( 'value' => conf_path() . '/files/config_staging', 'required' => TRUE, ), ); - mkdir($this->settings['config_directories'][CONFIG_ACTIVE_DIRECTORY]->value, 0777, TRUE); mkdir($this->settings['config_directories'][CONFIG_STAGING_DIRECTORY]->value, 0777, TRUE); parent::setUp();