summaryrefslogtreecommitdiff
path: root/vendor/wikimedia/composer-merge-plugin/src/Merge/PluginState.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/wikimedia/composer-merge-plugin/src/Merge/PluginState.php')
-rw-r--r--vendor/wikimedia/composer-merge-plugin/src/Merge/PluginState.php327
1 files changed, 327 insertions, 0 deletions
diff --git a/vendor/wikimedia/composer-merge-plugin/src/Merge/PluginState.php b/vendor/wikimedia/composer-merge-plugin/src/Merge/PluginState.php
new file mode 100644
index 00000000..a191c1e8
--- /dev/null
+++ b/vendor/wikimedia/composer-merge-plugin/src/Merge/PluginState.php
@@ -0,0 +1,327 @@
+<?php
+/**
+ * This file is part of the Composer Merge plugin.
+ *
+ * Copyright (C) 2015 Bryan Davis, Wikimedia Foundation, and contributors
+ *
+ * This software may be modified and distributed under the terms of the MIT
+ * license. See the LICENSE file for details.
+ */
+
+namespace Wikimedia\Composer\Merge;
+
+use Composer\Composer;
+
+/**
+ * Mutable plugin state
+ *
+ * @author Bryan Davis <bd808@bd808.com>
+ */
+class PluginState
+{
+ /**
+ * @var Composer $composer
+ */
+ protected $composer;
+
+ /**
+ * @var array $includes
+ */
+ protected $includes = array();
+
+ /**
+ * @var array $requires
+ */
+ protected $requires = array();
+
+ /**
+ * @var array $duplicateLinks
+ */
+ protected $duplicateLinks = array();
+
+ /**
+ * @var bool $devMode
+ */
+ protected $devMode = false;
+
+ /**
+ * @var bool $recurse
+ */
+ protected $recurse = true;
+
+ /**
+ * @var bool $replace
+ */
+ protected $replace = false;
+
+ /**
+ * Whether to merge the -dev sections.
+ * @var bool $mergeDev
+ */
+ protected $mergeDev = true;
+
+ /**
+ * Whether to merge the extra section.
+ *
+ * By default, the extra section is not merged and there will be many
+ * cases where the merge of the extra section is performed too late
+ * to be of use to other plugins. When enabled, merging uses one of
+ * two strategies - either 'first wins' or 'last wins'. When enabled,
+ * 'first wins' is the default behaviour. If Replace mode is activated
+ * then 'last wins' is used.
+ *
+ * @var bool $mergeExtra
+ */
+ protected $mergeExtra = false;
+
+ /**
+ * @var bool $firstInstall
+ */
+ protected $firstInstall = false;
+
+ /**
+ * @var bool $locked
+ */
+ protected $locked = false;
+
+ /**
+ * @var bool $dumpAutoloader
+ */
+ protected $dumpAutoloader = false;
+
+ /**
+ * @var bool $optimizeAutoloader
+ */
+ protected $optimizeAutoloader = false;
+
+ /**
+ * @param Composer $composer
+ */
+ public function __construct(Composer $composer)
+ {
+ $this->composer = $composer;
+ }
+
+ /**
+ * Load plugin settings
+ */
+ public function loadSettings()
+ {
+ $extra = $this->composer->getPackage()->getExtra();
+ $config = array_merge(
+ array(
+ 'include' => array(),
+ 'require' => array(),
+ 'recurse' => true,
+ 'replace' => false,
+ 'merge-dev' => true,
+ 'merge-extra' => false,
+ ),
+ isset($extra['merge-plugin']) ? $extra['merge-plugin'] : array()
+ );
+
+ $this->includes = (is_array($config['include'])) ?
+ $config['include'] : array($config['include']);
+ $this->requires = (is_array($config['require'])) ?
+ $config['require'] : array($config['require']);
+ $this->recurse = (bool)$config['recurse'];
+ $this->replace = (bool)$config['replace'];
+ $this->mergeDev = (bool)$config['merge-dev'];
+ $this->mergeExtra = (bool)$config['merge-extra'];
+ }
+
+ /**
+ * Get list of filenames and/or glob patterns to include
+ *
+ * @return array
+ */
+ public function getIncludes()
+ {
+ return $this->includes;
+ }
+
+ /**
+ * Get list of filenames and/or glob patterns to require
+ *
+ * @return array
+ */
+ public function getRequires()
+ {
+ return $this->requires;
+ }
+
+ /**
+ * Set the first install flag
+ *
+ * @param bool $flag
+ */
+ public function setFirstInstall($flag)
+ {
+ $this->firstInstall = (bool)$flag;
+ }
+
+ /**
+ * Is this the first time that the plugin has been installed?
+ *
+ * @return bool
+ */
+ public function isFirstInstall()
+ {
+ return $this->firstInstall;
+ }
+
+ /**
+ * Set the locked flag
+ *
+ * @param bool $flag
+ */
+ public function setLocked($flag)
+ {
+ $this->locked = (bool)$flag;
+ }
+
+ /**
+ * Was a lockfile present when the plugin was installed?
+ *
+ * @return bool
+ */
+ public function isLocked()
+ {
+ return $this->locked;
+ }
+
+ /**
+ * Should an update be forced?
+ *
+ * @return true If packages are not locked
+ */
+ public function forceUpdate()
+ {
+ return !$this->locked;
+ }
+
+ /**
+ * Set the devMode flag
+ *
+ * @param bool $flag
+ */
+ public function setDevMode($flag)
+ {
+ $this->devMode = (bool)$flag;
+ }
+
+ /**
+ * Should devMode settings be processed?
+ *
+ * @return bool
+ */
+ public function isDevMode()
+ {
+ return $this->mergeDev && $this->devMode;
+ }
+
+ /**
+ * Set the dumpAutoloader flag
+ *
+ * @param bool $flag
+ */
+ public function setDumpAutoloader($flag)
+ {
+ $this->dumpAutoloader = (bool)$flag;
+ }
+
+ /**
+ * Is the autoloader file supposed to be written out?
+ *
+ * @return bool
+ */
+ public function shouldDumpAutoloader()
+ {
+ return $this->dumpAutoloader;
+ }
+
+ /**
+ * Set the optimizeAutoloader flag
+ *
+ * @param bool $flag
+ */
+ public function setOptimizeAutoloader($flag)
+ {
+ $this->optimizeAutoloader = (bool)$flag;
+ }
+
+ /**
+ * Should the autoloader be optimized?
+ *
+ * @return bool
+ */
+ public function shouldOptimizeAutoloader()
+ {
+ return $this->optimizeAutoloader;
+ }
+
+ /**
+ * Add duplicate packages
+ *
+ * @param string $type Package type
+ * @param array $packages
+ */
+ public function addDuplicateLinks($type, array $packages)
+ {
+ if (!isset($this->duplicateLinks[$type])) {
+ $this->duplicateLinks[$type] = array();
+ }
+ $this->duplicateLinks[$type] =
+ array_merge($this->duplicateLinks[$type], $packages);
+ }
+
+ /**
+ * Get duplicate packages
+ *
+ * @param string $type Package type
+ * @return array
+ */
+ public function getDuplicateLinks($type)
+ {
+ return isset($this->duplicateLinks[$type]) ?
+ $this->duplicateLinks[$type] : array();
+ }
+
+ /**
+ * Should includes be recursively processed?
+ *
+ * @return bool
+ */
+ public function recurseIncludes()
+ {
+ return $this->recurse;
+ }
+
+ /**
+ * Should duplicate links be replaced in a 'last definition wins' order?
+ *
+ * @return bool
+ */
+ public function replaceDuplicateLinks()
+ {
+ return $this->replace;
+ }
+
+ /**
+ * Should the extra section be merged?
+ *
+ * By default, the extra section is not merged and there will be many
+ * cases where the merge of the extra section is performed too late
+ * to be of use to other plugins. When enabled, merging uses one of
+ * two strategies - either 'first wins' or 'last wins'. When enabled,
+ * 'first wins' is the default behaviour. If Replace mode is activated
+ * then 'last wins' is used.
+ *
+ * @return bool
+ */
+ public function shouldMergeExtra()
+ {
+ return $this->mergeExtra;
+ }
+}
+// vim:sw=4:ts=4:sts=4:et: