diff --git a/src/Composer/Command/ArchiveCommand.php b/src/Composer/Command/ArchiveCommand.php index b8c439678..b70f06c27 100644 --- a/src/Composer/Command/ArchiveCommand.php +++ b/src/Composer/Command/ArchiveCommand.php @@ -42,6 +42,7 @@ class ArchiveCommand extends Command new InputArgument('version', InputArgument::OPTIONAL, 'A version constraint to find the package to archive'), new InputOption('format', 'f', InputOption::VALUE_OPTIONAL, 'Format of the resulting archive: tar or zip'), new InputOption('dir', false, InputOption::VALUE_OPTIONAL, 'Write the archive to this directory'), + new InputOption('file', false, InputOption::VALUE_OPTIONAL, 'Write the archive with the given file name.'), )) ->setHelp(<<archive command creates an archive of the specified format @@ -78,7 +79,8 @@ EOT $input->getArgument('package'), $input->getArgument('version'), $input->getOption('format'), - $input->getOption('dir') + $input->getOption('dir'), + $input->getOption("file") ); if (0 === $returnCode && $composer) { @@ -88,7 +90,7 @@ EOT return $returnCode; } - protected function archive(IOInterface $io, Config $config, $packageName = null, $version = null, $format = 'tar', $dest = '.') + protected function archive(IOInterface $io, Config $config, $packageName = null, $version = null, $format = 'tar', $dest = '.', $fileName = null) { $factory = new Factory; $downloadManager = $factory->createDownloadManager($io, $config); @@ -105,7 +107,7 @@ EOT } $io->writeError('Creating the archive into "'.$dest.'".'); - $packagePath = $archiveManager->archive($package, $format, $dest); + $packagePath = $archiveManager->archive($package, $format, $dest, $fileName); $fs = new Filesystem; $shortPath = $fs->findShortestPath(getcwd(), $packagePath, true); diff --git a/src/Composer/Package/Archiver/ArchiveManager.php b/src/Composer/Package/Archiver/ArchiveManager.php index d600a7a75..527757a4e 100644 --- a/src/Composer/Package/Archiver/ArchiveManager.php +++ b/src/Composer/Package/Archiver/ArchiveManager.php @@ -96,12 +96,14 @@ class ArchiveManager * * @param PackageInterface $package The package to archive * @param string $format The format of the archive (zip, tar, ...) - * @param string $targetDir The diretory where to build the archive + * @param string $targetDir The directory where to build the archive + * @param string|null $fileName The file name to use for the archive, or null to use the generated + * package name * @throws \InvalidArgumentException * @throws \RuntimeException * @return string The path of the created archive */ - public function archive(PackageInterface $package, $format, $targetDir) + public function archive(PackageInterface $package, $format, $targetDir, $fileName = null) { if (empty($format)) { throw new \InvalidArgumentException('Format must be specified');