/**
* @param string $cacheDir
* @param string $targetDir
* @param \Composer\Package\PackageInterface $package
* @param \Symfony\Component\Console\Output\OutputInterface $output
* @param \Composer\Util\ProcessExecutor $process
* @return string
* @throws \Exception
*/
protected function createZipFile($cacheDir, $targetDir, \Composer\Package\PackageInterface $package, OutputInterface $output, \Composer\Util\ProcessExecutor $process)
{
$zipfileName = str_replace('/', '_', strtolower($package->getPrettyName()));
if ($package->getDistType() === 'pear') {
$rootPath = $cacheDir;
$zipPath = escapeshellarg($package->getPrettyName());
} else {
if ($package->getTargetDir()) {
$rootPath = $cacheDir . '/' . $package->getPrettyName() . '/' . $package->getTargetDir();
$zipPath = '.';
} else {
$rootPath = $cacheDir . '/' . $package->getPrettyName();
$zipPath = '.';
}
}
$output->writeln(' - ' . $zipfileName . '.zip');
if (!class_exists('ZipArchive')) {
$command = 'cd ' . escapeshellarg($rootPath) . ' && zip -9 -r ' . escapeshellarg($targetDir . '/dists/' . $zipfileName . '.zip') . ' ' . $zipPath;
$result = $process->execute($command);
if ($result) {
throw new \Exception('could not create dist package for ' . $package->getName());
}
} else {
$zipFile = $targetDir . '/dists/' . $zipfileName . '.zip';
$zipArchive = new ZipArchive();
$zipArchive->addExcludeDirectory('.svn');
$zipArchive->setArchiveBaseDir($rootPath);
if (($result = $zipArchive->open($zipFile, ZipArchive::OVERWRITE)) === TRUE) {
$zipArchive->addDir($rootPath);
$zipArchive->close();
} else {
throw new \Exception('could not create dist package for ' . $package->getName() . ' error code: ' . $result);
}
}
return $zipfileName;
}