Fix output of PathDownloader during upgrades
parent
fd88b3d48d
commit
48d02b479b
|
@ -366,7 +366,6 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface
|
|||
|
||||
return $promise->then(function () use ($self, $target, $path, $io) {
|
||||
$promise = $self->install($target, $path, false);
|
||||
$io->writeError('');
|
||||
|
||||
return $promise;
|
||||
});
|
||||
|
|
|
@ -87,30 +87,9 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter
|
|||
}
|
||||
|
||||
// Get the transport options with default values
|
||||
$transportOptions = $package->getTransportOptions() + array('symlink' => null, 'relative' => true);
|
||||
$transportOptions = $package->getTransportOptions() + array('relative' => true);
|
||||
|
||||
// When symlink transport option is null, both symlink and mirror are allowed
|
||||
$currentStrategy = self::STRATEGY_SYMLINK;
|
||||
$allowedStrategies = array(self::STRATEGY_SYMLINK, self::STRATEGY_MIRROR);
|
||||
|
||||
$mirrorPathRepos = getenv('COMPOSER_MIRROR_PATH_REPOS');
|
||||
if ($mirrorPathRepos) {
|
||||
$currentStrategy = self::STRATEGY_MIRROR;
|
||||
}
|
||||
|
||||
if (true === $transportOptions['symlink']) {
|
||||
$currentStrategy = self::STRATEGY_SYMLINK;
|
||||
$allowedStrategies = array(self::STRATEGY_SYMLINK);
|
||||
} elseif (false === $transportOptions['symlink']) {
|
||||
$currentStrategy = self::STRATEGY_MIRROR;
|
||||
$allowedStrategies = array(self::STRATEGY_MIRROR);
|
||||
}
|
||||
|
||||
// Check we can use junctions safely if we are on Windows
|
||||
if (Platform::isWindows() && self::STRATEGY_SYMLINK === $currentStrategy && !$this->safeJunctions()) {
|
||||
$currentStrategy = self::STRATEGY_MIRROR;
|
||||
$allowedStrategies = array(self::STRATEGY_MIRROR);
|
||||
}
|
||||
list($currentStrategy, $allowedStrategies) = $this->computeAllowedStrategies($transportOptions);
|
||||
|
||||
$symfonyFilesystem = new SymfonyFilesystem();
|
||||
$this->filesystem->removeDirectory($path);
|
||||
|
@ -120,11 +99,13 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter
|
|||
}
|
||||
|
||||
$isFallback = false;
|
||||
if (self::STRATEGY_SYMLINK == $currentStrategy) {
|
||||
if (self::STRATEGY_SYMLINK === $currentStrategy) {
|
||||
try {
|
||||
if (Platform::isWindows()) {
|
||||
// Implement symlinks as NTFS junctions on Windows
|
||||
if ($output) {
|
||||
$this->io->writeError(sprintf('Junctioning from %s', $url), false);
|
||||
}
|
||||
$this->filesystem->junction($realUrl, $path);
|
||||
} else {
|
||||
$absolutePath = $path;
|
||||
|
@ -133,7 +114,9 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter
|
|||
}
|
||||
$shortestPath = $this->filesystem->findShortestPath($absolutePath, $realUrl);
|
||||
$path = rtrim($path, "/");
|
||||
if ($output) {
|
||||
$this->io->writeError(sprintf('Symlinking from %s', $url), false);
|
||||
}
|
||||
if ($transportOptions['relative']) {
|
||||
$symfonyFilesystem->symlink($shortestPath, $path);
|
||||
} else {
|
||||
|
@ -142,8 +125,10 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter
|
|||
}
|
||||
} catch (IOException $e) {
|
||||
if (in_array(self::STRATEGY_MIRROR, $allowedStrategies)) {
|
||||
if ($output) {
|
||||
$this->io->writeError('');
|
||||
$this->io->writeError(' <error>Symlink failed, fallback to use mirroring!</error>');
|
||||
}
|
||||
$currentStrategy = self::STRATEGY_MIRROR;
|
||||
$isFallback = true;
|
||||
} else {
|
||||
|
@ -153,10 +138,12 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter
|
|||
}
|
||||
|
||||
// Fallback if symlink failed or if symlink is not allowed for the package
|
||||
if (self::STRATEGY_MIRROR == $currentStrategy) {
|
||||
if (self::STRATEGY_MIRROR === $currentStrategy) {
|
||||
$realUrl = $this->filesystem->normalizePath($realUrl);
|
||||
|
||||
if ($output) {
|
||||
$this->io->writeError(sprintf('%sMirroring from %s', $isFallback ? ' ' : '', $url), false);
|
||||
}
|
||||
$iterator = new ArchivableFilesFinder($realUrl, array());
|
||||
$symfonyFilesystem->mirror($realUrl, $path, $iterator);
|
||||
}
|
||||
|
@ -225,7 +212,46 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter
|
|||
return ': Source already present';
|
||||
}
|
||||
|
||||
return '';
|
||||
list($currentStrategy) = $this->computeAllowedStrategies($package->getTransportOptions());
|
||||
|
||||
if ($currentStrategy === self::STRATEGY_SYMLINK) {
|
||||
if (Platform::isWindows()) {
|
||||
return ': Junctioning from '.$package->getDistUrl();
|
||||
}
|
||||
return ': Symlinking from '.$package->getDistUrl();
|
||||
}
|
||||
|
||||
return ': Mirroring from '.$package->getDistUrl();
|
||||
}
|
||||
|
||||
private function computeAllowedStrategies(array $transportOptions)
|
||||
{
|
||||
// When symlink transport option is null, both symlink and mirror are allowed
|
||||
$currentStrategy = self::STRATEGY_SYMLINK;
|
||||
$allowedStrategies = array(self::STRATEGY_SYMLINK, self::STRATEGY_MIRROR);
|
||||
|
||||
$mirrorPathRepos = getenv('COMPOSER_MIRROR_PATH_REPOS');
|
||||
if ($mirrorPathRepos) {
|
||||
$currentStrategy = self::STRATEGY_MIRROR;
|
||||
}
|
||||
|
||||
$symlinkOption = isset($transportOptions['symlink']) ? $transportOptions['symlink'] : null;
|
||||
|
||||
if (true === $symlinkOption) {
|
||||
$currentStrategy = self::STRATEGY_SYMLINK;
|
||||
$allowedStrategies = array(self::STRATEGY_SYMLINK);
|
||||
} elseif (false === $symlinkOption) {
|
||||
$currentStrategy = self::STRATEGY_MIRROR;
|
||||
$allowedStrategies = array(self::STRATEGY_MIRROR);
|
||||
}
|
||||
|
||||
// Check we can use junctions safely if we are on Windows
|
||||
if (Platform::isWindows() && self::STRATEGY_SYMLINK === $currentStrategy && !$this->safeJunctions()) {
|
||||
$currentStrategy = self::STRATEGY_MIRROR;
|
||||
$allowedStrategies = array(self::STRATEGY_MIRROR);
|
||||
}
|
||||
|
||||
return array($currentStrategy, $allowedStrategies);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue