Skip to content

Commit

Permalink
Allowing files by any name to be imported via -c option.
Browse files Browse the repository at this point in the history
  • Loading branch information
grasmash committed Jan 2, 2018
1 parent 51bf721 commit d19971a
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 12 deletions.
70 changes: 59 additions & 11 deletions src/Config/ConfigLocator.php
Original file line number Diff line number Diff line change
Expand Up @@ -198,14 +198,14 @@ public function addEnvironment(Environment $environment)
}

/**
* Unused. See PreflightArgs::applyToConfig() instead.
* Add config paths defined in preflight configuration.
*
* @param array $preflightConfig
* @param array $paths
* @return $this
*/
public function addPreflightConfig($preflightConfig)
public function addPreflightConfigFiles($filepaths)
{
$this->config->addContext(self::PREFLIGHT_CONTEXT, $preflightConfig);
$this->addConfigPaths(self::PREFLIGHT_CONTEXT, (array) $filepaths);
return $this;
}

Expand Down Expand Up @@ -290,19 +290,27 @@ public function addSitewideConfig($siteRoot)
*/
public function addConfigPaths($contextName, $paths)
{
// Separate $paths into files and directories.
list($files, $dirs) = $this->separateFilesAndDirs($paths);

$loader = new YamlConfigLoader();
// Make all of the config values parsed so far available in evaluations.
$reference = $this->config()->export();
$processor = new ConfigProcessor();
$context = $this->config->getContext($contextName);
$processor->add($context->export());

// Add config files in $dirs that match filenames in $candidates.
$candidates = [
'drush.yml',
'config/drush.yml',
];
$this->addConfigCandidates($processor, $loader, $dirs, $candidates);

// Make all of the config values parsed so far available in evaluations
$reference = $this->config()->export();
// Add explicitly defined config files.
$this->addConfigFiles($processor, $loader, $files);

$processor = new ConfigProcessor();
$context = $this->config->getContext($contextName);
$processor->add($context->export());
$this->addConfigCandidates($processor, $loader, $paths, $candidates);
// Complete config import.
$this->addToSources($processor->sources());
$context->import($processor->export($reference));
$this->config->addContext($contextName, $context);
Expand All @@ -311,7 +319,7 @@ public function addConfigPaths($contextName, $paths)
}

/**
* Worker function for addConfigPaths
* Adds config files in $paths matching filenames in $candidates.
*
* @param ConfigProcessor $processor
* @param ConfigLoaderInterface $loader
Expand All @@ -327,6 +335,21 @@ protected function addConfigCandidates(ConfigProcessor $processor, ConfigLoaderI
}
}

/**
* Adds $configFiles config files.
*
* @param ConfigProcessor $processor
* @param ConfigLoaderInterface $loader
* @param array $configFiles
*/
protected function addConfigFiles(ConfigProcessor $processor, ConfigLoaderInterface $loader, array $configFiles)
{
foreach ($configFiles as $configFile) {
$processor->extend($loader->load($configFile));
$this->configFilePaths[] = $configFile;
}
}

/**
* Given a list of paths, and candidates that might exist at each path,
* return all of the candidates that can be found. Candidates may be
Expand Down Expand Up @@ -478,4 +501,29 @@ public function setComposerRoot($selectedComposerRoot)
{
$this->composerRoot = $selectedComposerRoot;
}

/**
* Given an array of paths, separates files and directories.
*
* @param array $paths
*
* @return array
* An array. The first row is an array of files, the second row is an
* array of dirs.
*/
protected function separateFilesAndDirs($paths) {
$files = [];
$dirs = [];
foreach ($paths as $path) {
if (file_exists($path)) {
if (is_dir($path)) {
$dirs[] = realpath($path);
}
else {
$files[] = realpath($path);
}
}
}
return array($files, $dirs);
}
}
1 change: 0 additions & 1 deletion src/Preflight/Preflight.php
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,6 @@ public function prepareConfig(Environment $environment)
{
// Make our environment settings available as configuration items
$this->configLocator->addEnvironment($environment);

$this->configLocator->setLocal($this->preflightArgs->isLocal());
$this->configLocator->addUserConfig($this->preflightArgs->configPaths(), $environment->systemConfigPath(), $environment->userConfigPath());
$this->configLocator->addDrushConfig($environment->drushBasePath());
Expand Down

0 comments on commit d19971a

Please sign in to comment.