diff --git a/composer.json b/composer.json index 3867dd414..3a18fe45b 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "composer/composer", "type": "library", - "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", + "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", "keywords": [ "package", "dependency", diff --git a/composer.lock b/composer.lock index cf37babdc..c678c96ea 100644 --- a/composer.lock +++ b/composer.lock @@ -64,16 +64,16 @@ }, { "name": "composer/semver", - "version": "1.4.2", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573" + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573", - "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573", + "url": "https://api.github.com/repos/composer/semver/zipball/46d9139568ccb8d9e7cdd4539cab7347568a5e2e", + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e", "shasum": "" }, "require": { @@ -122,7 +122,7 @@ "validation", "versioning" ], - "time": "2016-08-30T16:08:34+00:00" + "time": "2019-03-19T17:25:45+00:00" }, { "name": "composer/spdx-licenses", @@ -231,23 +231,23 @@ }, { "name": "justinrainbow/json-schema", - "version": "5.2.7", + "version": "5.2.8", "source": { "type": "git", "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "8560d4314577199ba51bf2032f02cd1315587c23" + "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8560d4314577199ba51bf2032f02cd1315587c23", - "reference": "8560d4314577199ba51bf2032f02cd1315587c23", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.1", + "friendsofphp/php-cs-fixer": "~2.2.20", "json-schema/json-schema-test-suite": "1.2.0", "phpunit/phpunit": "^4.8.35" }, @@ -293,7 +293,7 @@ "json", "schema" ], - "time": "2018-02-14T22:26:30+00:00" + "time": "2019-01-14T23:55:14+00:00" }, { "name": "psr/log", @@ -481,7 +481,7 @@ }, { "name": "symfony/console", - "version": "v2.8.48", + "version": "v2.8.49", "source": { "type": "git", "url": "https://github.com/symfony/console.git", @@ -542,7 +542,7 @@ }, { "name": "symfony/debug", - "version": "v2.8.48", + "version": "v2.8.49", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", @@ -599,7 +599,7 @@ }, { "name": "symfony/filesystem", - "version": "v2.8.48", + "version": "v2.8.49", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", @@ -649,7 +649,7 @@ }, { "name": "symfony/finder", - "version": "v2.8.48", + "version": "v2.8.49", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", @@ -815,7 +815,7 @@ }, { "name": "symfony/process", - "version": "v2.8.48", + "version": "v2.8.49", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -1404,6 +1404,7 @@ "mock", "xunit" ], + "abandoned": true, "time": "2015-10-02T06:51:40+00:00" }, { @@ -1780,7 +1781,7 @@ }, { "name": "symfony/yaml", - "version": "v2.8.48", + "version": "v2.8.49", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", diff --git a/doc/00-intro.md b/doc/00-intro.md index e4af54c2c..ed7a17c7c 100644 --- a/doc/00-intro.md +++ b/doc/00-intro.md @@ -10,7 +10,7 @@ Composer is **not** a package manager in the same sense as Yum or Apt are. Yes, it deals with "packages" or libraries, but it manages them on a per-project basis, installing them in a directory (e.g. `vendor`) inside your project. By default it does not install anything globally. Thus, it is a dependency -manager. It does however support a "global" project for convenience via the +manager. It does however support a "global" project for convenience via the [global](03-cli.md#global) command. This idea is not new and Composer is strongly inspired by node's @@ -47,7 +47,7 @@ Linux and macOS. ### Downloading the Composer Executable Composer offers a convenient installer that you can execute directly from the -commandline. Feel free to [download this file](https://getcomposer.org/installer) +command line. Feel free to [download this file](https://getcomposer.org/installer) or review it on [GitHub](https://github.com/composer/getcomposer.org/blob/master/web/installer) if you wish to know more about the inner workings of the installer. The source is plain PHP. @@ -82,7 +82,7 @@ Now run `php bin/composer` in order to run Composer. #### Globally You can place the Composer PHAR anywhere you wish. If you put it in a directory -that is part of your `PATH`, you can access it globally. On unixy systems you +that is part of your `PATH`, you can access it globally. On Unix systems you can even make it executable and invoke it without directly using the `php` interpreter. diff --git a/src/Composer/Cache.php b/src/Composer/Cache.php index 3f2861797..06c6a0996 100644 --- a/src/Composer/Cache.php +++ b/src/Composer/Cache.php @@ -189,7 +189,8 @@ class Cache public function clear() { if ($this->enabled) { - return $this->filesystem->removeDirectory($this->root); + $this->filesystem->emptyDirectory($this->root); + return true; } return false; diff --git a/src/Composer/Command/ArchiveCommand.php b/src/Composer/Command/ArchiveCommand.php index e26aa59a1..ccda70c62 100644 --- a/src/Composer/Command/ArchiveCommand.php +++ b/src/Composer/Command/ArchiveCommand.php @@ -57,6 +57,7 @@ package in the specified version and writes it to the specified directory. php composer.phar archive [--format=zip] [--dir=/foo] [package [version]] +Read more at https://getcomposer.org/doc/03-cli.md#archive EOT ) ; diff --git a/src/Composer/Command/ClearCacheCommand.php b/src/Composer/Command/ClearCacheCommand.php index 2514f6330..ec51c56d3 100644 --- a/src/Composer/Command/ClearCacheCommand.php +++ b/src/Composer/Command/ClearCacheCommand.php @@ -32,6 +32,8 @@ class ClearCacheCommand extends BaseCommand <<clear-cache deletes all cached packages from composer's cache directory. + +Read more at https://getcomposer.org/doc/03-cli.md#clear-cache-clearcache- EOT ) ; diff --git a/src/Composer/Command/ConfigCommand.php b/src/Composer/Command/ConfigCommand.php index 3970d915d..38b103bb6 100644 --- a/src/Composer/Command/ConfigCommand.php +++ b/src/Composer/Command/ConfigCommand.php @@ -125,6 +125,8 @@ You can always pass more than one option. As an example, if you want to edit the global config.json file. %command.full_name% --editor --global + +Read more at https://getcomposer.org/doc/03-cli.md#config EOT ) ; diff --git a/src/Composer/Command/CreateProjectCommand.php b/src/Composer/Command/CreateProjectCommand.php index c11a0595e..be5ad948d 100644 --- a/src/Composer/Command/CreateProjectCommand.php +++ b/src/Composer/Command/CreateProjectCommand.php @@ -105,6 +105,7 @@ controlled code by appending the '--prefer-source' flag. To install a package from another repository than the default one you can pass the '--repository=https://myrepository.org' flag. +Read more at https://getcomposer.org/doc/03-cli.md#create-project EOT ) ; diff --git a/src/Composer/Command/DependsCommand.php b/src/Composer/Command/DependsCommand.php index acbc89a70..d6adec083 100644 --- a/src/Composer/Command/DependsCommand.php +++ b/src/Composer/Command/DependsCommand.php @@ -37,6 +37,7 @@ Displays detailed information about where a package is referenced. php composer.phar depends composer/composer +Read more at https://getcomposer.org/doc/03-cli.md#depends-why- EOT ) ; diff --git a/src/Composer/Command/DiagnoseCommand.php b/src/Composer/Command/DiagnoseCommand.php index c123e7003..c2123e066 100644 --- a/src/Composer/Command/DiagnoseCommand.php +++ b/src/Composer/Command/DiagnoseCommand.php @@ -55,6 +55,7 @@ The diagnose command checks common errors to help debugging problem The process exit code will be 1 in case of warnings and 2 for errors. +Read more at https://getcomposer.org/doc/03-cli.md#diagnose EOT ) ; diff --git a/src/Composer/Command/DumpAutoloadCommand.php b/src/Composer/Command/DumpAutoloadCommand.php index 55a2c5f16..3add15166 100644 --- a/src/Composer/Command/DumpAutoloadCommand.php +++ b/src/Composer/Command/DumpAutoloadCommand.php @@ -39,6 +39,8 @@ class DumpAutoloadCommand extends BaseCommand ->setHelp( <<php composer.phar dump-autoload + +Read more at https://getcomposer.org/doc/03-cli.md#dump-autoload-dumpautoload- EOT ) ; diff --git a/src/Composer/Command/ExecCommand.php b/src/Composer/Command/ExecCommand.php index f07bc9d28..c9184c707 100644 --- a/src/Composer/Command/ExecCommand.php +++ b/src/Composer/Command/ExecCommand.php @@ -36,6 +36,13 @@ class ExecCommand extends BaseCommand 'Arguments to pass to the binary. Use -- to separate from composer arguments' ), )) + ->setHelp( + <</.config/composer Note: This path may vary depending on customizations to bin-dir in composer.json or the environmental variable COMPOSER_BIN_DIR. +Read more at https://getcomposer.org/doc/03-cli.md#global EOT ) ; diff --git a/src/Composer/Command/HomeCommand.php b/src/Composer/Command/HomeCommand.php index a2f0756a1..b7d907066 100644 --- a/src/Composer/Command/HomeCommand.php +++ b/src/Composer/Command/HomeCommand.php @@ -49,6 +49,8 @@ homepage in your default browser. To open the homepage by default, use -H or --homepage. To show instead of open the repository or homepage URL, use -s or --show. + +Read more at https://getcomposer.org/doc/03-cli.md#browse-home EOT ); } diff --git a/src/Composer/Command/InitCommand.php b/src/Composer/Command/InitCommand.php index c4942c03c..ac4b26ec8 100644 --- a/src/Composer/Command/InitCommand.php +++ b/src/Composer/Command/InitCommand.php @@ -72,6 +72,7 @@ in the current directory. php composer.phar init +Read more at https://getcomposer.org/doc/03-cli.md#init EOT ) ; @@ -694,15 +695,22 @@ EOT { // find the latest version allowed in this repo set $versionSelector = new VersionSelector($this->getRepositorySet($input, $minimumStability)); - $package = $versionSelector->findBestCandidate($name, $requiredVersion, $phpVersion, $preferredStability); + $ignorePlatformReqs = $input->hasOption('ignore-platform-reqs') && $input->getOption('ignore-platform-reqs'); - // retry without phpVersion if platform requirements are ignored in case nothing was found - if ($input->hasOption('ignore-platform-reqs') && $input->getOption('ignore-platform-reqs')) { + // ignore phpVersion if platform requirements are ignored + if ($ignorePlatformReqs) { $phpVersion = null; - $package = $versionSelector->findBestCandidate($name, $requiredVersion, $phpVersion, $preferredStability); } + $package = $versionSelector->findBestCandidate($name, $requiredVersion, $phpVersion, $preferredStability); + if (!$package) { + // platform packages can not be found in the pool in versions other than the local platform's has + // so if platform reqs are ignored we just take the user's word for it + if ($ignorePlatformReqs && preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $name)) { + return array($name, $requiredVersion ?: '*'); + } + // Check whether the PHP version was the problem if ($phpVersion && $versionSelector->findBestCandidate($name, $requiredVersion, null, $preferredStability)) { throw new \InvalidArgumentException(sprintf( diff --git a/src/Composer/Command/InstallCommand.php b/src/Composer/Command/InstallCommand.php index 951d20289..1a2c808db 100644 --- a/src/Composer/Command/InstallCommand.php +++ b/src/Composer/Command/InstallCommand.php @@ -61,6 +61,7 @@ exist it will look for composer.json and do the same. php composer.phar install +Read more at https://getcomposer.org/doc/03-cli.md#install-i EOT ) ; diff --git a/src/Composer/Command/LicensesCommand.php b/src/Composer/Command/LicensesCommand.php index 9dec45e1b..b3c30d63b 100644 --- a/src/Composer/Command/LicensesCommand.php +++ b/src/Composer/Command/LicensesCommand.php @@ -41,6 +41,7 @@ class LicensesCommand extends BaseCommand The license command displays detailed information about the licenses of the installed dependencies. +Read more at https://getcomposer.org/doc/03-cli.md#licenses EOT ) ; diff --git a/src/Composer/Command/OutdatedCommand.php b/src/Composer/Command/OutdatedCommand.php index 79409c58f..ae26a7487 100644 --- a/src/Composer/Command/OutdatedCommand.php +++ b/src/Composer/Command/OutdatedCommand.php @@ -50,7 +50,7 @@ The color coding (or signage if you have ANSI colors disabled) for dependency ve may involve work. - red (!): Dependency has a new version that is semver-compatible and you should upgrade it. - +Read more at https://getcomposer.org/doc/03-cli.md#outdated EOT ) ; diff --git a/src/Composer/Command/ProhibitsCommand.php b/src/Composer/Command/ProhibitsCommand.php index edf6729ab..9e5575c74 100644 --- a/src/Composer/Command/ProhibitsCommand.php +++ b/src/Composer/Command/ProhibitsCommand.php @@ -37,6 +37,7 @@ Displays detailed information about why a package cannot be installed. php composer.phar prohibits composer/composer +Read more at https://getcomposer.org/doc/03-cli.md#prohibits-why-not- EOT ) ; diff --git a/src/Composer/Command/RemoveCommand.php b/src/Composer/Command/RemoveCommand.php index ea412ec66..f5562e01e 100644 --- a/src/Composer/Command/RemoveCommand.php +++ b/src/Composer/Command/RemoveCommand.php @@ -56,6 +56,7 @@ list of installed packages php composer.phar remove +Read more at https://getcomposer.org/doc/03-cli.md#remove EOT ) ; diff --git a/src/Composer/Command/RequireCommand.php b/src/Composer/Command/RequireCommand.php index a28007a6b..c34e7f4f9 100644 --- a/src/Composer/Command/RequireCommand.php +++ b/src/Composer/Command/RequireCommand.php @@ -73,6 +73,7 @@ If you do not specify a version constraint, composer will choose a suitable one If you do not want to install the new dependencies immediately you can call it with --no-update +Read more at https://getcomposer.org/doc/03-cli.md#require EOT ) ; diff --git a/src/Composer/Command/RunScriptCommand.php b/src/Composer/Command/RunScriptCommand.php index 7997dfb37..a110cc3d6 100644 --- a/src/Composer/Command/RunScriptCommand.php +++ b/src/Composer/Command/RunScriptCommand.php @@ -63,6 +63,8 @@ class RunScriptCommand extends BaseCommand The run-script command runs scripts defined in composer.json: php composer.phar run-script post-update-cmd + +Read more at https://getcomposer.org/doc/03-cli.md#run-script EOT ) ; diff --git a/src/Composer/Command/ScriptAliasCommand.php b/src/Composer/Command/ScriptAliasCommand.php index 1aba0b074..455f7420c 100644 --- a/src/Composer/Command/ScriptAliasCommand.php +++ b/src/Composer/Command/ScriptAliasCommand.php @@ -48,6 +48,8 @@ class ScriptAliasCommand extends BaseCommand The run-script command runs scripts defined in composer.json: php composer.phar run-script post-update-cmd + +Read more at https://getcomposer.org/doc/03-cli.md#run-script EOT ) ; diff --git a/src/Composer/Command/SearchCommand.php b/src/Composer/Command/SearchCommand.php index ed180e84c..54aa4dcea 100644 --- a/src/Composer/Command/SearchCommand.php +++ b/src/Composer/Command/SearchCommand.php @@ -49,6 +49,7 @@ class SearchCommand extends BaseCommand The search command searches for packages by its name php composer.phar search symfony composer +Read more at https://getcomposer.org/doc/03-cli.md#search EOT ) ; diff --git a/src/Composer/Command/SelfUpdateCommand.php b/src/Composer/Command/SelfUpdateCommand.php index 903b49d94..0e85f0ce3 100644 --- a/src/Composer/Command/SelfUpdateCommand.php +++ b/src/Composer/Command/SelfUpdateCommand.php @@ -60,6 +60,7 @@ versions of composer and if found, installs the latest. php composer.phar self-update +Read more at https://getcomposer.org/doc/03-cli.md#self-update-selfupdate- EOT ) ; diff --git a/src/Composer/Command/ShowCommand.php b/src/Composer/Command/ShowCommand.php index a5a2cd780..91ee27143 100644 --- a/src/Composer/Command/ShowCommand.php +++ b/src/Composer/Command/ShowCommand.php @@ -85,6 +85,7 @@ class ShowCommand extends BaseCommand The show command displays detailed information about a package, or lists all packages available. +Read more at https://getcomposer.org/doc/03-cli.md#show EOT ) ; diff --git a/src/Composer/Command/StatusCommand.php b/src/Composer/Command/StatusCommand.php index 06fc7638b..06fb2ab05 100644 --- a/src/Composer/Command/StatusCommand.php +++ b/src/Composer/Command/StatusCommand.php @@ -52,6 +52,7 @@ class StatusCommand extends BaseCommand The status command displays a list of dependencies that have been modified locally. +Read more at https://getcomposer.org/doc/03-cli.md#status EOT ) ; diff --git a/src/Composer/Command/SuggestsCommand.php b/src/Composer/Command/SuggestsCommand.php index 1c1f23f93..411feb202 100644 --- a/src/Composer/Command/SuggestsCommand.php +++ b/src/Composer/Command/SuggestsCommand.php @@ -38,6 +38,7 @@ The %command.name% command shows a sorted list of suggested package Enabling -v implies --by-package --by-suggestion, showing both lists. +Read more at https://getcomposer.org/doc/03-cli.md#suggests EOT ) ; diff --git a/src/Composer/Command/UpdateCommand.php b/src/Composer/Command/UpdateCommand.php index 06f998d63..99bd2d74b 100644 --- a/src/Composer/Command/UpdateCommand.php +++ b/src/Composer/Command/UpdateCommand.php @@ -81,6 +81,7 @@ from a specific vendor: To select packages names interactively with auto-completion use -i. +Read more at https://getcomposer.org/doc/03-cli.md#update-u EOT ) ; diff --git a/src/Composer/Command/ValidateCommand.php b/src/Composer/Command/ValidateCommand.php index 52023e528..5aba74adf 100644 --- a/src/Composer/Command/ValidateCommand.php +++ b/src/Composer/Command/ValidateCommand.php @@ -55,6 +55,7 @@ Exit codes in case of errors are: 2 validation error(s) 3 file unreadable or missing +Read more at https://getcomposer.org/doc/03-cli.md#validate EOT ); } diff --git a/src/Composer/DependencyResolver/Problem.php b/src/Composer/DependencyResolver/Problem.php index 98b07405a..7591f2bd5 100644 --- a/src/Composer/DependencyResolver/Problem.php +++ b/src/Composer/DependencyResolver/Problem.php @@ -79,7 +79,6 @@ class Problem reset($reasons); $reason = current($reasons); - $rule = $reason['rule']; $job = $reason['job']; if (isset($job['constraint'])) { diff --git a/src/Composer/Repository/VcsRepository.php b/src/Composer/Repository/VcsRepository.php index d8e4b1501..cebbd2a5b 100644 --- a/src/Composer/Repository/VcsRepository.php +++ b/src/Composer/Repository/VcsRepository.php @@ -47,6 +47,7 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt private $driver; /** @var VersionCacheInterface */ private $versionCache; + private $emptyReferences = array(); public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloader $httpDownloader, EventDispatcher $dispatcher = null, array $drivers = null, VersionCacheInterface $versionCache = null) { @@ -123,6 +124,11 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt return $this->branchErrorOccurred; } + public function getEmptyReferences() + { + return $this->emptyReferences; + } + protected function initialize() { parent::initialize(); @@ -165,6 +171,10 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt if ($cachedPackage) { $this->addPackage($cachedPackage); + continue; + } elseif ($cachedPackage === false) { + $this->emptyReferences[] = $identifier; + continue; } @@ -180,6 +190,7 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt if ($verbose) { $this->io->writeError('Skipped tag '.$tag.', no composer file'); } + $this->emptyReferences[] = $identifier; continue; } @@ -218,6 +229,9 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt $this->addPackage($this->loader->load($this->preProcess($driver, $data, $identifier))); } catch (\Exception $e) { + if ($e instanceof TransportException && $e->getCode() === 404) { + $this->emptyReferences[] = $identifier; + } if ($verbose) { $this->io->writeError('Skipped tag '.$tag.', '.($e instanceof TransportException ? 'no composer file was found' : $e->getMessage()).''); } @@ -264,6 +278,10 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt if ($cachedPackage) { $this->addPackage($cachedPackage); + continue; + } elseif ($cachedPackage === false) { + $this->emptyReferences[] = $identifier; + continue; } @@ -272,6 +290,7 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt if ($verbose) { $this->io->writeError('Skipped branch '.$branch.', no composer file'); } + $this->emptyReferences[] = $identifier; continue; } @@ -290,6 +309,9 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt } $this->addPackage($package); } catch (TransportException $e) { + if ($e->getCode() === 404) { + $this->emptyReferences[] = $identifier; + } if ($verbose) { $this->io->writeError('Skipped branch '.$branch.', no composer file was found'); } @@ -358,6 +380,14 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt } $cachedPackage = $this->versionCache->getVersionPackage($version, $identifier); + if ($cachedPackage === false) { + if ($verbose) { + $this->io->writeError('Skipped '.$version.', no composer file (cached from ref '.$identifier.')'); + } + + return false; + } + if ($cachedPackage) { $msg = 'Found cached composer.json of ' . ($this->packageName ?: $this->url) . ' (' . $version . ')'; if ($verbose) { diff --git a/src/Composer/Repository/VersionCacheInterface.php b/src/Composer/Repository/VersionCacheInterface.php index db5934b59..41d485c64 100644 --- a/src/Composer/Repository/VersionCacheInterface.php +++ b/src/Composer/Repository/VersionCacheInterface.php @@ -17,7 +17,7 @@ interface VersionCacheInterface /** * @param string $version * @param string $identifier - * @return array Package version data + * @return array|null|false Package version data if found, false to indicate the identifier is known but has no package, null for an unknown identifier */ public function getVersionPackage($version, $identifier); } diff --git a/src/Composer/Util/Filesystem.php b/src/Composer/Util/Filesystem.php index 2d73016c6..6118df938 100644 --- a/src/Composer/Util/Filesystem.php +++ b/src/Composer/Util/Filesystem.php @@ -442,7 +442,7 @@ class Filesystem */ public function isAbsolutePath($path) { - return substr($path, 0, 1) === '/' || substr($path, 1, 1) === ':'; + return substr($path, 0, 1) === '/' || substr($path, 1, 1) === ':' || substr($path, 0, 2) === '\\\\'; } /**