/** * @param string $packageKey * @return \TYPO3\FLOW3\Error\Error|\TYPO3\FLOW3\Error\Message */ protected function freezePackage($packageKey) { try { $this->packageManager->freezePackage($packageKey); $message = new \TYPO3\FLOW3\Error\Message($packageKey . ' has been frozen', 1343231689); } catch (\LogicException $exception) { $message = new \TYPO3\FLOW3\Error\Error($exception->getMessage(), 1343231690); } catch (\TYPO3\FLOW3\Package\Exception\UnknownPackageException $exception) { $message = new \TYPO3\FLOW3\Error\Error($exception->getMessage(), 1343231691); } return $message; }
/** * Freeze a package * * This function marks a package as <b>frozen</b> in order to improve performance * in a development context. While a package is frozen, any modification of files * within that package won't be tracked and can lead to unexpected behavior. * * File monitoring won't consider the given package. Further more, reflection * data for classes contained in the package is cached persistently and loaded * directly on the first request after caches have been flushed. The precompiled * reflection data is stored in the <b>Configuration</b> directory of the * respective package. * * By specifying <b>all</b> as a package key, all currently frozen packages are * frozen (the default). * * @param string $packageKey Key of the package to freeze * @return void * @see typo3.flow3:package:unfreeze * @see typo3.flow3:package:refreeze */ public function freezeCommand($packageKey = 'all') { if (!$this->bootstrap->getContext()->isDevelopment()) { $this->outputLine('Package freezing is only supported in Development context.'); $this->quit(3); } $packagesToFreeze = array(); if ($packageKey === 'all') { foreach (array_keys($this->packageManager->getActivePackages()) as $packageKey) { if (!$this->packageManager->isPackageFrozen($packageKey)) { $packagesToFreeze[] = $packageKey; } } if ($packagesToFreeze === array()) { $this->outputLine('Nothing to do, all active packages were already frozen.'); $this->quit(0); } } elseif ($packageKey === 'blackberry') { $this->outputLine('http://bit.ly/freeze-blackberry'); $this->quit(42); } else { if (!$this->packageManager->isPackageActive($packageKey)) { if ($this->packageManager->isPackageAvailable($packageKey)) { $this->outputLine('Package "%s" is not active and thus cannot be frozen.', array($packageKey)); $this->quit(1); } else { $this->outputLine('Package "%s" is not available.', array($packageKey)); $this->quit(2); } } if ($this->packageManager->isPackageFrozen($packageKey)) { $this->outputLine('Package "%s" was already frozen.', array($packageKey)); $this->quit(0); } $packagesToFreeze = array($packageKey); } foreach ($packagesToFreeze as $packageKey) { $this->packageManager->freezePackage($packageKey); $this->outputLine('Froze package "%s".', array($packageKey)); } }