Merge branch '1.5'

main
Jordi Boggiano 7 years ago
commit 0b3bc4ccb9

@ -374,6 +374,9 @@ EOT
$requirement['version'], $requirement['version'],
$requirement['name'] $requirement['name']
)); ));
} else {
// check that the specified version/constraint exists before we proceed
$this->findBestVersionForPackage($input, $requirement['name'], $phpVersion, $preferredStability, $requirement['version']);
} }
$result[] = $requirement['name'] . ' ' . $requirement['version']; $result[] = $requirement['name'] . ' ' . $requirement['version'];
@ -631,13 +634,18 @@ EOT
* @throws \InvalidArgumentException * @throws \InvalidArgumentException
* @return string * @return string
*/ */
private function findBestVersionForPackage(InputInterface $input, $name, $phpVersion, $preferredStability = 'stable') private function findBestVersionForPackage(InputInterface $input, $name, $phpVersion, $preferredStability = 'stable', $requiredVersion = null)
{ {
// find the latest version allowed in this pool // find the latest version allowed in this pool
$versionSelector = new VersionSelector($this->getPool($input)); $versionSelector = new VersionSelector($this->getPool($input));
$package = $versionSelector->findBestCandidate($name, null, $phpVersion, $preferredStability); $package = $versionSelector->findBestCandidate($name, $requiredVersion, $phpVersion, $preferredStability);
if (!$package) { if (!$package) {
if ($requiredVersion && $versionSelector->findBestCandidate($name, null, $phpVersion, $preferredStability)) {
throw new \InvalidArgumentException(sprintf(
'Could not find package %s in a version matching %s', $name, $requiredVersion
));
}
// Check whether the PHP version was the problem // Check whether the PHP version was the problem
if ($phpVersion && $versionSelector->findBestCandidate($name)) { if ($phpVersion && $versionSelector->findBestCandidate($name)) {
throw new \InvalidArgumentException(sprintf( throw new \InvalidArgumentException(sprintf(
@ -655,7 +663,7 @@ EOT
} }
throw new \InvalidArgumentException(sprintf( throw new \InvalidArgumentException(sprintf(
'Could not find package %s at any version for your minimum-stability (%s). Check the package spelling or your minimum-stability', 'Could not find a matching version of package %s. Check the package spelling, your version constraint and that the package is available in a stability which matches your minimum-stability (%s).',
$name, $name,
$this->getMinimumStability($input) $this->getMinimumStability($input)
)); ));

@ -136,19 +136,11 @@ EOT
->setRunScripts(!$input->getOption('no-scripts')) ->setRunScripts(!$input->getOption('no-scripts'))
; ;
$exception = null; $status = $install->run();
try {
$status = $install->run();
} catch (\Exception $exception) {
$status = 1;
}
if ($status !== 0) { if ($status !== 0) {
$io->writeError("\n".'<error>Removal failed, reverting '.$file.' to its original content.</error>'); $io->writeError("\n".'<error>Removal failed, reverting '.$file.' to its original content.</error>');
file_put_contents($jsonFile->getPath(), $composerBackup); file_put_contents($jsonFile->getPath(), $composerBackup);
} }
if ($exception) {
throw $exception;
}
return $status; return $status;
} }

@ -177,12 +177,7 @@ EOT
->setPreferLowest($input->getOption('prefer-lowest')) ->setPreferLowest($input->getOption('prefer-lowest'))
; ;
$exception = null; $status = $install->run();
try {
$status = $install->run();
} catch (\Exception $exception) {
$status = 1;
}
if ($status !== 0) { if ($status !== 0) {
if ($newlyCreated) { if ($newlyCreated) {
$io->writeError("\n".'<error>Installation failed, deleting '.$file.'.</error>'); $io->writeError("\n".'<error>Installation failed, deleting '.$file.'.</error>');
@ -192,9 +187,6 @@ EOT
file_put_contents($json->getPath(), $composerBackup); file_put_contents($json->getPath(), $composerBackup);
} }
} }
if ($exception) {
throw $exception;
}
return $status; return $status;
} }

@ -43,7 +43,7 @@ class SolverProblemsException extends \RuntimeException
} }
if (strpos($text, 'could not be found') || strpos($text, 'no matching package found')) { if (strpos($text, 'could not be found') || strpos($text, 'no matching package found')) {
$text .= "\nPotential causes:\n - A typo in the package name\n - The package is not available in a stable-enough version according to your minimum-stability setting\n see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.\n\nRead <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems."; $text .= "\nPotential causes:\n - A typo in the package name\n - The package is not available in a stable-enough version according to your minimum-stability setting\n see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.\n - It's a private package and you forgot to add a custom repository to find it\n\nRead <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.";
} }
if ($hasExtensionProblems) { if ($hasExtensionProblems) {

@ -195,6 +195,9 @@ class Installer
} }
if ($this->runScripts) { if ($this->runScripts) {
$devMode = (int) $this->devMode;
putenv("COMPOSER_DEV_MODE=$devMode");
// dispatch pre event // dispatch pre event
$eventName = $this->update ? ScriptEvents::PRE_UPDATE_CMD : ScriptEvents::PRE_INSTALL_CMD; $eventName = $this->update ? ScriptEvents::PRE_UPDATE_CMD : ScriptEvents::PRE_INSTALL_CMD;
$this->eventDispatcher->dispatchScript($eventName, $this->devMode); $this->eventDispatcher->dispatchScript($eventName, $this->devMode);
@ -299,15 +302,6 @@ class Installer
$this->autoloadGenerator->dump($this->config, $localRepo, $this->package, $this->installationManager, 'composer', $this->optimizeAutoloader); $this->autoloadGenerator->dump($this->config, $localRepo, $this->package, $this->installationManager, 'composer', $this->optimizeAutoloader);
} }
if ($this->runScripts) {
$devMode = (int) $this->devMode;
putenv("COMPOSER_DEV_MODE=$devMode");
// dispatch post event
$eventName = $this->update ? ScriptEvents::POST_UPDATE_CMD : ScriptEvents::POST_INSTALL_CMD;
$this->eventDispatcher->dispatchScript($eventName, $this->devMode);
}
if ($this->executeOperations) { if ($this->executeOperations) {
// force binaries re-generation in case they are missing // force binaries re-generation in case they are missing
foreach ($localRepo->getPackages() as $package) { foreach ($localRepo->getPackages() as $package) {
@ -322,6 +316,12 @@ class Installer
} }
} }
if ($this->runScripts) {
// dispatch post event
$eventName = $this->update ? ScriptEvents::POST_UPDATE_CMD : ScriptEvents::POST_INSTALL_CMD;
$this->eventDispatcher->dispatchScript($eventName, $this->devMode);
}
// re-enable GC except on HHVM which triggers a warning here // re-enable GC except on HHVM which triggers a warning here
if (!defined('HHVM_VERSION')) { if (!defined('HHVM_VERSION')) {
gc_enable(); gc_enable();

@ -33,7 +33,9 @@ class IniHelper
*/ */
public static function getAll() public static function getAll()
{ {
if ($env = strval(getenv(self::ENV_ORIGINAL))) { $env = getenv(self::ENV_ORIGINAL);
if (false !== $env) {
return explode(PATH_SEPARATOR, $env); return explode(PATH_SEPARATOR, $env);
} }
@ -47,7 +49,7 @@ class IniHelper
} }
/** /**
* Describes the location of the loaded php.ini file * Describes the location of the loaded php.ini file(s)
* *
* @return string * @return string
*/ */
@ -56,9 +58,19 @@ class IniHelper
$paths = self::getAll(); $paths = self::getAll();
if (empty($paths[0])) { if (empty($paths[0])) {
array_shift($paths);
}
$ini = array_shift($paths);
if (empty($ini)) {
return 'A php.ini file does not exist. You will have to create one.'; return 'A php.ini file does not exist. You will have to create one.';
} }
return 'The php.ini used by your command-line PHP is: '.$paths[0]; if (!empty($paths)) {
return 'Your command-line PHP is using multiple ini files. Run `php --ini` to show them.';
}
return 'The php.ini used by your command-line PHP is: '.$ini;
} }
} }

@ -224,7 +224,7 @@ class RemoteFilesystem
$this->redirects = 1; // The first request counts. $this->redirects = 1; // The first request counts.
// capture username/password from URL if there is one // capture username/password from URL if there is one
if (preg_match('{^https?://(.+):(.+)@([^/]+)}i', $fileUrl, $match)) { if (preg_match('{^https?://([^:/]+):([^@/]+)@([^/]+)}i', $fileUrl, $match)) {
$this->io->setAuthentication($originUrl, urldecode($match[1]), urldecode($match[2])); $this->io->setAuthentication($originUrl, urldecode($match[1]), urldecode($match[2]));
} }

@ -710,7 +710,8 @@ class SolverTest extends TestCase
$msg .= "Potential causes:\n"; $msg .= "Potential causes:\n";
$msg .= " - A typo in the package name\n"; $msg .= " - A typo in the package name\n";
$msg .= " - The package is not available in a stable-enough version according to your minimum-stability setting\n"; $msg .= " - The package is not available in a stable-enough version according to your minimum-stability setting\n";
$msg .= " see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.\n\n"; $msg .= " see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.\n";
$msg .= " - It's a private package and you forgot to add a custom repository to find it\n\n";
$msg .= "Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems."; $msg .= "Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.";
$this->assertEquals($msg, $e->getMessage()); $this->assertEquals($msg, $e->getMessage());
} }

@ -34,6 +34,7 @@ Potential causes:
- A typo in the package name - A typo in the package name
- The package is not available in a stable-enough version according to your minimum-stability setting - The package is not available in a stable-enough version according to your minimum-stability setting
see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details. see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.
- It's a private package and you forgot to add a custom repository to find it
Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems. Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.

@ -55,6 +55,7 @@ Potential causes:
- A typo in the package name - A typo in the package name
- The package is not available in a stable-enough version according to your minimum-stability setting - The package is not available in a stable-enough version according to your minimum-stability setting
see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details. see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.
- It's a private package and you forgot to add a custom repository to find it
Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems. Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.

@ -21,7 +21,18 @@ class IniHelperTest extends \PHPUnit_Framework_TestCase
{ {
public static $envOriginal; public static $envOriginal;
public function testWithLoadedIni() public function testWithNoIni()
{
$paths = array(
'',
);
$this->setEnv($paths);
$this->assertContains('does not exist', IniHelper::getMessage());
$this->assertEquals($paths, IniHelper::getAll());
}
public function testWithLoadedIniOnly()
{ {
$paths = array( $paths = array(
'loaded.ini', 'loaded.ini',
@ -32,7 +43,20 @@ class IniHelperTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($paths, IniHelper::getAll()); $this->assertEquals($paths, IniHelper::getAll());
} }
public function testWithoutLoadedIni() public function testWithLoadedIniAndAdditional()
{
$paths = array(
'loaded.ini',
'one.ini',
'two.ini',
);
$this->setEnv($paths);
$this->assertContains('multiple ini files', IniHelper::getMessage());
$this->assertEquals($paths, IniHelper::getAll());
}
public function testWithoutLoadedIniAndAdditional()
{ {
$paths = array( $paths = array(
'', '',
@ -41,7 +65,7 @@ class IniHelperTest extends \PHPUnit_Framework_TestCase
); );
$this->setEnv($paths); $this->setEnv($paths);
$this->assertContains('does not exist', IniHelper::getMessage()); $this->assertContains('multiple ini files', IniHelper::getMessage());
$this->assertEquals($paths, IniHelper::getAll()); $this->assertEquals($paths, IniHelper::getAll());
} }

Loading…
Cancel
Save