|
@@ -29,6 +29,11 @@ class ArchiveManager
|
|
|
|
|
|
protected $archivers = array();
|
|
|
|
|
|
+ /**
|
|
|
+ * @var bool
|
|
|
+ */
|
|
|
+ protected $overwriteFiles = true;
|
|
|
+
|
|
|
/**
|
|
|
* @param DownloadManager $downloadManager A manager used to download package sources
|
|
|
*/
|
|
@@ -45,6 +50,19 @@ class ArchiveManager
|
|
|
$this->archivers[] = $archiver;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Set whether existing archives should be overwritten
|
|
|
+ *
|
|
|
+ * @param bool $overwriteFiles New setting
|
|
|
+ *
|
|
|
+ * @return $this
|
|
|
+ */
|
|
|
+ public function setOverwriteFiles($overwriteFiles)
|
|
|
+ {
|
|
|
+ $this->overwriteFiles = $overwriteFiles;
|
|
|
+ return $this;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Generate a distinct filename for a particular version of a package.
|
|
|
*
|
|
@@ -62,10 +80,13 @@ class ArchiveManager
|
|
|
$nameParts = array_merge($nameParts, array($package->getPrettyVersion(), $package->getDistReference()));
|
|
|
}
|
|
|
|
|
|
+ if ($package->getSourceReference()) {
|
|
|
+ $nameParts[] = substr(sha1($package->getSourceReference()), 0, 6);
|
|
|
+ }
|
|
|
+
|
|
|
return implode('-', array_filter($nameParts, function ($p) {
|
|
|
return !empty($p);
|
|
|
}));
|
|
|
-
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -105,6 +126,10 @@ class ArchiveManager
|
|
|
$target = realpath($targetDir).'/'.$packageName.'.'.$format;
|
|
|
$filesystem->ensureDirectoryExists(dirname($target));
|
|
|
|
|
|
+ if (!$this->overwriteFiles && file_exists($target)) {
|
|
|
+ return $target;
|
|
|
+ }
|
|
|
+
|
|
|
if ($package instanceof RootPackage) {
|
|
|
$sourcePath = realpath('.');
|
|
|
} else {
|
|
@@ -117,7 +142,6 @@ class ArchiveManager
|
|
|
}
|
|
|
|
|
|
// Create the archive
|
|
|
- $sourceRef = $package->getSourceReference();
|
|
|
- return $usableArchiver->archive($sourcePath, $target, $format, $sourceRef, $package->getArchiveExcludes());
|
|
|
+ return $usableArchiver->archive($sourcePath, $target, $format, $package->getArchiveExcludes());
|
|
|
}
|
|
|
}
|