From 8cdf870ba6e38c92955baea227fb487f66217af5 Mon Sep 17 00:00:00 2001 From: tminich Date: Wed, 30 Oct 2019 09:27:39 +0100 Subject: [PATCH] Implement ignore-require --- README.md | 12 ++++++++++++ src/Merge/ExtraPackage.php | 12 ++++++++++++ src/Merge/PluginState.php | 18 ++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/README.md b/README.md index 15c2ae1..46ecea7 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,10 @@ Usage "recurse": true, "replace": false, "ignore-duplicates": false, + "ignore-require": [ + "vendor/package", + "other-vendor/*" + ], "merge-dev": true, "merge-extra": false, "merge-extra-deep": false, @@ -145,6 +149,14 @@ alphabetical order. Note: `"replace": true` and `"ignore-duplicates": true` modes are mutually exclusive. If both are set, `"ignore-duplicates": true` will be used. +### ignore-require + +In some cases you might want to ignore requirements imposed by included +configuration files (e.g. those requirements are fulfilled by other included +configuration files). This option allows you to set a list of composer-style +package name specifications that will get ignored when assembling the +combined final require statements. + ### merge-dev By default, `autoload-dev` and `require-dev` sections of included files are diff --git a/src/Merge/ExtraPackage.php b/src/Merge/ExtraPackage.php index 85997ae..a6b69a2 100644 --- a/src/Merge/ExtraPackage.php +++ b/src/Merge/ExtraPackage.php @@ -243,6 +243,18 @@ protected function mergeRequires( return; } + $ignoreRequire = $state->getIgnoreRequire(); + if (!empty($ignoreRequire)) { + $requires = array_filter($requires, function ($name) use ($ignoreRequire) { + foreach ($ignoreRequire as $ignorePattern) { + if (fnmatch($ignorePattern, $name)) { + return false; + } + } + return true; + }, ARRAY_FILTER_USE_KEY); + } + $this->mergeStabilityFlags($root, $requires); $requires = $this->replaceSelfVersionDependencies( diff --git a/src/Merge/PluginState.php b/src/Merge/PluginState.php index 7aa90ac..f5895bb 100644 --- a/src/Merge/PluginState.php +++ b/src/Merge/PluginState.php @@ -59,6 +59,11 @@ class PluginState */ protected $ignore = false; + /** + * @var array $ignoreRequire + */ + protected $ignoreRequire = array(); + /** * Whether to merge the -dev sections. * @var bool $mergeDev @@ -145,6 +150,7 @@ public function loadSettings() 'recurse' => true, 'replace' => false, 'ignore-duplicates' => false, + 'ignore-require' => array(), 'merge-dev' => true, 'merge-extra' => false, 'merge-extra-deep' => false, @@ -160,6 +166,8 @@ public function loadSettings() $this->recurse = (bool)$config['recurse']; $this->replace = (bool)$config['replace']; $this->ignore = (bool)$config['ignore-duplicates']; + $this->ignoreRequire = (is_array($config['ignore-require'])) ? + $config['ignore-require'] : array($config['ignore-require']); $this->mergeDev = (bool)$config['merge-dev']; $this->mergeExtra = (bool)$config['merge-extra']; $this->mergeExtraDeep = (bool)$config['merge-extra-deep']; @@ -363,6 +371,16 @@ public function ignoreDuplicateLinks() return $this->ignore; } + /** + * Return an array of require package name specifications that should be ignored + * + * @return array + */ + public function getIgnoreRequire() + { + return $this->ignoreRequire; + } + /** * Should the extra section be merged? *