Simplify bin-compat by removing the nosymlink option, refs #3704
parent
c9b51a5751
commit
615638c7c3
|
@ -1,6 +1,6 @@
|
|||
# Config
|
||||
|
||||
This chapter will describe the `config` section of the `composer.json`
|
||||
This chapter will describe the `config` section of the `composer.json`
|
||||
[schema](04-schema.md).
|
||||
|
||||
## process-timeout
|
||||
|
@ -105,11 +105,11 @@ first until the cache fits.
|
|||
## bin-compat
|
||||
|
||||
Defaults to `auto`. Determines the compatibility of the binaries to be installed.
|
||||
If it is `auto` then Composer tries to automatically guess which compatibility mode
|
||||
to use. If it is `nosymlink` then the binaries will be compatible with Unix-based
|
||||
operating systems (useful for cases when symlinks are not available).
|
||||
If its value is `full` then both .bat files for Windows and scripts for Unix-based
|
||||
operating systems will be installed for each binary.
|
||||
If it is `auto` then Composer only installs .bat proxy files when on Windows. If
|
||||
set to `full` then both .bat files for Windows and scripts for Unix-based
|
||||
operating systems will be installed for each binary. This is mainly useful if you
|
||||
run Composer inside a linux VM but still want the .bat proxies available for use
|
||||
in the Windows host OS.
|
||||
|
||||
## prepend-autoloader
|
||||
|
||||
|
|
|
@ -187,8 +187,8 @@
|
|||
"description": "The cache max size for the files cache, defaults to \"300MiB\"."
|
||||
},
|
||||
"bin-compat": {
|
||||
"enum": ["auto", "nosymlink", "full"],
|
||||
"description": "The compatibility of the binaries, defaults to \"auto\" (automatically guessed) and can be \"nosymlink\" (compatible with Unix-based systems) or \"full\" (compatible with both Windows and Unix-based systems)."
|
||||
"enum": ["auto", "full"],
|
||||
"description": "The compatibility of the binaries, defaults to \"auto\" (automatically guessed) and can be \"full\" (compatible with both Windows and Unix-based systems)."
|
||||
},
|
||||
"discard-changes": {
|
||||
"type": ["string", "boolean"],
|
||||
|
|
|
@ -308,7 +308,7 @@ EOT
|
|||
function ($val) { return $val; },
|
||||
),
|
||||
'bin-compat' => array(
|
||||
function ($val) { return in_array($val, array('auto', 'nosymlink', 'full')); },
|
||||
function ($val) { return in_array($val, array('auto', 'full')); },
|
||||
function ($val) { return $val; }
|
||||
),
|
||||
'discard-changes' => array(
|
||||
|
|
|
@ -222,9 +222,9 @@ class Config
|
|||
case 'bin-compat':
|
||||
$value = $this->getComposerEnv('COMPOSER_BIN_COMPAT') ?: $this->config[$key];
|
||||
|
||||
if (!in_array($value, array('auto', 'nosymlink', 'full'))) {
|
||||
if (!in_array($value, array('auto', 'full'))) {
|
||||
throw new \RuntimeException(
|
||||
"Invalid value for 'bin-compat': {$value}. Expected auto, nosymlink, full"
|
||||
"Invalid value for 'bin-compat': {$value}. Expected auto, full"
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -229,8 +229,6 @@ class LibraryInstaller implements InstallerInterface
|
|||
} else {
|
||||
$this->installSymlinkBinaries($binPath, $link);
|
||||
}
|
||||
} elseif ($this->binCompat === "nosymlink") {
|
||||
$this->installUnixyProxyBinaries($binPath, $link);
|
||||
} elseif ($this->binCompat === "full") {
|
||||
$this->installFullBinaries($binPath, $link, $bin, $package);
|
||||
}
|
||||
|
@ -256,10 +254,7 @@ class LibraryInstaller implements InstallerInterface
|
|||
|
||||
protected function installSymlinkBinaries($binPath, $link)
|
||||
{
|
||||
try {
|
||||
$symlink = new Symlink($this->filesystem);
|
||||
$symlink->symlinkBin($binPath, $link);
|
||||
} catch (\ErrorException $e) {
|
||||
if (!$this->filesystem->relativeSymlink($binPath, $link)) {
|
||||
$this->installUnixyProxyBinaries($binPath, $link);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -505,6 +505,26 @@ class Filesystem
|
|||
return unlink($path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a relative symlink from $link to $target
|
||||
*
|
||||
* @param string $target The path of the binary file to be symlinked
|
||||
* @param string $link The path where the symlink should be created
|
||||
* @return bool
|
||||
*/
|
||||
public function relativeSymlink($target, $link)
|
||||
{
|
||||
$cwd = getcwd();
|
||||
|
||||
$relativePath = $this->filesystem->findShortestPath($link, $target);
|
||||
chdir(dirname($link));
|
||||
$result = @symlink($relativePath, $link);
|
||||
|
||||
chdir($cwd);
|
||||
|
||||
return (bool) $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* return true if that directory is a symlink.
|
||||
*
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Composer.
|
||||
*
|
||||
* (c) Nils Adermann <naderman@naderman.de>
|
||||
* Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Util;
|
||||
|
||||
use Composer\Config;
|
||||
|
||||
/**
|
||||
* @author Kocsis Máté <kocsismate@woohoolabs.com>
|
||||
*/
|
||||
class Symlink
|
||||
{
|
||||
protected $filesystem;
|
||||
|
||||
/**
|
||||
* Initializes the symlinking utility.
|
||||
*
|
||||
* @param Filesystem $filesystem
|
||||
*/
|
||||
public function __construct(Filesystem $filesystem = null)
|
||||
{
|
||||
$this->filesystem = $filesystem ?: new Filesystem();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a symlink for a binary file at a given path.
|
||||
*
|
||||
* @param string $binPath The path of the binary file to be symlinked
|
||||
* @param string $link The path where the symlink should be created
|
||||
* @throws \ErrorException
|
||||
*/
|
||||
public function symlinkBin($binPath, $link)
|
||||
{
|
||||
$cwd = getcwd();
|
||||
|
||||
$relativeBin = $this->filesystem->findShortestPath($link, $binPath);
|
||||
chdir(dirname($link));
|
||||
$result = @symlink($relativeBin, $link);
|
||||
|
||||
chdir($cwd);
|
||||
if ($result === false) {
|
||||
throw new \ErrorException();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue