diff --git a/bin/composer b/bin/composer
index ed4979f7b..823f87a4b 100755
--- a/bin/composer
+++ b/bin/composer
@@ -41,9 +41,9 @@ if (function_exists('ini_set')) {
};
$memoryLimit = trim(ini_get('memory_limit'));
- // Increase memory_limit if it is lower than 1GB
- if ($memoryLimit != -1 && $memoryInBytes($memoryLimit) < 1024 * 1024 * 1024) {
- @ini_set('memory_limit', '1G');
+ // Increase memory_limit if it is lower than 1.5GB
+ if ($memoryLimit != -1 && $memoryInBytes($memoryLimit) < 1024 * 1024 * 1536) {
+ @ini_set('memory_limit', '1536M');
}
unset($memoryInBytes, $memoryLimit);
}
diff --git a/composer.lock b/composer.lock
index 331413f0c..78883b4d7 100644
--- a/composer.lock
+++ b/composer.lock
@@ -189,16 +189,16 @@
},
{
"name": "justinrainbow/json-schema",
- "version": "4.0.1",
+ "version": "4.1.0",
"source": {
"type": "git",
"url": "https://github.com/justinrainbow/json-schema.git",
- "reference": "10d1f6977f6be5f177dded8f585a11debdc27591"
+ "reference": "d39c56a46b3ebe1f3696479966cd2b9f50aaa24f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/10d1f6977f6be5f177dded8f585a11debdc27591",
- "reference": "10d1f6977f6be5f177dded8f585a11debdc27591",
+ "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/d39c56a46b3ebe1f3696479966cd2b9f50aaa24f",
+ "reference": "d39c56a46b3ebe1f3696479966cd2b9f50aaa24f",
"shasum": ""
},
"require": {
@@ -251,7 +251,7 @@
"json",
"schema"
],
- "time": "2016-11-09T16:32:33+00:00"
+ "time": "2016-12-22T16:43:46+00:00"
},
{
"name": "psr/log",
@@ -440,16 +440,16 @@
},
{
"name": "symfony/console",
- "version": "v2.8.14",
+ "version": "v2.8.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "a871ba00e0f604dceac64c56c27f99fbeaf4854e"
+ "reference": "d5643cd095e5e37d31e004bb2606b5dd7e96602f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/a871ba00e0f604dceac64c56c27f99fbeaf4854e",
- "reference": "a871ba00e0f604dceac64c56c27f99fbeaf4854e",
+ "url": "https://api.github.com/repos/symfony/console/zipball/d5643cd095e5e37d31e004bb2606b5dd7e96602f",
+ "reference": "d5643cd095e5e37d31e004bb2606b5dd7e96602f",
"shasum": ""
},
"require": {
@@ -497,11 +497,11 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2016-11-15T23:02:12+00:00"
+ "time": "2016-12-06T11:59:35+00:00"
},
{
"name": "symfony/debug",
- "version": "v2.8.14",
+ "version": "v2.8.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
@@ -558,7 +558,7 @@
},
{
"name": "symfony/filesystem",
- "version": "v2.8.14",
+ "version": "v2.8.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
@@ -607,16 +607,16 @@
},
{
"name": "symfony/finder",
- "version": "v2.8.14",
+ "version": "v2.8.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "0023b024363dfc0cd21262e556f25a291fe8d7fd"
+ "reference": "c0f10576335743b881ac1ed39d18c0fa66048775"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/0023b024363dfc0cd21262e556f25a291fe8d7fd",
- "reference": "0023b024363dfc0cd21262e556f25a291fe8d7fd",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/c0f10576335743b881ac1ed39d18c0fa66048775",
+ "reference": "c0f10576335743b881ac1ed39d18c0fa66048775",
"shasum": ""
},
"require": {
@@ -652,7 +652,7 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
- "time": "2016-11-03T07:52:58+00:00"
+ "time": "2016-12-13T09:38:12+00:00"
},
{
"name": "symfony/polyfill-mbstring",
@@ -715,16 +715,16 @@
},
{
"name": "symfony/process",
- "version": "v2.8.14",
+ "version": "v2.8.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f"
+ "reference": "1a1bd056395540d0bc549d39818316513565d278"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f",
- "reference": "024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f",
+ "url": "https://api.github.com/repos/symfony/process/zipball/1a1bd056395540d0bc549d39818316513565d278",
+ "reference": "1a1bd056395540d0bc549d39818316513565d278",
"shasum": ""
},
"require": {
@@ -760,7 +760,7 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
- "time": "2016-09-29T14:03:54+00:00"
+ "time": "2016-11-24T00:43:03+00:00"
}
],
"packages-dev": [
@@ -1175,16 +1175,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "4.8.30",
+ "version": "4.8.31",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "a534e04d0bd39c557c2881c341efd06fa6f1292a"
+ "reference": "98b2b39a520766bec663ff5b7ff1b729db9dbfe3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a534e04d0bd39c557c2881c341efd06fa6f1292a",
- "reference": "a534e04d0bd39c557c2881c341efd06fa6f1292a",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/98b2b39a520766bec663ff5b7ff1b729db9dbfe3",
+ "reference": "98b2b39a520766bec663ff5b7ff1b729db9dbfe3",
"shasum": ""
},
"require": {
@@ -1243,7 +1243,7 @@
"testing",
"xunit"
],
- "time": "2016-12-01T17:05:48+00:00"
+ "time": "2016-12-09T02:45:31+00:00"
},
{
"name": "phpunit/phpunit-mock-objects",
@@ -1675,7 +1675,7 @@
},
{
"name": "symfony/yaml",
- "version": "v2.8.14",
+ "version": "v2.8.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
diff --git a/src/Composer/Repository/RepositoryFactory.php b/src/Composer/Repository/RepositoryFactory.php
index d2f64edf8..0ab7ed15c 100644
--- a/src/Composer/Repository/RepositoryFactory.php
+++ b/src/Composer/Repository/RepositoryFactory.php
@@ -121,7 +121,7 @@ class RepositoryFactory
$rm->setRepositoryClass('git', 'Composer\Repository\VcsRepository');
$rm->setRepositoryClass('gitlab', 'Composer\Repository\VcsRepository');
$rm->setRepositoryClass('svn', 'Composer\Repository\VcsRepository');
- $rm->setRepositoryClass('fossil', 'Composer\Repository\FossilRepository');
+ $rm->setRepositoryClass('fossil', 'Composer\Repository\VcsRepository');
$rm->setRepositoryClass('perforce', 'Composer\Repository\VcsRepository');
$rm->setRepositoryClass('hg', 'Composer\Repository\VcsRepository');
$rm->setRepositoryClass('artifact', 'Composer\Repository\ArtifactRepository');
diff --git a/src/Composer/Util/Git.php b/src/Composer/Util/Git.php
index 8edbbec37..c7e892244 100644
--- a/src/Composer/Util/Git.php
+++ b/src/Composer/Util/Git.php
@@ -50,7 +50,7 @@ class Git
}
if (preg_match('{^ssh://[^@]+@[^:]+:[^0-9]+}', $url)) {
- throw new \InvalidArgumentException('The source URL '.$url.' is invalid, ssh URLs should have a port number after ":".'."\n".'Use ssh://git@example.com:22/path or just git@example.com:path if you do not want to provide a password or custom port.');
+ throw new \InvalidArgumentException('The source URL ' . $url . ' is invalid, ssh URLs should have a port number after ":".' . "\n" . 'Use ssh://git@example.com:22/path or just git@example.com:path if you do not want to provide a password or custom port.');
}
if (!$initialClone) {
@@ -63,16 +63,16 @@ class Git
$protocols = $this->config->get('github-protocols');
if (!is_array($protocols)) {
- throw new \RuntimeException('Config value "github-protocols" must be an array, got '.gettype($protocols));
+ throw new \RuntimeException('Config value "github-protocols" must be an array, got ' . gettype($protocols));
}
// public github, autoswitch protocols
- if (preg_match('{^(?:https?|git)://'.self::getGitHubDomainsRegex($this->config).'/(.*)}', $url, $match)) {
+ if (preg_match('{^(?:https?|git)://' . self::getGitHubDomainsRegex($this->config) . '/(.*)}', $url, $match)) {
$messages = array();
foreach ($protocols as $protocol) {
if ('ssh' === $protocol) {
$protoUrl = "git@" . $match[1] . ":" . $match[2];
} else {
- $protoUrl = $protocol ."://" . $match[1] . "/" . $match[2];
+ $protoUrl = $protocol . "://" . $match[1] . "/" . $match[2];
}
if (0 === $this->process->execute(call_user_func($commandCallable, $protoUrl), $ignoredOutput, $cwd)) {
@@ -85,18 +85,18 @@ class Git
}
// failed to checkout, first check git accessibility
- $this->throwException('Failed to clone ' . $url .' via '.implode(', ', $protocols).' protocols, aborting.' . "\n\n" . implode("\n", $messages), $url);
+ $this->throwException('Failed to clone ' . $url . ' via ' . implode(', ', $protocols) . ' protocols, aborting.' . "\n\n" . implode("\n", $messages), $url);
}
// if we have a private github url and the ssh protocol is disabled then we skip it and directly fallback to https
- $bypassSshForGitHub = preg_match('{^git@'.self::getGitHubDomainsRegex($this->config).':(.+?)\.git$}i', $url) && !in_array('ssh', $protocols, true);
+ $bypassSshForGitHub = preg_match('{^git@' . self::getGitHubDomainsRegex($this->config) . ':(.+?)\.git$}i', $url) && !in_array('ssh', $protocols, true);
$command = call_user_func($commandCallable, $url);
$auth = null;
if ($bypassSshForGitHub || 0 !== $this->process->execute($command, $ignoredOutput, $cwd)) {
// private github repository without git access, try https with auth
- if (preg_match('{^git@'.self::getGitHubDomainsRegex($this->config).':(.+?)\.git$}i', $url, $match)) {
+ if (preg_match('{^git@' . self::getGitHubDomainsRegex($this->config) . ':(.+?)\.git$}i', $url, $match)) {
if (!$this->io->hasAuthentication($match[1])) {
$gitHubUtil = new GitHub($this->io, $this->config, $this->process);
$message = 'Cloning failed using an ssh key for authentication, enter your GitHub credentials to access private repos';
@@ -131,7 +131,7 @@ class Git
//We already have an access_token from a previous request.
if ($auth['username'] !== 'x-token-auth') {
$token = $bitbucketUtil->requestToken($match[1], $auth['username'], $auth['password']);
- if (! empty($token)) {
+ if (!empty($token)) {
$this->io->setAuthentication($match[1], 'x-token-auth', $token['access_token']);
}
}
@@ -165,22 +165,22 @@ class Git
$defaultUsername = null;
if (isset($authParts) && $authParts) {
if (false !== strpos($authParts, ':')) {
- list($defaultUsername, ) = explode(':', $authParts, 2);
+ list($defaultUsername,) = explode(':', $authParts, 2);
} else {
$defaultUsername = $authParts;
}
}
- $this->io->writeError(' Authentication required ('.parse_url($url, PHP_URL_HOST).'):');
+ $this->io->writeError(' Authentication required (' . parse_url($url, PHP_URL_HOST) . '):');
$auth = array(
- 'username' => $this->io->ask(' Username: ', $defaultUsername),
- 'password' => $this->io->askAndHideAnswer(' Password: '),
+ 'username' => $this->io->ask(' Username: ', $defaultUsername),
+ 'password' => $this->io->askAndHideAnswer(' Password: '),
);
$storeAuth = $this->config->get('store-auths');
}
if ($auth) {
- $authUrl = $match[1].rawurlencode($auth['username']).':'.rawurlencode($auth['password']).'@'.$match[2].$match[3];
+ $authUrl = $match[1] . rawurlencode($auth['username']) . ':' . rawurlencode($auth['password']) . '@' . $match[2] . $match[3];
$command = call_user_func($commandCallable, $authUrl);
if (0 === $this->process->execute($command, $ignoredOutput, $cwd)) {
@@ -237,7 +237,8 @@ class Git
$authFailures = array(
'fatal: Authentication failed',
'remote error: Invalid username or password.',
- 'error: 401 Unauthorized'
+ 'error: 401 Unauthorized',
+ 'fatal: unable to access'
);
foreach ($authFailures as $authFailure) {
@@ -283,7 +284,7 @@ class Git
public static function getGitHubDomainsRegex(Config $config)
{
- return '('.implode('|', array_map('preg_quote', $config->get('github-domains'))).')';
+ return '(' . implode('|', array_map('preg_quote', $config->get('github-domains'))) . ')';
}
public static function sanitizeUrl($message)
@@ -293,7 +294,7 @@ class Git
return '://***:***@';
}
- return '://'.$m[1].':***@';
+ return '://' . $m[1] . ':***@';
}, $message);
}
@@ -303,7 +304,7 @@ class Git
clearstatcache();
if (0 !== $this->process->execute('git --version', $ignoredOutput)) {
- throw new \RuntimeException(self::sanitizeUrl('Failed to clone '.$url.', git was not found, check that it is installed and in your PATH env.' . "\n\n" . $this->process->getErrorOutput()));
+ throw new \RuntimeException(self::sanitizeUrl('Failed to clone ' . $url . ', git was not found, check that it is installed and in your PATH env.' . "\n\n" . $this->process->getErrorOutput()));
}
throw new \RuntimeException(self::sanitizeUrl($message));
diff --git a/src/Composer/Util/IniHelper.php b/src/Composer/Util/IniHelper.php
index f4eaa26f0..0dc0529a5 100644
--- a/src/Composer/Util/IniHelper.php
+++ b/src/Composer/Util/IniHelper.php
@@ -28,7 +28,7 @@ class IniHelper
*
* The equivalent of calling php_ini_loaded_file then php_ini_scanned_files.
* The loaded ini location is the first entry and may be empty.
-
+ *
* @return array
*/
public static function getAll()
diff --git a/src/Composer/XdebugHandler.php b/src/Composer/XdebugHandler.php
index be04dec55..a55d37368 100644
--- a/src/Composer/XdebugHandler.php
+++ b/src/Composer/XdebugHandler.php
@@ -136,9 +136,13 @@ class XdebugHandler
{
$this->tmpIni = '';
$iniPaths = IniHelper::getAll();
- $files = $this->getWorkingSet($iniPaths, $replace);
- if ($this->writeTmpIni($files, $replace)) {
+ if (empty($iniPaths[0])) {
+ // There is no loaded ini
+ array_shift($iniPaths);
+ }
+
+ if ($this->writeTmpIni($iniPaths)) {
return $this->setEnvironment($iniPaths);
}
@@ -151,24 +155,21 @@ class XdebugHandler
* The filename is passed as the -c option when the process restarts.
*
* @param array $iniFiles The php.ini locations
- * @param bool $replace Whether the files need modifying
*
* @return bool
*/
- private function writeTmpIni(array $iniFiles, $replace)
+ private function writeTmpIni(array $iniFiles)
{
- if (empty($iniFiles)) {
- // Unlikely, maybe xdebug was loaded through a command line option.
- return true;
- }
-
if (!$this->tmpIni = tempnam(sys_get_temp_dir(), '')) {
return false;
}
$content = '';
+ $regex = '/^\s*(zend_extension\s*=.*xdebug.*)$/mi';
+
foreach ($iniFiles as $file) {
- $content .= $this->getIniData($file, $replace);
+ $data = preg_replace($regex, ';$1', file_get_contents($file));
+ $content .= $data.PHP_EOL;
}
$content .= PHP_EOL.'memory_limit='.ini_get('memory_limit').PHP_EOL;
@@ -176,60 +177,6 @@ class XdebugHandler
return @file_put_contents($this->tmpIni, $content);
}
- /**
- * Returns an array of ini files to use
- *
- * @param array $iniPaths Locations used by the current prcoess
- * @param null|bool $replace Whether the files need modifying, set by method
- *
- * @return array
- */
- private function getWorkingSet(array $iniPaths, &$replace)
- {
- $replace = true;
- $result = array();
-
- if (empty($iniPaths[0])) {
- // There is no loaded ini
- array_shift($iniPaths);
- }
-
- foreach ($iniPaths as $file) {
- if (preg_match('/xdebug.ini$/', $file)) {
- // Skip the file, no need for regex replacing
- $replace = false;
- } else {
- $result[] = $file;
- }
- }
-
- return $result;
- }
-
- /**
- * Returns formatted ini file data
- *
- * @param string $iniFile The location of the ini file
- * @param bool $replace Whether to regex replace content
- *
- * @return string The ini data
- */
- private function getIniData($iniFile, $replace)
- {
- $contents = file_get_contents($iniFile);
- $data = PHP_EOL;
-
- if ($replace) {
- // Comment out xdebug config
- $regex = '/^\s*(zend_extension\s*=.*xdebug.*)$/mi';
- $data .= preg_replace($regex, ';$1', $contents);
- } else {
- $data .= $contents;
- }
-
- return $data;
- }
-
/**
* Returns the restart command line
*