Keep absolute path repos symlinks absolute, fixes #8700

main
Jordi Boggiano 4 years ago
parent b11f1c3082
commit 7e679656a4
No known key found for this signature in database
GPG Key ID: 7BBD42C429EC80BC

@ -75,7 +75,7 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter
} }
// Get the transport options with default values // Get the transport options with default values
$transportOptions = $package->getTransportOptions() + array('symlink' => null); $transportOptions = $package->getTransportOptions() + array('symlink' => null, 'relative' => true);
// When symlink transport option is null, both symlink and mirror are allowed // When symlink transport option is null, both symlink and mirror are allowed
$currentStrategy = self::STRATEGY_SYMLINK; $currentStrategy = self::STRATEGY_SYMLINK;
@ -126,7 +126,11 @@ class PathDownloader extends FileDownloader implements VcsCapableDownloaderInter
$shortestPath = $this->filesystem->findShortestPath($absolutePath, $realUrl); $shortestPath = $this->filesystem->findShortestPath($absolutePath, $realUrl);
$path = rtrim($path, "/"); $path = rtrim($path, "/");
$this->io->writeError(sprintf('Symlinking from %s', $url), false); $this->io->writeError(sprintf('Symlinking from %s', $url), false);
if ($transportOptions['relative']) {
$fileSystem->symlink($shortestPath, $path); $fileSystem->symlink($shortestPath, $path);
} else {
$fileSystem->symlink($absolutePath, $path);
}
} }
} catch (IOException $e) { } catch (IOException $e) {
if (in_array(self::STRATEGY_MIRROR, $allowedStrategies)) { if (in_array(self::STRATEGY_MIRROR, $allowedStrategies)) {

@ -20,6 +20,7 @@ use Composer\Package\Version\VersionGuesser;
use Composer\Package\Version\VersionParser; use Composer\Package\Version\VersionParser;
use Composer\Util\Platform; use Composer\Util\Platform;
use Composer\Util\ProcessExecutor; use Composer\Util\ProcessExecutor;
use Composer\Util\Filesystem;
/** /**
* This repository allows installing local packages that are not necessarily under their own VCS. * This repository allows installing local packages that are not necessarily under their own VCS.
@ -107,6 +108,10 @@ class PathRepository extends ArrayRepository implements ConfigurableRepositoryIn
$this->versionGuesser = new VersionGuesser($config, $this->process, new VersionParser()); $this->versionGuesser = new VersionGuesser($config, $this->process, new VersionParser());
$this->repoConfig = $repoConfig; $this->repoConfig = $repoConfig;
$this->options = isset($repoConfig['options']) ? $repoConfig['options'] : array(); $this->options = isset($repoConfig['options']) ? $repoConfig['options'] : array();
if (!isset($this->options['relative'])) {
$filesystem = new Filesystem();
$this->options['relative'] = !$filesystem->isAbsolutePath($this->url);
}
parent::__construct(); parent::__construct();
} }

Loading…
Cancel
Save