/**
  * Writes a package or profile's files to an archive.
  *
  * @param array &$return
  *   The return value, passed by reference.
  * @param \Drupal\features\Package $package
  *   The package or profile.
  * @param ArchiveTar $archiver
  *   The archiver.
  */
 protected function generatePackage(array &$return, Package $package, ArchiveTar $archiver)
 {
     $success = TRUE;
     foreach ($package->getFiles() as $file) {
         try {
             $this->generateFile($package->getDirectory(), $file, $archiver);
         } catch (\Exception $exception) {
             $this->failure($return, $package, $exception);
             $success = FALSE;
             break;
         }
     }
     if ($success) {
         $this->success($return, $package);
     }
 }
 /**
  * Registers a failed package or profile write operation.
  *
  * @param array &$return
  *   The return value, passed by reference.
  * @param \Drupal\features\Package $package
  *   The package or profile.
  * @param \Exception $exception
  *   The exception object.
  * @param string $message
  *   Error message when there isn't an Exception object.
  */
 protected function failure(array &$return, Package $package, \Exception $exception = NULL, $message = '')
 {
     $type = $package->getType() == 'module' ? $this->t('Package') : $this->t('Profile');
     $return[] = ['success' => FALSE, 'display' => TRUE, 'message' => '@type @package not written to @directory. Error: @error.', 'variables' => ['@type' => $type, '@package' => $package->getName(), '@directory' => $package->getDirectory(), '@error' => isset($exception) ? $exception->getMessage() : $message]];
 }