/**
  * @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));
     }
 }