diff --git a/src/Robo/Config/ConfigInitializer.php b/src/Robo/Config/ConfigInitializer.php index 8d7f3a8b7..0597e6c26 100644 --- a/src/Robo/Config/ConfigInitializer.php +++ b/src/Robo/Config/ConfigInitializer.php @@ -83,17 +83,37 @@ public function setSite($site) { * Site. */ protected function determineSite() { - if ($this->input->hasParameterOption('site')) { - $site = $this->input->getParameterOption('site'); + // Support --define site=foo. + if ($site = $this->findDefinedParameter('site')) { + return $site; } - elseif ($this->input->hasParameterOption('--site')) { - $site = $this->input->getParameterOption('--site'); - } - else { - $site = 'default'; + // Support --site=foo. + if ($this->input->hasParameterOption('--site')) { + return $this->input->getParameterOption('--site'); } + return 'default'; + } - return $site; + /** + * Find a parameter defined via --define. + * + * The --define parameter is used to set config at runtime. However, special + * config keys (especially site and environment) are used in the BLT bootstrap + * and thus need to be extracted prior to config being fully processed. This + * isn't trivial because reasons. + * + * @see https://github.com/acquia/blt/issues/4325 + */ + protected function findDefinedParameter($parameter) { + foreach (['--define', '-D'] as $define) { + if ($this->input->hasParameterOption($define)) { + [$passed_param, $passed_value] = explode('=', $this->input->getParameterOption($define)); + if ($passed_param == $parameter) { + return $passed_value; + } + } + } + return FALSE; } /** @@ -107,7 +127,9 @@ public function initialize() { $site = $this->determineSite(); $this->setSite($site); } - $this->determineEnvironment(); + $environment = $this->determineEnvironment(); + $this->environment = $environment; + $this->config->set('environment', $environment); $this->loadConfigFiles(); $this->processConfigFiles(); @@ -174,29 +196,22 @@ public function loadSiteConfig() { /** * Determine env. * - * @return $this + * @return * Env. */ public function determineEnvironment() { // Support --environment=ci. if ($this->input->hasParameterOption('--environment')) { - $environment = $this->input->getParameterOption('--environment'); + return $this->input->getParameterOption('--environment'); } // Support --define environment=ci. - elseif ($this->input->hasParameterOption('environment')) { - $environment = ltrim($this->input->getParameterOption('environment'), '='); + if ($environment = $this->findDefinedParameter('environment')) { + return $environment; } - elseif (EnvironmentDetector::isCiEnv()) { - $environment = 'ci'; + if (EnvironmentDetector::isCiEnv()) { + return 'ci'; } - else { - $environment = 'local'; - } - - $this->environment = $environment; - $this->config->set('environment', $environment); - - return $this; + return 'local'; } /**