From 86b5938cdb2b0bd43161a3f88f72108e053d572c Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Fri, 21 Nov 2014 10:14:40 +0000 Subject: [PATCH] Allow reading of COMPOSER_ environment variables to be disabled --- src/Composer/Config.php | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/Composer/Config.php b/src/Composer/Config.php index e740bb8c7..bd5d86895 100644 --- a/src/Composer/Config.php +++ b/src/Composer/Config.php @@ -58,12 +58,17 @@ class Config private $repositories; private $configSource; private $authConfigSource; + private $useEnvironment; - public function __construct() + /** + * @param boolean $useEnvironment Use COMPOSER_ environment variables to replace config settings + */ + public function __construct($useEnvironment = true) { // load defaults $this->config = static::$defaultConfig; $this->repositories = static::$defaultRepositories; + $this->useEnvironment = (bool) $useEnvironment; } public function setConfigSource(ConfigSourceInterface $source) @@ -159,7 +164,7 @@ class Config // convert foo-bar to COMPOSER_FOO_BAR and check if it exists since it overrides the local config $env = 'COMPOSER_' . strtoupper(strtr($key, '-', '_')); - $val = rtrim($this->process(getenv($env) ?: $this->config[$key]), '/\\'); + $val = rtrim($this->process($this->getComposerEnv($env) ?: $this->config[$key]), '/\\'); $val = preg_replace('#^(\$HOME|~)(/|$)#', rtrim(getenv('HOME') ?: getenv('USERPROFILE'), '/\\') . '/', $val); return $val; @@ -201,7 +206,7 @@ class Config return rtrim($this->process($this->config[$key]), '/\\'); case 'discard-changes': - if ($env = getenv('COMPOSER_DISCARD_CHANGES')) { + if ($env = $this->getComposerEnv('COMPOSER_DISCARD_CHANGES')) { if (!in_array($env, array('stash', 'true', 'false', '1', '0'), true)) { throw new \RuntimeException( "Invalid value for COMPOSER_DISCARD_CHANGES: {$env}. Expected 1, 0, true, false or stash" @@ -288,4 +293,22 @@ class Config return $config->get($match[1]); }, $value); } + + /** + * Reads the value of a Composer environment variable + * + * This should be used to read COMPOSER_ environment variables + * that overload config values. + * + * @param string $var + * @return string|boolean + */ + private function getComposerEnv($var) + { + if ($this->useEnvironment) { + return getenv($var); + } + + return false; + } }