Merge remote-tracking branch 'origin/master' into 2.0
commit
2e0f31106a
|
@ -23,13 +23,14 @@ php:
|
|||
- 7.0
|
||||
- 7.1
|
||||
- 7.2
|
||||
- 7.3
|
||||
- nightly
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- php: 5.3
|
||||
dist: precise
|
||||
- php: 7.2
|
||||
- php: 7.3
|
||||
env: deps=high
|
||||
fast_finish: true
|
||||
allow_failures:
|
||||
|
@ -59,7 +60,7 @@ before_script:
|
|||
|
||||
script:
|
||||
# run test suite directories in parallel using GNU parallel
|
||||
- ls -d tests/Composer/Test/* | parallel --gnu --keep-order 'echo "Running {} tests"; ./vendor/bin/phpunit -c tests/complete.phpunit.xml --colors=always {} || (echo -e "\e[41mFAILED\e[0m {}" && exit 1);'
|
||||
- ls -d tests/Composer/Test/* | grep -v TestCase.php | parallel --gnu --keep-order 'echo "Running {} tests"; ./vendor/bin/phpunit -c tests/complete.phpunit.xml --colors=always {} || (echo -e "\e[41mFAILED\e[0m {}" && exit 1);'
|
||||
|
||||
before_deploy:
|
||||
- php -d phar.readonly=0 bin/compile
|
||||
|
@ -72,4 +73,4 @@ deploy:
|
|||
on:
|
||||
tags: true
|
||||
repo: composer/composer
|
||||
php: '7.1'
|
||||
php: '7.2'
|
||||
|
|
10
CHANGELOG.md
10
CHANGELOG.md
|
@ -1,3 +1,12 @@
|
|||
### [1.7.3] 2018-11-01
|
||||
|
||||
* Fixed handling of replace/conflict rules. This may affect dependency resolution in some edge cases.
|
||||
* Fixed Bitbucket API support and migrated all calls to API v2 as v1 is deprecated
|
||||
* Fixed support for lib-openssl 1.1.1 having only lowercase algorithm names
|
||||
* Fixed escaping of URLs in Perforce and Svn drivers
|
||||
* Fixed `show` command not respecting `--path` when a single package name was given
|
||||
* Fixed regression in 1.7.2's handling of metapackages
|
||||
|
||||
### [1.7.2] 2018-08-16
|
||||
|
||||
* Fixed reporting of authentication/rate limiting issues for GitHub API access
|
||||
|
@ -687,6 +696,7 @@
|
|||
|
||||
* Initial release
|
||||
|
||||
[1.7.3]: https://github.com/composer/composer/compare/1.7.2...1.7.3
|
||||
[1.7.2]: https://github.com/composer/composer/compare/1.7.1...1.7.2
|
||||
[1.7.1]: https://github.com/composer/composer/compare/1.7.0...1.7.1
|
||||
[1.7.0]: https://github.com/composer/composer/compare/1.7.0-RC...1.7.0
|
||||
|
|
|
@ -8,16 +8,16 @@
|
|||
"packages": [
|
||||
{
|
||||
"name": "composer/ca-bundle",
|
||||
"version": "1.1.2",
|
||||
"version": "1.1.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/composer/ca-bundle.git",
|
||||
"reference": "46afded9720f40b9dc63542af4e3e43a1177acb0"
|
||||
"reference": "8afa52cd417f4ec417b4bfe86b68106538a87660"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/46afded9720f40b9dc63542af4e3e43a1177acb0",
|
||||
"reference": "46afded9720f40b9dc63542af4e3e43a1177acb0",
|
||||
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/8afa52cd417f4ec417b4bfe86b68106538a87660",
|
||||
"reference": "8afa52cd417f4ec417b4bfe86b68106538a87660",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -60,7 +60,7 @@
|
|||
"ssl",
|
||||
"tls"
|
||||
],
|
||||
"time": "2018-08-08T08:57:40+00:00"
|
||||
"time": "2018-10-18T06:09:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "composer/semver",
|
||||
|
|
|
@ -40,9 +40,9 @@ To install packages from sources instead of simple zip archives, you will need
|
|||
git, svn, fossil or hg depending on how the package is version-controlled.
|
||||
|
||||
Composer is multi-platform and we strive to make it run equally well on Windows,
|
||||
Linux and OSX.
|
||||
Linux and macOS.
|
||||
|
||||
## Installation - Linux / Unix / OSX
|
||||
## Installation - Linux / Unix / macOS
|
||||
|
||||
### Downloading the Composer Executable
|
||||
|
||||
|
@ -100,7 +100,7 @@ Linux distributions.
|
|||
> **Note:** If the above fails due to permissions, you may need to run it again
|
||||
> with sudo.
|
||||
|
||||
> **Note:** On some versions of OSX the `/usr` directory does not exist by
|
||||
> **Note:** On some versions of macOS the `/usr` directory does not exist by
|
||||
> default. If you receive the error "/usr/local/bin/composer: No such file or
|
||||
> directory" then you must create the directory manually before proceeding:
|
||||
> `mkdir -p /usr/local/bin`.
|
||||
|
|
|
@ -856,9 +856,9 @@ is a hidden, global (per-user on the machine) directory that is shared between
|
|||
all projects.
|
||||
|
||||
By default it points to `C:\Users\<user>\AppData\Roaming\Composer` on Windows
|
||||
and `/Users/<user>/.composer` on OSX. On *nix systems that follow the [XDG Base
|
||||
and `/Users/<user>/.composer` on macOS. On \*nix systems that follow the [XDG Base
|
||||
Directory Specifications](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html),
|
||||
it points to `$XDG_CONFIG_HOME/composer`. On other *nix systems, it points to
|
||||
it points to `$XDG_CONFIG_HOME/composer`. On other \*nix systems, it points to
|
||||
`/home/<user>/.composer`.
|
||||
|
||||
#### COMPOSER_HOME/config.json
|
||||
|
@ -878,7 +878,7 @@ configuration in the project's `composer.json` always wins.
|
|||
The `COMPOSER_CACHE_DIR` var allows you to change the Composer cache directory,
|
||||
which is also configurable via the [`cache-dir`](06-config.md#cache-dir) option.
|
||||
|
||||
By default it points to `$COMPOSER_HOME/cache` on \*nix and OSX, and
|
||||
By default it points to `$COMPOSER_HOME/cache` on \*nix and macOS, and
|
||||
`C:\Users\<user>\AppData\Local\Composer` (or `%LOCALAPPDATA%/Composer`) on Windows.
|
||||
|
||||
### COMPOSER_PROCESS_TIMEOUT
|
||||
|
|
|
@ -657,7 +657,7 @@ be explicitly defined in the package's `composer.json` file. If the version
|
|||
cannot be resolved by these means, it is assumed to be `dev-master`.
|
||||
|
||||
The local package will be symlinked if possible, in which case the output in
|
||||
the console will read `Symlinked from ../../packages/my-package`. If symlinking
|
||||
the console will read `Symlinking from ../../packages/my-package`. If symlinking
|
||||
is _not_ possible the package will be copied. In that case, the console will
|
||||
output `Mirrored from ../../packages/my-package`.
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ An alternative is to use this script which only works with UNIX utilities:
|
|||
|
||||
EXPECTED_SIGNATURE="$(wget -q -O - https://composer.github.io/installer.sig)"
|
||||
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
|
||||
ACTUAL_SIGNATURE="$(php -r "echo hash_file('SHA384', 'composer-setup.php');")"
|
||||
ACTUAL_SIGNATURE="$(php -r "echo hash_file('sha384', 'composer-setup.php');")"
|
||||
|
||||
if [ "$EXPECTED_SIGNATURE" != "$ACTUAL_SIGNATURE" ]
|
||||
then
|
||||
|
|
|
@ -15,7 +15,7 @@ associated with inline VCS repositories.
|
|||
There are three ways the dependency solver could work with custom repositories:
|
||||
|
||||
- Fetch the repositories of root package, get all the packages from the defined
|
||||
repositories, resolve requirements. This is the current state and it works well
|
||||
repositories, then resolve requirements. This is the current state and it works well
|
||||
except for the limitation of not loading repositories recursively.
|
||||
|
||||
- Fetch the repositories of root package, while initializing packages from the
|
||||
|
|
|
@ -279,7 +279,7 @@ class ClassLoader
|
|||
*/
|
||||
public function setApcuPrefix($apcuPrefix)
|
||||
{
|
||||
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
|
||||
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -33,7 +33,7 @@ use Symfony\Component\Console\Command\Command;
|
|||
abstract class BaseCommand extends Command
|
||||
{
|
||||
/**
|
||||
* @var Composer
|
||||
* @var Composer|null
|
||||
*/
|
||||
private $composer;
|
||||
|
||||
|
|
|
@ -119,8 +119,9 @@ EOT
|
|||
$io->write('Checking github.com rate limit: ', false);
|
||||
try {
|
||||
$rate = $this->getGithubRateLimit('github.com');
|
||||
$this->outputResult(true);
|
||||
if (10 > $rate['remaining']) {
|
||||
if (!is_array($rate)) {
|
||||
$this->outputResult($rate);
|
||||
} elseif (10 > $rate['remaining']) {
|
||||
$io->write('<warning>WARNING</warning>');
|
||||
$io->write(sprintf(
|
||||
'<comment>Github has a rate limit on their API. '
|
||||
|
@ -131,6 +132,8 @@ EOT
|
|||
$rate['remaining'],
|
||||
$rate['limit']
|
||||
));
|
||||
} else {
|
||||
$this->outputResult(true);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
if ($e instanceof TransportException && $e->getCode() === 401) {
|
||||
|
@ -207,6 +210,11 @@ EOT
|
|||
|
||||
private function checkHttp($proto, Config $config)
|
||||
{
|
||||
$result = $this->checkConnectivity();
|
||||
if ($result !== true) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
$disableTls = false;
|
||||
$result = array();
|
||||
if ($proto === 'https' && $config->get('disable-tls') === true) {
|
||||
|
@ -238,6 +246,11 @@ EOT
|
|||
|
||||
private function checkHttpProxy()
|
||||
{
|
||||
$result = $this->checkConnectivity();
|
||||
if ($result !== true) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
$protocol = extension_loaded('openssl') ? 'https' : 'http';
|
||||
try {
|
||||
$json = json_decode($this->rfs->getContents('packagist.org', $protocol . '://repo.packagist.org/packages.json', false), true);
|
||||
|
@ -265,6 +278,11 @@ EOT
|
|||
*/
|
||||
private function checkHttpProxyFullUriRequestParam()
|
||||
{
|
||||
$result = $this->checkConnectivity();
|
||||
if ($result !== true) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
$url = 'http://repo.packagist.org/packages.json';
|
||||
try {
|
||||
$this->rfs->getContents('packagist.org', $url, false);
|
||||
|
@ -290,6 +308,11 @@ EOT
|
|||
*/
|
||||
private function checkHttpsProxyFullUriRequestParam()
|
||||
{
|
||||
$result = $this->checkConnectivity();
|
||||
if ($result !== true) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
if (!extension_loaded('openssl')) {
|
||||
return 'You need the openssl extension installed for this check';
|
||||
}
|
||||
|
@ -312,6 +335,11 @@ EOT
|
|||
|
||||
private function checkGithubOauth($domain, $token)
|
||||
{
|
||||
$result = $this->checkConnectivity();
|
||||
if ($result !== true) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
$this->getIO()->setAuthentication($domain, $token, 'x-oauth-basic');
|
||||
try {
|
||||
$url = $domain === 'github.com' ? 'https://api.'.$domain.'/' : 'https://'.$domain.'/api/v3/';
|
||||
|
@ -332,10 +360,15 @@ EOT
|
|||
* @param string $domain
|
||||
* @param string $token
|
||||
* @throws TransportException
|
||||
* @return array
|
||||
* @return array|string
|
||||
*/
|
||||
private function getGithubRateLimit($domain, $token = null)
|
||||
{
|
||||
$result = $this->checkConnectivity();
|
||||
if ($result !== true) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
if ($token) {
|
||||
$this->getIO()->setAuthentication($domain, $token, 'x-oauth-basic');
|
||||
}
|
||||
|
@ -390,6 +423,11 @@ EOT
|
|||
|
||||
private function checkVersion($config)
|
||||
{
|
||||
$result = $this->checkConnectivity();
|
||||
if ($result !== true) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
$versionsUtil = new Versions($config, $this->rfs);
|
||||
$latest = $versionsUtil->getLatest();
|
||||
|
||||
|
@ -413,6 +451,7 @@ EOT
|
|||
}
|
||||
|
||||
$hadError = false;
|
||||
$hadWarning = false;
|
||||
if ($result instanceof \Exception) {
|
||||
$result = '<error>['.get_class($result).'] '.$result->getMessage().'</error>';
|
||||
}
|
||||
|
@ -427,16 +466,18 @@ EOT
|
|||
foreach ($result as $message) {
|
||||
if (false !== strpos($message, '<error>')) {
|
||||
$hadError = true;
|
||||
} elseif (false !== strpos($message, '<warning>')) {
|
||||
$hadWarning = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($hadError) {
|
||||
$io->write('<error>FAIL</error>');
|
||||
$this->exitCode = 2;
|
||||
} else {
|
||||
$this->exitCode = max($this->exitCode, 2);
|
||||
} elseif ($hadWarning) {
|
||||
$io->write('<warning>WARNING</warning>');
|
||||
$this->exitCode = 1;
|
||||
$this->exitCode = max($this->exitCode, 1);
|
||||
}
|
||||
|
||||
if ($result) {
|
||||
|
@ -481,7 +522,7 @@ EOT
|
|||
$errors['iconv_mbstring'] = true;
|
||||
}
|
||||
|
||||
if (!ini_get('allow_url_fopen')) {
|
||||
if (!filter_var(ini_get('allow_url_fopen'), FILTER_VALIDATE_BOOLEAN)) {
|
||||
$errors['allow_url_fopen'] = true;
|
||||
}
|
||||
|
||||
|
@ -505,7 +546,7 @@ EOT
|
|||
$warnings['openssl_version'] = true;
|
||||
}
|
||||
|
||||
if (!defined('HHVM_VERSION') && !extension_loaded('apcu') && ini_get('apc.enable_cli')) {
|
||||
if (!defined('HHVM_VERSION') && !extension_loaded('apcu') && filter_var(ini_get('apc.enable_cli'), FILTER_VALIDATE_BOOLEAN)) {
|
||||
$warnings['apc_cli'] = true;
|
||||
}
|
||||
|
||||
|
@ -528,7 +569,7 @@ EOT
|
|||
}
|
||||
}
|
||||
|
||||
if (ini_get('xdebug.profiler_enabled')) {
|
||||
if (filter_var(ini_get('xdebug.profiler_enabled'), FILTER_VALIDATE_BOOLEAN)) {
|
||||
$warnings['xdebug_profile'] = true;
|
||||
} elseif (extension_loaded('xdebug')) {
|
||||
$warnings['xdebug_loaded'] = true;
|
||||
|
@ -668,4 +709,20 @@ EOT
|
|||
|
||||
return !$warnings && !$errors ? true : $output;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if allow_url_fopen is ON
|
||||
*
|
||||
* @return bool|string
|
||||
*/
|
||||
private function checkConnectivity()
|
||||
{
|
||||
if (!ini_get('allow_url_fopen')) {
|
||||
$result = '<info>Skipped because allow_url_fopen is missing.</info>';
|
||||
return $result;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@ class OutdatedCommand extends ShowCommand
|
|||
new InputOption('strict', null, InputOption::VALUE_NONE, 'Return a non-zero exit code when there are outdated packages'),
|
||||
new InputOption('minor-only', 'm', InputOption::VALUE_NONE, 'Show only packages that have minor SemVer-compatible updates. Use with the --outdated option.'),
|
||||
new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of the output: text or json', 'text'),
|
||||
new InputOption('ignore', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Ignore specified package(s). Use it with the --outdated option if you don\'t want to be informed about new versions of some packages.'),
|
||||
))
|
||||
->setHelp(
|
||||
<<<EOT
|
||||
|
@ -77,6 +78,7 @@ EOT
|
|||
$args['--minor-only'] = true;
|
||||
}
|
||||
$args['--format'] = $input->getOption('format');
|
||||
$args['--ignore'] = $input->getOption('ignore');
|
||||
|
||||
$input = new ArrayInput($args);
|
||||
|
||||
|
|
|
@ -220,7 +220,7 @@ TAGSPUBKEY
|
|||
|
||||
$pubkeyid = openssl_pkey_get_public($sigFile);
|
||||
$algo = defined('OPENSSL_ALGO_SHA384') ? OPENSSL_ALGO_SHA384 : 'SHA384';
|
||||
if (!in_array('SHA384', openssl_get_md_methods())) {
|
||||
if (!in_array('sha384', array_map('strtolower', openssl_get_md_methods()))) {
|
||||
throw new \RuntimeException('SHA384 is not supported by your openssl extension, could not verify the phar file integrity');
|
||||
}
|
||||
$signature = json_decode($signature, true);
|
||||
|
|
|
@ -74,6 +74,7 @@ class ShowCommand extends BaseCommand
|
|||
new InputOption('tree', 't', InputOption::VALUE_NONE, 'List the dependencies as a tree'),
|
||||
new InputOption('latest', 'l', InputOption::VALUE_NONE, 'Show the latest version'),
|
||||
new InputOption('outdated', 'o', InputOption::VALUE_NONE, 'Show the latest version but only for packages that are outdated'),
|
||||
new InputOption('ignore', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Ignore specified package(s). Use it with the --outdated option if you don\'t want to be informed about new versions of some packages.'),
|
||||
new InputOption('minor-only', 'm', InputOption::VALUE_NONE, 'Show only packages that have minor SemVer-compatible updates. Use with the --outdated option.'),
|
||||
new InputOption('direct', 'D', InputOption::VALUE_NONE, 'Shows only packages that are directly required by the root package'),
|
||||
new InputOption('strict', null, InputOption::VALUE_NONE, 'Return a non-zero exit code when there are outdated packages'),
|
||||
|
@ -105,6 +106,8 @@ EOT
|
|||
|
||||
if ($input->getOption('outdated')) {
|
||||
$input->setOption('latest', true);
|
||||
} elseif ($input->getOption('ignore')) {
|
||||
$io->writeError('<warning>You are using the option "ignore" for action other than "outdated", it will be ignored.</warning>');
|
||||
}
|
||||
|
||||
if ($input->getOption('direct') && ($input->getOption('all') || $input->getOption('available') || $input->getOption('platform'))) {
|
||||
|
@ -219,6 +222,12 @@ EOT
|
|||
if ($input->getOption('outdated') && $input->getOption('strict') && $latestPackage && $latestPackage->getFullPrettyVersion() !== $package->getFullPrettyVersion() && !$latestPackage->isAbandoned()) {
|
||||
$exitCode = 1;
|
||||
}
|
||||
if ($input->getOption('path')) {
|
||||
$io->write($package->getName(), false);
|
||||
$io->write(' ' . strtok(realpath($composer->getInstallationManager()->getInstallPath($package)), "\r\n"));
|
||||
|
||||
return $exitCode;
|
||||
}
|
||||
$this->printMeta($package, $versions, $installedRepo, $latestPackage ?: null);
|
||||
$this->printLinks($package, 'requires');
|
||||
$this->printLinks($package, 'devRequires', 'requires (dev)');
|
||||
|
@ -333,6 +342,7 @@ EOT
|
|||
$showAllTypes = $input->getOption('all');
|
||||
$showLatest = $input->getOption('latest');
|
||||
$showMinorOnly = $input->getOption('minor-only');
|
||||
$ignoredPackages = array_map('strtolower', $input->getOption('ignore'));
|
||||
$indent = $showAllTypes ? ' ' : '';
|
||||
$latestPackages = array();
|
||||
$exitCode = 0;
|
||||
|
@ -372,7 +382,11 @@ EOT
|
|||
if ($showLatest && isset($latestPackages[$package->getPrettyName()])) {
|
||||
$latestPackage = $latestPackages[$package->getPrettyName()];
|
||||
}
|
||||
if ($input->getOption('outdated') && $latestPackage && $latestPackage->getFullPrettyVersion() === $package->getFullPrettyVersion() && !$latestPackage->isAbandoned()) {
|
||||
|
||||
// Determine if Composer is checking outdated dependencies and if current package should trigger non-default exit code
|
||||
$packageIsUpToDate = $latestPackage && $latestPackage->getFullPrettyVersion() === $package->getFullPrettyVersion() && !$latestPackage->isAbandoned();
|
||||
$packageIsIgnored = \in_array($package->getPrettyName(), $ignoredPackages, true);
|
||||
if ($input->getOption('outdated') && ($packageIsUpToDate || $packageIsIgnored)) {
|
||||
continue;
|
||||
} elseif ($input->getOption('outdated') || $input->getOption('strict')) {
|
||||
$hasOutdatedPackages = true;
|
||||
|
@ -573,6 +587,9 @@ EOT
|
|||
$this->printLicenses($package);
|
||||
$io->write('<info>source</info> : ' . sprintf('[%s] <comment>%s</comment> %s', $package->getSourceType(), $package->getSourceUrl(), $package->getSourceReference()));
|
||||
$io->write('<info>dist</info> : ' . sprintf('[%s] <comment>%s</comment> %s', $package->getDistType(), $package->getDistUrl(), $package->getDistReference()));
|
||||
if ($installedRepo->hasPackage($package)) {
|
||||
$io->write('<info>path</info> : ' . sprintf('%s', realpath($this->getComposer()->getInstallationManager()->getInstallPath($package))));
|
||||
}
|
||||
$io->write('<info>names</info> : ' . implode(', ', $package->getNames()));
|
||||
|
||||
if ($latestPackage->isAbandoned()) {
|
||||
|
@ -716,7 +733,7 @@ EOT
|
|||
/**
|
||||
* Display the tree
|
||||
*
|
||||
* @param $arrayTree
|
||||
* @param array $arrayTree
|
||||
*/
|
||||
protected function displayPackageTree(array $arrayTree)
|
||||
{
|
||||
|
@ -761,7 +778,7 @@ EOT
|
|||
/**
|
||||
* Generate the package tree
|
||||
*
|
||||
* @param PackageInterface|string $package
|
||||
* @param PackageInterface $package
|
||||
* @param RepositoryInterface $installedRepo
|
||||
* @param RepositoryInterface $distantRepos
|
||||
* @return array
|
||||
|
@ -771,38 +788,36 @@ EOT
|
|||
RepositoryInterface $installedRepo,
|
||||
RepositoryInterface $distantRepos
|
||||
) {
|
||||
if (is_object($package)) {
|
||||
$requires = $package->getRequires();
|
||||
ksort($requires);
|
||||
$children = array();
|
||||
foreach ($requires as $requireName => $require) {
|
||||
$packagesInTree = array($package->getName(), $requireName);
|
||||
$requires = $package->getRequires();
|
||||
ksort($requires);
|
||||
$children = array();
|
||||
foreach ($requires as $requireName => $require) {
|
||||
$packagesInTree = array($package->getName(), $requireName);
|
||||
|
||||
$treeChildDesc = array(
|
||||
'name' => $requireName,
|
||||
'version' => $require->getPrettyConstraint(),
|
||||
);
|
||||
|
||||
$deepChildren = $this->addTree($requireName, $require, $installedRepo, $distantRepos, $packagesInTree);
|
||||
|
||||
if ($deepChildren) {
|
||||
$treeChildDesc['requires'] = $deepChildren;
|
||||
}
|
||||
|
||||
$children[] = $treeChildDesc;
|
||||
}
|
||||
$tree = array(
|
||||
'name' => $package->getPrettyName(),
|
||||
'version' => $package->getPrettyVersion(),
|
||||
'description' => $package->getDescription(),
|
||||
$treeChildDesc = array(
|
||||
'name' => $requireName,
|
||||
'version' => $require->getPrettyConstraint(),
|
||||
);
|
||||
|
||||
if ($children) {
|
||||
$tree['requires'] = $children;
|
||||
$deepChildren = $this->addTree($requireName, $require, $installedRepo, $distantRepos, $packagesInTree);
|
||||
|
||||
if ($deepChildren) {
|
||||
$treeChildDesc['requires'] = $deepChildren;
|
||||
}
|
||||
|
||||
return $tree;
|
||||
$children[] = $treeChildDesc;
|
||||
}
|
||||
$tree = array(
|
||||
'name' => $package->getPrettyName(),
|
||||
'version' => $package->getPrettyVersion(),
|
||||
'description' => $package->getDescription(),
|
||||
);
|
||||
|
||||
if ($children) {
|
||||
$tree['requires'] = $children;
|
||||
}
|
||||
|
||||
return $tree;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -255,7 +255,7 @@ class Compiler
|
|||
*/
|
||||
|
||||
// Avoid APC causing random fatal errors per https://github.com/composer/composer/issues/264
|
||||
if (extension_loaded('apc') && ini_get('apc.enable_cli') && ini_get('apc.cache_by_default')) {
|
||||
if (extension_loaded('apc') && filter_var(ini_get('apc.enable_cli'), FILTER_VALIDATE_BOOLEAN) && filter_var(ini_get('apc.cache_by_default'), FILTER_VALIDATE_BOOLEAN)) {
|
||||
if (version_compare(phpversion('apc'), '3.0.12', '>=')) {
|
||||
ini_set('apc.cache_by_default', 0);
|
||||
} else {
|
||||
|
|
|
@ -16,6 +16,7 @@ use Composer\IO\NullIO;
|
|||
use Composer\Util\Platform;
|
||||
use Composer\Util\Silencer;
|
||||
use Symfony\Component\Console\Application as BaseApplication;
|
||||
use Symfony\Component\Console\Exception\CommandNotFoundException;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
@ -125,6 +126,9 @@ class Application extends BaseApplication
|
|||
if ($name = $this->getCommandName($input)) {
|
||||
try {
|
||||
$commandName = $this->find($name)->getName();
|
||||
} catch (CommandNotFoundException $e) {
|
||||
// we'll check command validity again later after plugins are loaded
|
||||
$commandName = false;
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ class RuleSetGenerator
|
|||
* reason for generating this rule
|
||||
* @param mixed $reasonData Any data, e.g. the requirement name,
|
||||
* that goes with the reason
|
||||
* @return Rule The generated rule or null if tautological
|
||||
* @return Rule|null The generated rule or null if tautological
|
||||
*/
|
||||
protected function createRequireRule(PackageInterface $package, array $providers, $reason, $reasonData = null)
|
||||
{
|
||||
|
@ -116,7 +116,7 @@ class RuleSetGenerator
|
|||
* reason for generating this rule
|
||||
* @param mixed $reasonData Any data, e.g. the package name, that
|
||||
* goes with the reason
|
||||
* @return Rule The generated rule
|
||||
* @return Rule|null The generated rule
|
||||
*/
|
||||
protected function createRule2Literals(PackageInterface $issuer, PackageInterface $provider, $reason, $reasonData = null)
|
||||
{
|
||||
|
|
|
@ -127,9 +127,9 @@ class RuleWatchGraph
|
|||
*
|
||||
* The rule node's watched literals are updated accordingly.
|
||||
*
|
||||
* @param $fromLiteral mixed A literal the node used to watch
|
||||
* @param $toLiteral mixed A literal the node should watch now
|
||||
* @param $node mixed The rule node to be moved
|
||||
* @param int $fromLiteral A literal the node used to watch
|
||||
* @param int $toLiteral A literal the node should watch now
|
||||
* @param RuleWatchNode $node The rule node to be moved
|
||||
*/
|
||||
protected function moveWatch($fromLiteral, $toLiteral, $node)
|
||||
{
|
||||
|
|
|
@ -433,7 +433,7 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface
|
|||
}
|
||||
|
||||
/**
|
||||
* @param $path
|
||||
* @param string $path
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
protected function discardChanges($path)
|
||||
|
@ -447,7 +447,7 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface
|
|||
}
|
||||
|
||||
/**
|
||||
* @param $path
|
||||
* @param string $path
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
protected function stashChanges($path)
|
||||
|
@ -461,7 +461,7 @@ class GitDownloader extends VcsDownloader implements DvcsDownloaderInterface
|
|||
}
|
||||
|
||||
/**
|
||||
* @param $path
|
||||
* @param string $path
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
protected function viewDiff($path)
|
||||
|
|
|
@ -73,8 +73,8 @@ class PearPackageExtractor
|
|||
* Perform copy actions on files
|
||||
*
|
||||
* @param array $files array of copy actions ('from', 'to') with relative paths
|
||||
* @param $source string path to source dir.
|
||||
* @param $target string path to destination dir
|
||||
* @param string $source path to source dir.
|
||||
* @param string $target path to destination dir
|
||||
* @param array $roles array [role => roleRoot] relative root for files having that role
|
||||
* @param array $vars list of values can be used for replacement tasks
|
||||
*/
|
||||
|
@ -135,7 +135,7 @@ class PearPackageExtractor
|
|||
*/
|
||||
private function buildCopyActions($source, array $roles, $vars)
|
||||
{
|
||||
/** @var $package \SimpleXmlElement */
|
||||
/** @var \SimpleXmlElement $package */
|
||||
$package = simplexml_load_string(file_get_contents($this->combine($source, 'package.xml')));
|
||||
if (false === $package) {
|
||||
throw new \RuntimeException('Package definition file is not valid.');
|
||||
|
|
|
@ -69,7 +69,8 @@ class ZipDownloader extends ArchiveDownloader
|
|||
|
||||
if (!self::$isWindows && !self::$hasSystemUnzip) {
|
||||
$this->io->writeError("<warning>As there is no 'unzip' command installed zip files are being unpacked using the PHP zip extension.</warning>");
|
||||
$this->io->writeError("<warning>This may cause invalid reports of corrupted archives. Installing 'unzip' may remediate them.</warning>");
|
||||
$this->io->writeError("<warning>This may cause invalid reports of corrupted archives. Besides, any UNIX permissions (e.g. executable) defined in the archives will be lost.</warning>");
|
||||
$this->io->writeError("<warning>Installing 'unzip' may remediate them.</warning>");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -264,7 +264,7 @@ class EventDispatcher
|
|||
$finder = new PhpExecutableFinder();
|
||||
$phpPath = $finder->find();
|
||||
if (!$phpPath) {
|
||||
throw new \RuntimeException('Failed to locate PHP binary to execute '.$scriptName);
|
||||
throw new \RuntimeException('Failed to locate PHP binary to execute '.$phpPath);
|
||||
}
|
||||
|
||||
$allowUrlFOpenFlag = ' -d allow_url_fopen=' . ProcessExecutor::escape(ini_get('allow_url_fopen'));
|
||||
|
|
|
@ -588,7 +588,7 @@ class Factory
|
|||
$disableTls = false;
|
||||
if ($config && $config->get('disable-tls') === true) {
|
||||
if (!$warned) {
|
||||
$io->write('<warning>You are running Composer with SSL/TLS protection disabled.</warning>');
|
||||
$io->writeError('<warning>You are running Composer with SSL/TLS protection disabled.</warning>');
|
||||
}
|
||||
$warned = true;
|
||||
$disableTls = true;
|
||||
|
|
|
@ -614,14 +614,14 @@ class Installer
|
|||
}
|
||||
}
|
||||
|
||||
if ($this->executeOperations || $this->writeLock) {
|
||||
$localRepo->write();
|
||||
}
|
||||
|
||||
$event = 'Composer\Installer\PackageEvents::POST_PACKAGE_'.strtoupper($jobType);
|
||||
if (defined($event) && $this->runScripts) {
|
||||
$this->eventDispatcher->dispatchPackageEvent(constant($event), $this->devMode, $policy, $repositorySet, $installedRepo, $request, $operations, $operation);
|
||||
}
|
||||
|
||||
if ($this->executeOperations || $this->writeLock) {
|
||||
$localRepo->write();
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->executeOperations) {
|
||||
|
|
|
@ -64,7 +64,7 @@ class GitExcludeFilter extends BaseExcludeFilter
|
|||
*
|
||||
* @param string $line A line from .gitattributes
|
||||
*
|
||||
* @return array An exclude pattern for filter()
|
||||
* @return array|null An exclude pattern for filter()
|
||||
*/
|
||||
public function parseGitAttributesLine($line)
|
||||
{
|
||||
|
|
|
@ -54,7 +54,7 @@ class HgExcludeFilter extends BaseExcludeFilter
|
|||
*
|
||||
* @param string $line A line from .hgignore
|
||||
*
|
||||
* @return array An exclude pattern for filter()
|
||||
* @return array|null An exclude pattern for filter()
|
||||
*/
|
||||
public function parseHgIgnoreLine($line)
|
||||
{
|
||||
|
|
|
@ -37,7 +37,7 @@ class ZipArchiver implements ArchiverInterface
|
|||
if ($res === true) {
|
||||
$files = new ArchivableFilesFinder($sources, $excludes, $ignoreFilters);
|
||||
foreach ($files as $file) {
|
||||
/** @var $file \SplFileInfo */
|
||||
/** @var \SplFileInfo $file */
|
||||
$filepath = strtr($file->getPath()."/".$file->getFilename(), '\\', '/');
|
||||
$localname = str_replace($sources.'/', '', $filepath);
|
||||
if ($file->isDir()) {
|
||||
|
|
|
@ -70,6 +70,7 @@ class Comparer
|
|||
if (!is_array($source)) {
|
||||
return;
|
||||
}
|
||||
chdir($currentDirectory);
|
||||
chdir($this->update);
|
||||
$destination = $this->doTree('.', $destination);
|
||||
if (!is_array($destination)) {
|
||||
|
|
|
@ -84,7 +84,7 @@ class ArtifactRepository extends ArrayRepository implements ConfigurableReposito
|
|||
* Find a file by name, returning the one that has the shortest path.
|
||||
*
|
||||
* @param \ZipArchive $zip
|
||||
* @param $filename
|
||||
* @param string $filename
|
||||
* @return bool|int
|
||||
*/
|
||||
private function locateFile(\ZipArchive $zip, $filename)
|
||||
|
@ -126,7 +126,9 @@ class ArtifactRepository extends ArrayRepository implements ConfigurableReposito
|
|||
private function getComposerInformation(\SplFileInfo $file)
|
||||
{
|
||||
$zip = new \ZipArchive();
|
||||
$zip->open($file->getPathname());
|
||||
if ($zip->open($file->getPathname()) !== true) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (0 == $zip->numFiles) {
|
||||
$zip->close();
|
||||
|
|
|
@ -44,8 +44,8 @@ abstract class BaseChannelReader
|
|||
/**
|
||||
* Read content from remote filesystem.
|
||||
*
|
||||
* @param $origin string server
|
||||
* @param $path string relative path to content
|
||||
* @param string $origin server
|
||||
* @param string $path relative path to content
|
||||
* @throws \UnexpectedValueException
|
||||
* @return \SimpleXMLElement
|
||||
*/
|
||||
|
@ -63,8 +63,8 @@ abstract class BaseChannelReader
|
|||
/**
|
||||
* Read xml content from remote filesystem
|
||||
*
|
||||
* @param $origin string server
|
||||
* @param $path string relative path to content
|
||||
* @param string $origin server
|
||||
* @param string $path relative path to content
|
||||
* @throws \UnexpectedValueException
|
||||
* @return \SimpleXMLElement
|
||||
*/
|
||||
|
|
|
@ -44,7 +44,7 @@ class ChannelReader extends BaseChannelReader
|
|||
/**
|
||||
* Reads PEAR channel through REST interface and builds list of packages
|
||||
*
|
||||
* @param $url string PEAR Channel url
|
||||
* @param string $url PEAR Channel url
|
||||
* @throws \UnexpectedValueException
|
||||
* @return ChannelInfo
|
||||
*/
|
||||
|
@ -70,8 +70,8 @@ class ChannelReader extends BaseChannelReader
|
|||
/**
|
||||
* Reads channel supported REST interfaces and selects one of them
|
||||
*
|
||||
* @param $channelXml \SimpleXMLElement
|
||||
* @param $supportedVersions string[] supported PEAR REST protocols
|
||||
* @param \SimpleXMLElement $channelXml
|
||||
* @param string[] $supportedVersions supported PEAR REST protocols
|
||||
* @return array|null hash with selected version and baseUrl
|
||||
*/
|
||||
private function selectRestVersion($channelXml, $supportedVersions)
|
||||
|
|
|
@ -39,7 +39,7 @@ class ChannelRest10Reader extends BaseChannelReader
|
|||
/**
|
||||
* Reads package descriptions using PEAR Rest 1.0 interface
|
||||
*
|
||||
* @param $baseUrl string base Url interface
|
||||
* @param string $baseUrl base Url interface
|
||||
*
|
||||
* @return PackageInfo[]
|
||||
*/
|
||||
|
@ -52,7 +52,7 @@ class ChannelRest10Reader extends BaseChannelReader
|
|||
* Read list of packages from
|
||||
* {baseUrl}/p/packages.xml
|
||||
*
|
||||
* @param $baseUrl string
|
||||
* @param string $baseUrl
|
||||
* @return PackageInfo[]
|
||||
*/
|
||||
private function readPackages($baseUrl)
|
||||
|
@ -75,8 +75,8 @@ class ChannelRest10Reader extends BaseChannelReader
|
|||
* Read package info from
|
||||
* {baseUrl}/p/{package}/info.xml
|
||||
*
|
||||
* @param $baseUrl string
|
||||
* @param $packageName string
|
||||
* @param string $baseUrl
|
||||
* @param string $packageName
|
||||
* @return PackageInfo
|
||||
*/
|
||||
private function readPackage($baseUrl, $packageName)
|
||||
|
@ -105,8 +105,8 @@ class ChannelRest10Reader extends BaseChannelReader
|
|||
* Read package releases from
|
||||
* {baseUrl}/p/{package}/allreleases.xml
|
||||
*
|
||||
* @param $baseUrl string
|
||||
* @param $packageName string
|
||||
* @param string $baseUrl
|
||||
* @param string $packageName
|
||||
* @throws \Composer\Downloader\TransportException|\Exception
|
||||
* @return ReleaseInfo[] hash array with keys as version numbers
|
||||
*/
|
||||
|
@ -146,9 +146,9 @@ class ChannelRest10Reader extends BaseChannelReader
|
|||
* Read package dependencies from
|
||||
* {baseUrl}/p/{package}/deps.{version}.txt
|
||||
*
|
||||
* @param $baseUrl string
|
||||
* @param $packageName string
|
||||
* @param $version string
|
||||
* @param string $baseUrl
|
||||
* @param string $packageName
|
||||
* @param string $version
|
||||
* @return DependencyInfo[]
|
||||
*/
|
||||
private function readPackageReleaseDependencies($baseUrl, $packageName, $version)
|
||||
|
|
|
@ -35,7 +35,7 @@ class ChannelRest11Reader extends BaseChannelReader
|
|||
/**
|
||||
* Reads package descriptions using PEAR Rest 1.1 interface
|
||||
*
|
||||
* @param $baseUrl string base Url interface
|
||||
* @param string $baseUrl base Url interface
|
||||
*
|
||||
* @return PackageInfo[]
|
||||
*/
|
||||
|
@ -48,7 +48,7 @@ class ChannelRest11Reader extends BaseChannelReader
|
|||
* Read list of channel categories from
|
||||
* {baseUrl}/c/categories.xml
|
||||
*
|
||||
* @param $baseUrl string
|
||||
* @param string $baseUrl
|
||||
* @return PackageInfo[]
|
||||
*/
|
||||
private function readChannelPackages($baseUrl)
|
||||
|
@ -70,8 +70,8 @@ class ChannelRest11Reader extends BaseChannelReader
|
|||
* Read packages from
|
||||
* {baseUrl}/c/{category}/packagesinfo.xml
|
||||
*
|
||||
* @param $baseUrl string
|
||||
* @param $categoryName string
|
||||
* @param string $baseUrl
|
||||
* @param string $categoryName
|
||||
* @return PackageInfo[]
|
||||
*/
|
||||
private function readCategoryPackages($baseUrl, $categoryName)
|
||||
|
@ -92,7 +92,7 @@ class ChannelRest11Reader extends BaseChannelReader
|
|||
/**
|
||||
* Parses package node.
|
||||
*
|
||||
* @param $packageInfo \SimpleXMLElement xml element describing package
|
||||
* @param \SimpleXMLElement $packageInfo xml element describing package
|
||||
* @return PackageInfo
|
||||
*/
|
||||
private function parsePackage($packageInfo)
|
||||
|
|
|
@ -22,7 +22,7 @@ class PackageDependencyParser
|
|||
/**
|
||||
* Builds dependency information. It detects used package.xml format.
|
||||
*
|
||||
* @param $depArray array
|
||||
* @param array $depArray
|
||||
* @return DependencyInfo
|
||||
*/
|
||||
public function buildDependencyInfo($depArray)
|
||||
|
@ -46,7 +46,7 @@ class PackageDependencyParser
|
|||
* { type="php|os|sapi|ext|pkg" rel="has|not|eq|ge|gt|le|lt" optional="yes"
|
||||
* channel="channelName" name="extName|packageName" }
|
||||
*
|
||||
* @param $depArray array Dependency data in package.xml 1.0 format
|
||||
* @param array $depArray Dependency data in package.xml 1.0 format
|
||||
* @return DependencyConstraint[]
|
||||
*/
|
||||
private function buildDependency10Info($depArray)
|
||||
|
@ -115,7 +115,7 @@ class PackageDependencyParser
|
|||
/**
|
||||
* Builds dependency information from package.xml 2.0 format
|
||||
*
|
||||
* @param $depArray array Dependency data in package.xml 1.0 format
|
||||
* @param array $depArray Dependency data in package.xml 1.0 format
|
||||
* @return DependencyInfo
|
||||
*/
|
||||
private function buildDependency20Info($depArray)
|
||||
|
@ -187,8 +187,8 @@ class PackageDependencyParser
|
|||
/**
|
||||
* Builds dependency constraint of 'extension' type
|
||||
*
|
||||
* @param $depItem array dependency constraint or array of dependency constraints
|
||||
* @param $depType string target type of building constraint.
|
||||
* @param array $depItem dependency constraint or array of dependency constraints
|
||||
* @param string $depType target type of building constraint.
|
||||
* @return DependencyConstraint[]
|
||||
*/
|
||||
private function buildDepExtensionConstraints($depItem, $depType)
|
||||
|
@ -217,8 +217,8 @@ class PackageDependencyParser
|
|||
/**
|
||||
* Builds dependency constraint of 'package' type
|
||||
*
|
||||
* @param $depItem array dependency constraint or array of dependency constraints
|
||||
* @param $depType string target type of building constraint.
|
||||
* @param array $depItem dependency constraint or array of dependency constraints
|
||||
* @param string $depType target type of building constraint.
|
||||
* @return DependencyConstraint[]
|
||||
*/
|
||||
private function buildDepPackageConstraints($depItem, $depType)
|
||||
|
@ -287,7 +287,7 @@ class PackageDependencyParser
|
|||
/**
|
||||
* Softened version parser
|
||||
*
|
||||
* @param $version
|
||||
* @param string $version
|
||||
* @return null|string
|
||||
*/
|
||||
private function parseVersion($version)
|
||||
|
|
|
@ -236,7 +236,12 @@ class PlatformRepository extends ArrayRepository
|
|||
// Skip if overridden
|
||||
if (isset($this->overrides[$package->getName()])) {
|
||||
$overrider = $this->findPackage($package->getName(), '*');
|
||||
$overrider->setDescription($overrider->getDescription().' (actual: '.$package->getPrettyVersion().')');
|
||||
if ($package->getVersion() === $overrider->getVersion()) {
|
||||
$actualText = 'same as actual';
|
||||
} else {
|
||||
$actualText = 'actual: '.$package->getPrettyVersion();
|
||||
}
|
||||
$overrider->setDescription($overrider->getDescription().' ('.$actualText.')');
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -244,7 +249,12 @@ class PlatformRepository extends ArrayRepository
|
|||
// Skip if PHP is overridden and we are adding a php-* package
|
||||
if (isset($this->overrides['php']) && 0 === strpos($package->getName(), 'php-')) {
|
||||
$overrider = $this->addOverriddenPackage($this->overrides['php'], $package->getPrettyName());
|
||||
$overrider->setDescription($overrider->getDescription().' (actual: '.$package->getPrettyVersion().')');
|
||||
if ($package->getVersion() === $overrider->getVersion()) {
|
||||
$actualText = 'same as actual';
|
||||
} else {
|
||||
$actualText = 'actual: '.$package->getPrettyVersion();
|
||||
}
|
||||
$overrider->setDescription($overrider->getDescription().' ('.$actualText.')');
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -81,11 +81,4 @@ interface RepositoryInterface extends \Countable
|
|||
* @return array[] an array of array('name' => '...', 'description' => '...')
|
||||
*/
|
||||
public function search($query, $mode = 0);
|
||||
|
||||
/**
|
||||
* Removes a package from the registered packages list.
|
||||
*
|
||||
* @param PackageInterface $package
|
||||
*/
|
||||
public function removePackage(PackageInterface $package);
|
||||
}
|
||||
|
|
|
@ -189,8 +189,15 @@ abstract class BitbucketDriver extends VcsDriver
|
|||
return $this->fallbackDriver->getFileContent($file, $identifier);
|
||||
}
|
||||
|
||||
if (strpos($identifier, '/') !== false) {
|
||||
$branches = $this->getBranches();
|
||||
if (isset($branches[$identifier])) {
|
||||
$identifier = $branches[$identifier];
|
||||
}
|
||||
}
|
||||
|
||||
$resource = sprintf(
|
||||
'https://api.bitbucket.org/1.0/repositories/%s/%s/raw/%s/%s',
|
||||
'https://api.bitbucket.org/2.0/repositories/%s/%s/src/%s/%s',
|
||||
$this->owner,
|
||||
$this->repository,
|
||||
$identifier,
|
||||
|
@ -421,11 +428,16 @@ abstract class BitbucketDriver extends VcsDriver
|
|||
protected function getMainBranchData()
|
||||
{
|
||||
$resource = sprintf(
|
||||
'https://api.bitbucket.org/1.0/repositories/%s/%s/main-branch',
|
||||
'https://api.bitbucket.org/2.0/repositories/%s/%s?fields=mainbranch',
|
||||
$this->owner,
|
||||
$this->repository
|
||||
);
|
||||
|
||||
return JsonFile::parseJson($this->getContentsWithOAuthCredentials($resource), $resource);
|
||||
$data = JsonFile::parseJson($this->getContentsWithOAuthCredentials($resource), $resource);
|
||||
if (isset($data['mainbranch'])) {
|
||||
return $data['mainbranch'];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,8 +41,10 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt
|
|||
private $drivers;
|
||||
/** @var VcsDriverInterface */
|
||||
private $driver;
|
||||
/** @var VersionCacheInterface */
|
||||
private $versionCache;
|
||||
|
||||
public function __construct(array $repoConfig, IOInterface $io, Config $config, EventDispatcher $dispatcher = null, array $drivers = null)
|
||||
public function __construct(array $repoConfig, IOInterface $io, Config $config, EventDispatcher $dispatcher = null, array $drivers = null, VersionCacheInterface $versionCache = null)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->drivers = $drivers ?: array(
|
||||
|
@ -64,6 +66,7 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt
|
|||
$this->verbose = $io->isVeryVerbose();
|
||||
$this->config = $config;
|
||||
$this->repoConfig = $repoConfig;
|
||||
$this->versionCache = $versionCache;
|
||||
}
|
||||
|
||||
public function getRepoConfig()
|
||||
|
@ -152,6 +155,13 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt
|
|||
// strip the release- prefix from tags if present
|
||||
$tag = str_replace('release-', '', $tag);
|
||||
|
||||
$cachedPackage = $this->getCachedPackageVersion($tag, $identifier, $verbose);
|
||||
if ($cachedPackage) {
|
||||
$this->addPackage($cachedPackage);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!$parsedTag = $this->validateTag($tag)) {
|
||||
if ($verbose) {
|
||||
$this->io->writeError('<warning>Skipped tag '.$tag.', invalid tag name</warning>');
|
||||
|
@ -188,7 +198,8 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt
|
|||
continue;
|
||||
}
|
||||
|
||||
if ($existingPackage = $this->findPackage($data['name'], $data['version_normalized'])) {
|
||||
$tagPackageName = isset($data['name']) ? $data['name'] : $this->packageName;
|
||||
if ($existingPackage = $this->findPackage($tagPackageName, $data['version_normalized'])) {
|
||||
if ($verbose) {
|
||||
$this->io->writeError('<warning>Skipped tag '.$tag.', it conflicts with an another tag ('.$existingPackage->getPrettyVersion().') as both resolve to '.$data['version_normalized'].' internally</warning>');
|
||||
}
|
||||
|
@ -235,6 +246,21 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt
|
|||
continue;
|
||||
}
|
||||
|
||||
// make sure branch packages have a dev flag
|
||||
if ('dev-' === substr($parsedBranch, 0, 4) || '9999999-dev' === $parsedBranch) {
|
||||
$version = 'dev-' . $branch;
|
||||
} else {
|
||||
$prefix = substr($branch, 0, 1) === 'v' ? 'v' : '';
|
||||
$version = $prefix . preg_replace('{(\.9{7})+}', '.x', $parsedBranch);
|
||||
}
|
||||
|
||||
$cachedPackage = $this->getCachedPackageVersion($version, $identifier, $verbose);
|
||||
if ($cachedPackage) {
|
||||
$this->addPackage($cachedPackage);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
if (!$data = $driver->getComposerInformation($identifier)) {
|
||||
if ($verbose) {
|
||||
|
@ -244,17 +270,9 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt
|
|||
}
|
||||
|
||||
// branches are always auto-versioned, read value from branch name
|
||||
$data['version'] = $branch;
|
||||
$data['version'] = $version;
|
||||
$data['version_normalized'] = $parsedBranch;
|
||||
|
||||
// make sure branch packages have a dev flag
|
||||
if ('dev-' === substr($parsedBranch, 0, 4) || '9999999-dev' === $parsedBranch) {
|
||||
$data['version'] = 'dev-' . $data['version'];
|
||||
} else {
|
||||
$prefix = substr($branch, 0, 1) === 'v' ? 'v' : '';
|
||||
$data['version'] = $prefix . preg_replace('{(\.9{7})+}', '.x', $parsedBranch);
|
||||
}
|
||||
|
||||
if ($verbose) {
|
||||
$this->io->writeError('Importing branch '.$branch.' ('.$data['version'].')');
|
||||
}
|
||||
|
@ -294,7 +312,8 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt
|
|||
protected function preProcess(VcsDriverInterface $driver, array $data, $identifier)
|
||||
{
|
||||
// keep the name of the main identifier for all packages
|
||||
$data['name'] = $this->packageName ?: $data['name'];
|
||||
$dataPackageName = isset($data['name']) ? $data['name'] : null;
|
||||
$data['name'] = $this->packageName ?: $dataPackageName;
|
||||
|
||||
if (!isset($data['dist'])) {
|
||||
$data['dist'] = $driver->getDist($identifier);
|
||||
|
@ -325,4 +344,34 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
private function getCachedPackageVersion($version, $identifier, $verbose)
|
||||
{
|
||||
if (!$this->versionCache) {
|
||||
return;
|
||||
}
|
||||
|
||||
$cachedPackage = $this->versionCache->getVersionPackage($version, $identifier);
|
||||
if ($cachedPackage) {
|
||||
$msg = 'Found cached composer.json of <info>' . ($this->packageName ?: $this->url) . '</info> (<comment>' . $version . '</comment>)';
|
||||
if ($verbose) {
|
||||
$this->io->writeError($msg);
|
||||
} else {
|
||||
$this->io->overwriteError($msg, false);
|
||||
}
|
||||
|
||||
if ($existingPackage = $this->findPackage($cachedPackage['name'], $cachedPackage['version_normalized'])) {
|
||||
if ($verbose) {
|
||||
$this->io->writeError('<warning>Skipped cached version '.$version.', it conflicts with an another tag ('.$existingPackage->getPrettyVersion().') as both resolve to '.$cachedPackage['version_normalized'].' internally</warning>');
|
||||
}
|
||||
$cachedPackage = null;
|
||||
}
|
||||
}
|
||||
|
||||
if ($cachedPackage) {
|
||||
return $this->loader->load($cachedPackage);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
<?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\Repository;
|
||||
|
||||
interface VersionCacheInterface
|
||||
{
|
||||
/**
|
||||
* @param string $version
|
||||
* @param string $identifier
|
||||
* @return array Package version data
|
||||
*/
|
||||
public function getVersionPackage($version, $identifier);
|
||||
}
|
|
@ -41,7 +41,7 @@ class ErrorHandler
|
|||
return;
|
||||
}
|
||||
|
||||
if (ini_get('xdebug.scream')) {
|
||||
if (filter_var(ini_get('xdebug.scream'), FILTER_VALIDATE_BOOLEAN)) {
|
||||
$message .= "\n\nWarning: You have xdebug.scream enabled, the warning above may be".
|
||||
"\na legitimately suppressed error that you were not supposed to see.";
|
||||
}
|
||||
|
|
|
@ -264,8 +264,8 @@ class Filesystem
|
|||
/**
|
||||
* Copies a file or directory from $source to $target.
|
||||
*
|
||||
* @param $source
|
||||
* @param $target
|
||||
* @param string $source
|
||||
* @param string $target
|
||||
* @return bool
|
||||
*/
|
||||
public function copy($source, $target)
|
||||
|
|
|
@ -35,7 +35,7 @@ class NoProxyPattern
|
|||
*
|
||||
* @param string $url
|
||||
*
|
||||
* @return true if the URL matches one of the rules.
|
||||
* @return bool true if the URL matches one of the rules.
|
||||
*/
|
||||
public function test($url)
|
||||
{
|
||||
|
|
|
@ -485,8 +485,7 @@ class Perforce
|
|||
$resArray = explode(PHP_EOL, $result);
|
||||
$tags = array();
|
||||
foreach ($resArray as $line) {
|
||||
$index = strpos($line, 'Label');
|
||||
if (!($index === false)) {
|
||||
if (strpos($line, 'Label') !== false) {
|
||||
$fields = explode(' ', $line);
|
||||
$tags[$fields[1]] = $this->getStream() . '@' . $fields[1];
|
||||
}
|
||||
|
@ -502,8 +501,7 @@ class Perforce
|
|||
$result = $this->commandResult;
|
||||
$resArray = explode(PHP_EOL, $result);
|
||||
foreach ($resArray as $line) {
|
||||
$index = strpos($line, 'Depot');
|
||||
if (!($index === false)) {
|
||||
if (strpos($line, 'Depot') !== false) {
|
||||
$fields = explode(' ', $line);
|
||||
if (strcmp($this->p4Depot, $fields[1]) === 0) {
|
||||
$this->p4DepotType = $fields[3];
|
||||
|
@ -517,7 +515,7 @@ class Perforce
|
|||
}
|
||||
|
||||
/**
|
||||
* @param $reference
|
||||
* @param string $reference
|
||||
* @return mixed|null
|
||||
*/
|
||||
protected function getChangeList($reference)
|
||||
|
@ -539,8 +537,8 @@ class Perforce
|
|||
}
|
||||
|
||||
/**
|
||||
* @param $fromReference
|
||||
* @param $toReference
|
||||
* @param string $fromReference
|
||||
* @param string $toReference
|
||||
* @return mixed|null
|
||||
*/
|
||||
public function getCommitLogs($fromReference, $toReference)
|
||||
|
|
|
@ -60,7 +60,7 @@ class ProcessExecutor
|
|||
$cwd = realpath(getcwd());
|
||||
}
|
||||
|
||||
$this->captureOutput = count(func_get_args()) > 1;
|
||||
$this->captureOutput = func_num_args() > 1;
|
||||
$this->errorOutput = null;
|
||||
$process = new Process($command, $cwd, null, null, static::getTimeout());
|
||||
|
||||
|
@ -131,15 +131,11 @@ class ProcessExecutor
|
|||
*/
|
||||
public static function escape($argument)
|
||||
{
|
||||
if (method_exists('Symfony\Component\Process\ProcessUtils', 'escapeArgument')) {
|
||||
return ProcessUtils::escapeArgument($argument);
|
||||
}
|
||||
|
||||
return self::escapeArgument($argument);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy of ProcessUtils::escapeArgument() that is removed in Symfony 4.
|
||||
* Copy of ProcessUtils::escapeArgument() that is deprecated in Symfony 3.3 and removed in Symfony 4.
|
||||
*
|
||||
* @param string $argument
|
||||
*
|
||||
|
|
|
@ -114,13 +114,18 @@ class RemoteFilesystem
|
|||
/**
|
||||
* Merges new options
|
||||
*
|
||||
* @return array $options
|
||||
* @param array $options
|
||||
*/
|
||||
public function setOptions(array $options)
|
||||
{
|
||||
$this->options = array_replace_recursive($this->options, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check is disable TLS.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isTlsDisabled()
|
||||
{
|
||||
return $this->disableTls === true;
|
||||
|
@ -364,7 +369,7 @@ class RemoteFilesystem
|
|||
}
|
||||
$result = false;
|
||||
}
|
||||
if ($errorMessage && !ini_get('allow_url_fopen')) {
|
||||
if ($errorMessage && !filter_var(ini_get('allow_url_fopen'), FILTER_VALIDATE_BOOLEAN)) {
|
||||
$errorMessage = 'allow_url_fopen must be enabled in php.ini ('.$errorMessage.')';
|
||||
}
|
||||
restore_error_handler();
|
||||
|
@ -385,15 +390,18 @@ class RemoteFilesystem
|
|||
|
||||
$statusCode = null;
|
||||
$contentType = null;
|
||||
$locationHeader = null;
|
||||
if (!empty($http_response_header[0])) {
|
||||
$statusCode = $this->findStatusCode($http_response_header);
|
||||
$contentType = $this->findHeaderValue($http_response_header, 'content-type');
|
||||
$locationHeader = $this->findHeaderValue($http_response_header, 'location');
|
||||
}
|
||||
|
||||
// check for bitbucket login page asking to authenticate
|
||||
if ($originUrl === 'bitbucket.org'
|
||||
&& !$this->isPublicBitBucketDownload($fileUrl)
|
||||
&& substr($fileUrl, -4) === '.zip'
|
||||
&& (!$locationHeader || substr($locationHeader, -4) !== '.zip')
|
||||
&& $contentType && preg_match('{^text/html\b}i', $contentType)
|
||||
) {
|
||||
$result = false;
|
||||
|
|
|
@ -160,7 +160,7 @@ final class StreamContextFactory
|
|||
* This method fixes the array by moving the content-type header to the end
|
||||
*
|
||||
* @link https://bugs.php.net/bug.php?id=61548
|
||||
* @param $header
|
||||
* @param string|array $header
|
||||
* @return array
|
||||
*/
|
||||
private static function fixHttpHeaderField($header)
|
||||
|
|
|
@ -164,7 +164,7 @@ final class TlsHelper
|
|||
*
|
||||
* @param string $certName CN/SAN
|
||||
*
|
||||
* @return callable|null
|
||||
* @return callable|void
|
||||
*/
|
||||
private static function certNameMatcher($certName)
|
||||
{
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
namespace Composer\Test;
|
||||
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
use Symfony\Component\Finder\Finder;
|
||||
use Symfony\Component\Process\Process;
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test;
|
||||
|
||||
use Composer\Console\Application;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class ApplicationTest extends TestCase
|
||||
|
|
|
@ -17,7 +17,7 @@ use Composer\Package\Link;
|
|||
use Composer\Util\Filesystem;
|
||||
use Composer\Package\AliasPackage;
|
||||
use Composer\Package\Package;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Script\ScriptEvents;
|
||||
use Composer\Repository\InstalledRepositoryInterface;
|
||||
use Composer\Installer\InstallationManager;
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
namespace Composer\Test\Autoload;
|
||||
|
||||
use Composer\Autoload\ClassMapGenerator;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Symfony\Component\Finder\Finder;
|
||||
use Composer\Util\Filesystem;
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
namespace Composer\Test;
|
||||
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
|
||||
class CacheTest extends TestCase
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test\Command;
|
||||
|
||||
use Composer\Command\InitCommand;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class InitCommandTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace Composer\Test\Command;
|
|||
use Composer\Composer;
|
||||
use Composer\Config;
|
||||
use Composer\Script\Event as ScriptEvent;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class RunScriptCommandTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test;
|
||||
|
||||
use Composer\Composer;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class ComposerTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -10,11 +10,11 @@
|
|||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Test\Json;
|
||||
namespace Composer\Test\Config;
|
||||
|
||||
use Composer\Config\JsonConfigSource;
|
||||
use Composer\Json\JsonFile;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
|
||||
class JsonConfigSourceTest extends TestCase
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test;
|
||||
|
||||
use Composer\Config;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class ConfigTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test;
|
||||
|
||||
use Composer\Config;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class DefaultConfigTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -20,8 +20,7 @@ use Composer\Package\Link;
|
|||
use Composer\Package\AliasPackage;
|
||||
use Composer\Repository\RepositorySet;
|
||||
use Composer\Semver\Constraint\Constraint;
|
||||
use Composer\TestCase;
|
||||
use http\Env\Request;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class DefaultPolicyTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace Composer\Test\DependencyResolver;
|
|||
use Composer\DependencyResolver\Pool;
|
||||
use Composer\Repository\ArrayRepository;
|
||||
use Composer\Package\BasePackage;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class PoolTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Composer\Test\DependencyResolver;
|
|||
|
||||
use Composer\DependencyResolver\Request;
|
||||
use Composer\Repository\ArrayRepository;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class RequestTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -18,7 +18,7 @@ use Composer\DependencyResolver\RuleSet;
|
|||
use Composer\DependencyResolver\Pool;
|
||||
use Composer\Package\BasePackage;
|
||||
use Composer\Repository\ArrayRepository;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class RuleSetTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -18,7 +18,7 @@ use Composer\DependencyResolver\RuleSet;
|
|||
use Composer\DependencyResolver\Pool;
|
||||
use Composer\Package\BasePackage;
|
||||
use Composer\Repository\ArrayRepository;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class RuleTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -22,7 +22,7 @@ use Composer\DependencyResolver\SolverProblemsException;
|
|||
use Composer\Package\Link;
|
||||
use Composer\Repository\InstalledArrayRepository;
|
||||
use Composer\Repository\RepositorySet;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Semver\Constraint\MultiConstraint;
|
||||
|
||||
class SolverTest extends TestCase
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test\Downloader;
|
||||
|
||||
use Composer\Downloader\FileDownloader;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
|
||||
class FileDownloaderTest extends TestCase
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test\Downloader;
|
||||
|
||||
use Composer\Downloader\FossilDownloader;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
use Composer\Util\Platform;
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Composer\Test\Downloader;
|
|||
|
||||
use Composer\Downloader\GitDownloader;
|
||||
use Composer\Config;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
use Composer\Util\Platform;
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test\Downloader;
|
||||
|
||||
use Composer\Downloader\HgDownloader;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
use Composer\Util\Platform;
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test\Downloader;
|
||||
|
||||
use Composer\Downloader\PearPackageExtractor;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class PearPackageExtractorTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -16,7 +16,7 @@ use Composer\Downloader\PerforceDownloader;
|
|||
use Composer\Config;
|
||||
use Composer\Repository\VcsRepository;
|
||||
use Composer\IO\IOInterface;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
|
||||
/**
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test\Downloader;
|
||||
|
||||
use Composer\Downloader\XzDownloader;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
use Composer\Util\Platform;
|
||||
use Composer\Util\RemoteFilesystem;
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Composer\Test\Downloader;
|
|||
|
||||
use Composer\Downloader\ZipDownloader;
|
||||
use Composer\Package\PackageInterface;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
|
||||
class ZipDownloaderTest extends TestCase
|
||||
|
@ -24,6 +24,8 @@ class ZipDownloaderTest extends TestCase
|
|||
*/
|
||||
private $testDir;
|
||||
private $prophet;
|
||||
private $io;
|
||||
private $config;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
|
@ -46,9 +48,9 @@ class ZipDownloaderTest extends TestCase
|
|||
$reflectedProperty = $reflectionClass->getProperty($name);
|
||||
$reflectedProperty->setAccessible(true);
|
||||
if ($obj === null) {
|
||||
$reflectedProperty = $reflectedProperty->setValue($value);
|
||||
$reflectedProperty->setValue($value);
|
||||
} else {
|
||||
$reflectedProperty = $reflectedProperty->setValue($obj, $value);
|
||||
$reflectedProperty->setValue($obj, $value);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ use Composer\EventDispatcher\EventDispatcher;
|
|||
use Composer\Installer\InstallerEvents;
|
||||
use Composer\Config;
|
||||
use Composer\Composer;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\IO\BufferIO;
|
||||
use Composer\Script\ScriptEvents;
|
||||
use Composer\Script\Event as ScriptEvent;
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
<?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\Test;
|
||||
|
||||
use Composer\Factory;
|
||||
|
||||
class FactoryTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @group TLS
|
||||
*/
|
||||
public function testDefaultValuesAreAsExpected()
|
||||
{
|
||||
$ioMock = $this->getMockBuilder('Composer\IO\IOInterface')->getMock();
|
||||
|
||||
$ioMock->expects($this->once())
|
||||
->method("writeError")
|
||||
->with($this->equalTo('<warning>You are running Composer with SSL/TLS protection disabled.</warning>'));
|
||||
|
||||
$config = $this
|
||||
->getMockBuilder('Composer\Config')
|
||||
->getMock();
|
||||
|
||||
$config->method('get')
|
||||
->with($this->equalTo('disable-tls'))
|
||||
->will($this->returnValue(true));
|
||||
|
||||
Factory::createRemoteFilesystem($ioMock, $config);
|
||||
}
|
||||
}
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test\IO;
|
||||
|
||||
use Composer\IO\ConsoleIO;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class ConsoleIOTest extends TestCase
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test\IO;
|
||||
|
||||
use Composer\IO\NullIO;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class NullIOTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Composer\Test\Installer;
|
|||
|
||||
use Composer\Installer\LibraryInstaller;
|
||||
use Composer\Util\Filesystem;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Composer;
|
||||
use Composer\Config;
|
||||
|
||||
|
|
|
@ -30,7 +30,6 @@ use Symfony\Component\Console\Input\StringInput;
|
|||
use Symfony\Component\Console\Output\StreamOutput;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Formatter\OutputFormatter;
|
||||
use Composer\TestCase;
|
||||
|
||||
class InstallerTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -19,7 +19,7 @@ use Composer\Repository\RepositoryManager;
|
|||
use Composer\Repository\WritableRepositoryInterface;
|
||||
use Composer\Installer;
|
||||
use Composer\IO\IOInterface;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class FactoryMock extends Factory
|
||||
{
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test\Package\Archiver;
|
||||
|
||||
use Composer\Package\Archiver\ArchivableFilesFinder;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
use Symfony\Component\Process\Process;
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
namespace Composer\Test\Package\Archiver;
|
||||
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
use Composer\Util\ProcessExecutor;
|
||||
use Composer\Package\Package;
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Composer\Test\Package;
|
|||
|
||||
use Composer\Package\Package;
|
||||
use Composer\Semver\VersionParser;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class CompletePackageTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Composer\Test\Package;
|
|||
|
||||
use Composer\Package\Link;
|
||||
use Composer\Package\RootAliasPackage;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Prophecy\Argument;
|
||||
|
||||
class RootAliasPackageTest extends TestCase
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Test\Installer;
|
||||
namespace Composer\Test\Plugin;
|
||||
|
||||
use Composer\Composer;
|
||||
use Composer\Config;
|
||||
|
@ -20,7 +20,7 @@ use Composer\Package\Loader\JsonLoader;
|
|||
use Composer\Package\Loader\ArrayLoader;
|
||||
use Composer\Plugin\PluginManager;
|
||||
use Composer\Autoload\AutoloadGenerator;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
|
||||
class PluginInstallerTest extends TestCase
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Question\Test;
|
||||
namespace Composer\Test\Question;
|
||||
|
||||
use Composer\Question\StrictConfirmationQuestion;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Composer\Test\Repository;
|
|||
|
||||
use Composer\Repository\ArrayRepository;
|
||||
use Composer\Repository\RepositoryInterface;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class ArrayRepositoryTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test\Repository;
|
||||
|
||||
use Composer\Repository\ArtifactRepository;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\IO\NullIO;
|
||||
use Composer\Config;
|
||||
use Composer\Package\BasePackage;
|
||||
|
@ -42,7 +42,7 @@ class ArtifactRepositoryTest extends TestCase
|
|||
);
|
||||
|
||||
$coordinates = array('type' => 'artifact', 'url' => __DIR__ . '/Fixtures/artifacts');
|
||||
$repo = new ArtifactRepository($coordinates, new NullIO(), new Config());
|
||||
$repo = new ArtifactRepository($coordinates, new NullIO());
|
||||
|
||||
$foundPackages = array_map(function (BasePackage $package) {
|
||||
return "{$package->getPrettyName()}-{$package->getPrettyVersion()}";
|
||||
|
@ -58,7 +58,7 @@ class ArtifactRepositoryTest extends TestCase
|
|||
{
|
||||
$absolutePath = __DIR__ . '/Fixtures/artifacts';
|
||||
$coordinates = array('type' => 'artifact', 'url' => $absolutePath);
|
||||
$repo = new ArtifactRepository($coordinates, new NullIO(), new Config());
|
||||
$repo = new ArtifactRepository($coordinates, new NullIO());
|
||||
|
||||
foreach ($repo->getPackages() as $package) {
|
||||
$this->assertSame(strpos($package->getDistUrl(), strtr($absolutePath, '\\', '/')), 0);
|
||||
|
@ -69,7 +69,7 @@ class ArtifactRepositoryTest extends TestCase
|
|||
{
|
||||
$relativePath = 'tests/Composer/Test/Repository/Fixtures/artifacts';
|
||||
$coordinates = array('type' => 'artifact', 'url' => $relativePath);
|
||||
$repo = new ArtifactRepository($coordinates, new NullIO(), new Config());
|
||||
$repo = new ArtifactRepository($coordinates, new NullIO());
|
||||
|
||||
foreach ($repo->getPackages() as $package) {
|
||||
$this->assertSame(strpos($package->getDistUrl(), $relativePath), 0);
|
||||
|
|
|
@ -16,7 +16,7 @@ use Composer\IO\NullIO;
|
|||
use Composer\Repository\ComposerRepository;
|
||||
use Composer\Repository\RepositoryInterface;
|
||||
use Composer\Test\Mock\FactoryMock;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Package\Loader\ArrayLoader;
|
||||
use Composer\Semver\VersionParser;
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Composer\Test\Repository;
|
|||
|
||||
use Composer\Repository\CompositeRepository;
|
||||
use Composer\Repository\ArrayRepository;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class CompositeRepositoryTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test\Repository;
|
||||
|
||||
use Composer\Repository\FilesystemRepository;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class FilesystemRepositoryTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
AAAAAAAAA
|
|
@ -15,7 +15,7 @@ namespace Composer\Test\Repository;
|
|||
use Composer\Package\Loader\ArrayLoader;
|
||||
use Composer\Repository\PathRepository;
|
||||
use Composer\Semver\VersionParser;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class PathRepositoryTest extends TestCase
|
||||
{
|
||||
|
@ -25,11 +25,10 @@ class PathRepositoryTest extends TestCase
|
|||
->getMock();
|
||||
|
||||
$config = new \Composer\Config();
|
||||
$loader = new ArrayLoader(new VersionParser());
|
||||
$versionGuesser = null;
|
||||
|
||||
$repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', 'with-version'));
|
||||
$repository = new PathRepository(array('url' => $repositoryUrl), $ioInterface, $config, $loader);
|
||||
$repository = new PathRepository(array('url' => $repositoryUrl), $ioInterface, $config);
|
||||
$repository->getPackages();
|
||||
|
||||
$this->assertEquals(1, $repository->count());
|
||||
|
@ -42,11 +41,10 @@ class PathRepositoryTest extends TestCase
|
|||
->getMock();
|
||||
|
||||
$config = new \Composer\Config();
|
||||
$loader = new ArrayLoader(new VersionParser());
|
||||
$versionGuesser = null;
|
||||
|
||||
$repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', 'without-version'));
|
||||
$repository = new PathRepository(array('url' => $repositoryUrl), $ioInterface, $config, $loader);
|
||||
$repository = new PathRepository(array('url' => $repositoryUrl), $ioInterface, $config);
|
||||
$packages = $repository->getPackages();
|
||||
|
||||
$this->assertEquals(1, $repository->count());
|
||||
|
@ -64,11 +62,10 @@ class PathRepositoryTest extends TestCase
|
|||
->getMock();
|
||||
|
||||
$config = new \Composer\Config();
|
||||
$loader = new ArrayLoader(new VersionParser());
|
||||
$versionGuesser = null;
|
||||
|
||||
$repositoryUrl = implode(DIRECTORY_SEPARATOR, array(__DIR__, 'Fixtures', 'path', '*'));
|
||||
$repository = new PathRepository(array('url' => $repositoryUrl), $ioInterface, $config, $loader);
|
||||
$repository = new PathRepository(array('url' => $repositoryUrl), $ioInterface, $config);
|
||||
$packages = $repository->getPackages();
|
||||
$names = array();
|
||||
|
||||
|
@ -93,7 +90,6 @@ class PathRepositoryTest extends TestCase
|
|||
->getMock();
|
||||
|
||||
$config = new \Composer\Config();
|
||||
$loader = new ArrayLoader(new VersionParser());
|
||||
$versionGuesser = null;
|
||||
|
||||
// realpath() does not fully expand the paths
|
||||
|
@ -103,7 +99,7 @@ class PathRepositoryTest extends TestCase
|
|||
// PHP Bug https://bugs.php.net/bug.php?id=73797
|
||||
$relativeUrl = ltrim(substr($repositoryUrl, strlen(realpath(realpath(getcwd())))), DIRECTORY_SEPARATOR);
|
||||
|
||||
$repository = new PathRepository(array('url' => $relativeUrl), $ioInterface, $config, $loader);
|
||||
$repository = new PathRepository(array('url' => $relativeUrl), $ioInterface, $config);
|
||||
$packages = $repository->getPackages();
|
||||
|
||||
$this->assertEquals(1, $repository->count());
|
||||
|
|
|
@ -17,7 +17,7 @@ use Composer\Repository\Pear\DependencyConstraint;
|
|||
use Composer\Repository\Pear\DependencyInfo;
|
||||
use Composer\Repository\Pear\PackageInfo;
|
||||
use Composer\Repository\Pear\ReleaseInfo;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Semver\VersionParser;
|
||||
use Composer\Semver\Constraint\Constraint;
|
||||
use Composer\Package\Link;
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
namespace Composer\Test\Repository\Pear;
|
||||
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Test\Mock\RemoteFilesystemMock;
|
||||
|
||||
class ChannelRest10ReaderTest extends TestCase
|
||||
|
@ -31,7 +31,7 @@ class ChannelRest10ReaderTest extends TestCase
|
|||
|
||||
$reader = new \Composer\Repository\Pear\ChannelRest10Reader($rfs);
|
||||
|
||||
/** @var $packages \Composer\Package\PackageInterface[] */
|
||||
/** @var \Composer\Package\PackageInterface[] $packages */
|
||||
$packages = $reader->read('http://test.loc/rest10');
|
||||
|
||||
$this->assertCount(2, $packages);
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
namespace Composer\Test\Repository\Pear;
|
||||
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Test\Mock\RemoteFilesystemMock;
|
||||
|
||||
class ChannelRest11ReaderTest extends TestCase
|
||||
|
@ -27,7 +27,7 @@ class ChannelRest11ReaderTest extends TestCase
|
|||
|
||||
$reader = new \Composer\Repository\Pear\ChannelRest11Reader($rfs);
|
||||
|
||||
/** @var $packages \Composer\Package\PackageInterface[] */
|
||||
/** @var \Composer\Package\PackageInterface[] $packages */
|
||||
$packages = $reader->read('http://test.loc/rest11');
|
||||
|
||||
$this->assertCount(3, $packages);
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Composer\Test\Repository\Pear;
|
|||
|
||||
use Composer\Repository\Pear\DependencyConstraint;
|
||||
use Composer\Repository\Pear\PackageDependencyParser;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class PackageDependencyParserTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test\Repository;
|
||||
|
||||
use Composer\Repository\PearRepository;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test\Repository;
|
||||
|
||||
use Composer\Repository\RepositoryFactory;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
|
||||
class RepositoryFactoryTest extends TestCase
|
||||
{
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Composer\Test\Repository;
|
||||
|
||||
use Composer\Repository\RepositoryManager;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
|
||||
class RepositoryManagerTest extends TestCase
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Composer\Test\Repository\Vcs;
|
|||
|
||||
use Composer\Repository\Vcs\FossilDriver;
|
||||
use Composer\Config;
|
||||
use Composer\TestCase;
|
||||
use Composer\Test\TestCase;
|
||||
use Composer\Util\Filesystem;
|
||||
use Composer\Util\Platform;
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue