[!!!][FEATURE] Move generated autoload info to typo3conf 66/50166/3
authorHelmut Hummel <info@helhum.io>
Mon, 10 Oct 2016 17:47:28 +0000 (19:47 +0200)
committerNicole Cordes <typo3@cordes.co>
Mon, 10 Oct 2016 21:53:52 +0000 (23:53 +0200)
It turned out to be misleading, that additional class loading
information of extensions (in non composer mode) is in the
typo3temp folder. These files were re-generated on the fly to
lower the impact of the new class loader. However the re-generation
can only be triggered at a late point during the bootstrap.

This caused issues, when extensions tried to hook in a earlier point
e.g. for providing an error or exception handler and removing the complete
typo3temp folder e.g. in deployment scenarios.

To make clear, that class loading information is not a cache,
it is moved to typo3conf.
Additionally the re-generation during the late bootstrap
now triggers a deprecation message.

Additionally to make it easy for users that are not familiar with
executing command line scripts, an action is added to the install tool
to dump autoload information.

Resolves: #78222
Releases: master
Change-Id: I4199b9cf00a5a5e9b9d57e5f7508d321d1c4f9ba
Reviewed-on: https://review.typo3.org/50166
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Andreas Fernandez <typo3@scripting-base.de>
Tested-by: Andreas Fernandez <typo3@scripting-base.de>
Reviewed-by: Jigal van Hemert <jigal.van.hemert@typo3.org>
Tested-by: Jigal van Hemert <jigal.van.hemert@typo3.org>
Reviewed-by: Nicole Cordes <typo3@cordes.co>
Tested-by: Nicole Cordes <typo3@cordes.co>
typo3/sysext/core/Build/UnitTestsBootstrap.php
typo3/sysext/core/Classes/Core/Bootstrap.php
typo3/sysext/core/Classes/Core/ClassLoadingInformation.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-78222-ExtensionAutoloadInformationIsNowInTypo3confautoload.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Deprecation-78222-LateGenerationOfAutoloadInformationIsDeprecated.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Feature-78222-DumpClassLoadingInformationUIInInstallTool.rst [new file with mode: 0644]
typo3/sysext/install/Classes/Controller/Action/Tool/ImportantActions.php
typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DumpAutoload.html [new file with mode: 0644]
typo3/sysext/install/Resources/Private/Templates/Action/Tool/ImportantActions.html

index edb0cd2..a13d94f 100644 (file)
@@ -59,7 +59,10 @@ call_user_func(function () {
         ->disableCoreCache()
         ->initializeCachingFramework()
         // Set all packages to active
-        ->initializePackageManagement(\TYPO3\CMS\Core\Package\UnitTestPackageManager::class)
-        // Find all class names
-        ->ensureClassLoadingInformationExists();
+        ->initializePackageManagement(\TYPO3\CMS\Core\Package\UnitTestPackageManager::class);
+
+    if (!\TYPO3\CMS\Core\Core\Bootstrap::usesComposerClassLoading()) {
+        // Dump autoload info if in non composer mode
+        \TYPO3\CMS\Core\Core\ClassLoadingInformation::dumpClassLoadingInformation();
+    }
 });
index f709e88..ee721ca 100644 (file)
@@ -438,10 +438,12 @@ class Bootstrap
      *
      * @return Bootstrap
      * @internal This is not a public API method, do not use in own extensions
+     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9. Use the Install Tool to dump autoload information.
      */
     public function ensureClassLoadingInformationExists()
     {
         if (!self::$usesComposerClassLoading && !ClassLoadingInformation::isClassLoadingInformationAvailable()) {
+            GeneralUtility::logDeprecatedFunction();
             ClassLoadingInformation::dumpClassLoadingInformation();
             ClassLoadingInformation::registerClassLoadingInformation();
         }
index bef37cc..49465e4 100644 (file)
@@ -33,12 +33,12 @@ class ClassLoadingInformation
     /**
      * Base directory storing all autoload information
      */
-    const AUTOLOAD_INFO_DIR = 'typo3temp/var/autoload/';
+    const AUTOLOAD_INFO_DIR = 'typo3conf/autoload/';
 
     /**
      * Base directory storing all autoload information in testing context
      */
-    const AUTOLOAD_INFO_DIR_TESTS = 'typo3temp/var/autoload-tests/';
+    const AUTOLOAD_INFO_DIR_TESTS = 'typo3conf/autoload-tests/';
 
     /**
      * Name of file that contains all classes-filename mappings
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-78222-ExtensionAutoloadInformationIsNowInTypo3confautoload.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-78222-ExtensionAutoloadInformationIsNowInTypo3confautoload.rst
new file mode 100644 (file)
index 0000000..197978b
--- /dev/null
@@ -0,0 +1,37 @@
+.. include:: ../../Includes.txt
+
+==============================================================================
+Breaking: #78222 - Extension autoload information is now in typo3conf/autoload
+==============================================================================
+
+See :forge:`78222`
+
+Description
+===========
+
+To make clear that autoload information is not a cache,
+the files are now moved from typo3temp to typo3conf.
+
+
+Impact
+======
+
+TYPO3 deployments which do not take advantage of composer, might need some adaption to also include the new location in typo3conf in the list of to be synced files.
+
+
+Affected Installations
+======================
+
+TYPO3 installation in non composer mode.
+
+
+Migration
+=========
+
+Class loading information can be re-dumped by
+
+* Activating or deactivating an extension
+* Running the dump command from the command line
+* In install tool (important actions)
+
+The autoload files should never be deleted, but always only be re-dumped.
\ No newline at end of file
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-78222-LateGenerationOfAutoloadInformationIsDeprecated.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-78222-LateGenerationOfAutoloadInformationIsDeprecated.rst
new file mode 100644 (file)
index 0000000..599b127
--- /dev/null
@@ -0,0 +1,37 @@
+.. include:: ../../Includes.txt
+
+===========================================================================
+Deprecation: #78222 - Late generation of autoload information is deprecated
+===========================================================================
+
+See :forge:`78222`
+
+Description
+===========
+
+If TYPO3 is in non composer mode, it used to automatically dump extension class loading information late during the bootstrap. This behavior is now deprecated.
+
+
+Impact
+======
+
+TYPO3 installations in non composer mode, now trigger a deprecation message
+in case extension autoload information is missing late in the bootstrap.
+
+
+Affected Installations
+======================
+
+TYPO3 installations in non composer mode with deleted extension autoload information.
+
+
+Migration
+=========
+
+Class loading information can be re-dumped by
+
+* Activating or deactivating an extension
+* Running the dump command from the command line
+* In install tool (important actions)
+
+The autoload files should never be deleted, but always only be re-dumped.
\ No newline at end of file
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-78222-DumpClassLoadingInformationUIInInstallTool.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-78222-DumpClassLoadingInformationUIInInstallTool.rst
new file mode 100644 (file)
index 0000000..d974de6
--- /dev/null
@@ -0,0 +1,19 @@
+.. include:: ../../Includes.txt
+
+===================================================================
+Feature: #78222 - Dump Class Loading Information UI in Install Tool
+===================================================================
+
+See :forge:`78222`
+
+Description
+===========
+
+It is now possible to dump class loading information in the install tool.
+
+
+Impact
+======
+
+Users who are not familiar with the command line,
+can now trigger a dump of class loading information in install tool.
\ No newline at end of file
index a46d226..c41dc7a 100644 (file)
@@ -15,6 +15,7 @@ namespace TYPO3\CMS\Install\Controller\Action\Tool;
  */
 
 use TYPO3\CMS\Core\Core\Bootstrap;
+use TYPO3\CMS\Core\Core\ClassLoadingInformation;
 use TYPO3\CMS\Core\Crypto\Random;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Database\Schema\SchemaMigrator;
@@ -53,6 +54,9 @@ class ImportantActions extends Action\AbstractAction
             $actionMessages[] = $this->clearAllCache();
             $actionMessages[] = $this->clearOpcodeCache();
         }
+        if (isset($this->postValues['set']['dumpAutoload'])) {
+            $actionMessages[] = $this->dumpAutoload();
+        }
         if (isset($this->postValues['set']['tcaMigrations'])) {
             $tcaMessages = $this->checkTcaMigrations();
 
@@ -224,6 +228,24 @@ class ImportantActions extends Action\AbstractAction
     }
 
     /**
+     * Dumps Extension Autoload Information
+     *
+     * @return \TYPO3\CMS\Install\Status\StatusInterface
+     */
+    protected function dumpAutoload(): \TYPO3\CMS\Install\Status\StatusInterface
+    {
+        if (Bootstrap::usesComposerClassLoading()) {
+            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\NoticeStatus::class);
+            $message->setTitle('Skipped generating additional class loading information in composer mode.');
+        } else {
+            ClassLoadingInformation::dumpClassLoadingInformation();
+            $message = GeneralUtility::makeInstance(\TYPO3\CMS\Install\Status\OkStatus::class);
+            $message->setTitle('Successfully dumped class loading information for extensions.');
+        }
+        return $message;
+    }
+
+    /**
      * Set new encryption key
      *
      * @return void
diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DumpAutoload.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/ImportantActions/DumpAutoload.html
new file mode 100644 (file)
index 0000000..d7a9225
--- /dev/null
@@ -0,0 +1,9 @@
+<h3>Dump Autoload Information</h3>
+<p>
+       This (re-)dumps autoload information for all active third party extensions.
+</p>
+
+<form method="post">
+       <f:render partial="Action/Common/HiddenFormFields" arguments="{_all}" />
+       <f:render partial="Action/Common/SubmitButton" arguments="{name:'dumpAutoload', text:'Create autoload information for extensions'}"/>
+</form>
index fb32140..6d935f0 100644 (file)
        <f:render partial="Action/Tool/ImportantActions/ClearAllCache" arguments="{_all}"/>
        <hr />
 
+       <f:if condition="{composerMode}">
+               <f:else>
+                       <f:render partial="Action/Tool/ImportantActions/DumpAutoload" arguments="{_all}"/>
+                       <hr />
+               </f:else>
+       </f:if>
+
        <f:render partial="Action/Tool/ImportantActions/ExtensionCompatibilityTester" arguments="{_all}"/>
        <hr />