Mercurial > hg > isophonics-drupal-site
comparison vendor/wikimedia/composer-merge-plugin/src/Merge/PluginState.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 /** | |
3 * This file is part of the Composer Merge plugin. | |
4 * | |
5 * Copyright (C) 2015 Bryan Davis, Wikimedia Foundation, and contributors | |
6 * | |
7 * This software may be modified and distributed under the terms of the MIT | |
8 * license. See the LICENSE file for details. | |
9 */ | |
10 | |
11 namespace Wikimedia\Composer\Merge; | |
12 | |
13 use Composer\Composer; | |
14 | |
15 /** | |
16 * Mutable plugin state | |
17 * | |
18 * @author Bryan Davis <bd808@bd808.com> | |
19 */ | |
20 class PluginState | |
21 { | |
22 /** | |
23 * @var Composer $composer | |
24 */ | |
25 protected $composer; | |
26 | |
27 /** | |
28 * @var array $includes | |
29 */ | |
30 protected $includes = array(); | |
31 | |
32 /** | |
33 * @var array $requires | |
34 */ | |
35 protected $requires = array(); | |
36 | |
37 /** | |
38 * @var array $duplicateLinks | |
39 */ | |
40 protected $duplicateLinks = array(); | |
41 | |
42 /** | |
43 * @var bool $devMode | |
44 */ | |
45 protected $devMode = false; | |
46 | |
47 /** | |
48 * @var bool $recurse | |
49 */ | |
50 protected $recurse = true; | |
51 | |
52 /** | |
53 * @var bool $replace | |
54 */ | |
55 protected $replace = false; | |
56 | |
57 /** | |
58 * @var bool $ignore | |
59 */ | |
60 protected $ignore = false; | |
61 | |
62 /** | |
63 * Whether to merge the -dev sections. | |
64 * @var bool $mergeDev | |
65 */ | |
66 protected $mergeDev = true; | |
67 | |
68 /** | |
69 * Whether to merge the extra section. | |
70 * | |
71 * By default, the extra section is not merged and there will be many | |
72 * cases where the merge of the extra section is performed too late | |
73 * to be of use to other plugins. When enabled, merging uses one of | |
74 * two strategies - either 'first wins' or 'last wins'. When enabled, | |
75 * 'first wins' is the default behaviour. If Replace mode is activated | |
76 * then 'last wins' is used. | |
77 * | |
78 * @var bool $mergeExtra | |
79 */ | |
80 protected $mergeExtra = false; | |
81 | |
82 /** | |
83 * Whether to merge the extra section in a deep / recursive way. | |
84 * | |
85 * By default the extra section is merged with array_merge() and duplicate | |
86 * keys are ignored. When enabled this allows to merge the arrays recursively | |
87 * using the following rule: Integer keys are merged, while array values are | |
88 * replaced where the later values overwrite the former. | |
89 * | |
90 * This is useful especially for the extra section when plugins use larger | |
91 * structures like a 'patches' key with the packages as sub-keys and the | |
92 * patches as values. | |
93 * | |
94 * When 'replace' mode is activated the order of array merges is exchanged. | |
95 * | |
96 * @var bool $mergeExtraDeep | |
97 */ | |
98 protected $mergeExtraDeep = false; | |
99 | |
100 /** | |
101 * Whether to merge the scripts section. | |
102 * | |
103 * @var bool $mergeScripts | |
104 */ | |
105 protected $mergeScripts = false; | |
106 | |
107 /** | |
108 * @var bool $firstInstall | |
109 */ | |
110 protected $firstInstall = false; | |
111 | |
112 /** | |
113 * @var bool $locked | |
114 */ | |
115 protected $locked = false; | |
116 | |
117 /** | |
118 * @var bool $dumpAutoloader | |
119 */ | |
120 protected $dumpAutoloader = false; | |
121 | |
122 /** | |
123 * @var bool $optimizeAutoloader | |
124 */ | |
125 protected $optimizeAutoloader = false; | |
126 | |
127 /** | |
128 * @param Composer $composer | |
129 */ | |
130 public function __construct(Composer $composer) | |
131 { | |
132 $this->composer = $composer; | |
133 } | |
134 | |
135 /** | |
136 * Load plugin settings | |
137 */ | |
138 public function loadSettings() | |
139 { | |
140 $extra = $this->composer->getPackage()->getExtra(); | |
141 $config = array_merge( | |
142 array( | |
143 'include' => array(), | |
144 'require' => array(), | |
145 'recurse' => true, | |
146 'replace' => false, | |
147 'ignore-duplicates' => false, | |
148 'merge-dev' => true, | |
149 'merge-extra' => false, | |
150 'merge-extra-deep' => false, | |
151 'merge-scripts' => false, | |
152 ), | |
153 isset($extra['merge-plugin']) ? $extra['merge-plugin'] : array() | |
154 ); | |
155 | |
156 $this->includes = (is_array($config['include'])) ? | |
157 $config['include'] : array($config['include']); | |
158 $this->requires = (is_array($config['require'])) ? | |
159 $config['require'] : array($config['require']); | |
160 $this->recurse = (bool)$config['recurse']; | |
161 $this->replace = (bool)$config['replace']; | |
162 $this->ignore = (bool)$config['ignore-duplicates']; | |
163 $this->mergeDev = (bool)$config['merge-dev']; | |
164 $this->mergeExtra = (bool)$config['merge-extra']; | |
165 $this->mergeExtraDeep = (bool)$config['merge-extra-deep']; | |
166 $this->mergeScripts = (bool)$config['merge-scripts']; | |
167 } | |
168 | |
169 /** | |
170 * Get list of filenames and/or glob patterns to include | |
171 * | |
172 * @return array | |
173 */ | |
174 public function getIncludes() | |
175 { | |
176 return $this->includes; | |
177 } | |
178 | |
179 /** | |
180 * Get list of filenames and/or glob patterns to require | |
181 * | |
182 * @return array | |
183 */ | |
184 public function getRequires() | |
185 { | |
186 return $this->requires; | |
187 } | |
188 | |
189 /** | |
190 * Set the first install flag | |
191 * | |
192 * @param bool $flag | |
193 */ | |
194 public function setFirstInstall($flag) | |
195 { | |
196 $this->firstInstall = (bool)$flag; | |
197 } | |
198 | |
199 /** | |
200 * Is this the first time that the plugin has been installed? | |
201 * | |
202 * @return bool | |
203 */ | |
204 public function isFirstInstall() | |
205 { | |
206 return $this->firstInstall; | |
207 } | |
208 | |
209 /** | |
210 * Set the locked flag | |
211 * | |
212 * @param bool $flag | |
213 */ | |
214 public function setLocked($flag) | |
215 { | |
216 $this->locked = (bool)$flag; | |
217 } | |
218 | |
219 /** | |
220 * Was a lockfile present when the plugin was installed? | |
221 * | |
222 * @return bool | |
223 */ | |
224 public function isLocked() | |
225 { | |
226 return $this->locked; | |
227 } | |
228 | |
229 /** | |
230 * Should an update be forced? | |
231 * | |
232 * @return true If packages are not locked | |
233 */ | |
234 public function forceUpdate() | |
235 { | |
236 return !$this->locked; | |
237 } | |
238 | |
239 /** | |
240 * Set the devMode flag | |
241 * | |
242 * @param bool $flag | |
243 */ | |
244 public function setDevMode($flag) | |
245 { | |
246 $this->devMode = (bool)$flag; | |
247 } | |
248 | |
249 /** | |
250 * Should devMode settings be processed? | |
251 * | |
252 * @return bool | |
253 */ | |
254 public function isDevMode() | |
255 { | |
256 return $this->shouldMergeDev() && $this->devMode; | |
257 } | |
258 | |
259 /** | |
260 * Should devMode settings be merged? | |
261 * | |
262 * @return bool | |
263 */ | |
264 public function shouldMergeDev() | |
265 { | |
266 return $this->mergeDev; | |
267 } | |
268 | |
269 /** | |
270 * Set the dumpAutoloader flag | |
271 * | |
272 * @param bool $flag | |
273 */ | |
274 public function setDumpAutoloader($flag) | |
275 { | |
276 $this->dumpAutoloader = (bool)$flag; | |
277 } | |
278 | |
279 /** | |
280 * Is the autoloader file supposed to be written out? | |
281 * | |
282 * @return bool | |
283 */ | |
284 public function shouldDumpAutoloader() | |
285 { | |
286 return $this->dumpAutoloader; | |
287 } | |
288 | |
289 /** | |
290 * Set the optimizeAutoloader flag | |
291 * | |
292 * @param bool $flag | |
293 */ | |
294 public function setOptimizeAutoloader($flag) | |
295 { | |
296 $this->optimizeAutoloader = (bool)$flag; | |
297 } | |
298 | |
299 /** | |
300 * Should the autoloader be optimized? | |
301 * | |
302 * @return bool | |
303 */ | |
304 public function shouldOptimizeAutoloader() | |
305 { | |
306 return $this->optimizeAutoloader; | |
307 } | |
308 | |
309 /** | |
310 * Add duplicate packages | |
311 * | |
312 * @param string $type Package type | |
313 * @param array $packages | |
314 */ | |
315 public function addDuplicateLinks($type, array $packages) | |
316 { | |
317 if (!isset($this->duplicateLinks[$type])) { | |
318 $this->duplicateLinks[$type] = array(); | |
319 } | |
320 $this->duplicateLinks[$type] = | |
321 array_merge($this->duplicateLinks[$type], $packages); | |
322 } | |
323 | |
324 /** | |
325 * Get duplicate packages | |
326 * | |
327 * @param string $type Package type | |
328 * @return array | |
329 */ | |
330 public function getDuplicateLinks($type) | |
331 { | |
332 return isset($this->duplicateLinks[$type]) ? | |
333 $this->duplicateLinks[$type] : array(); | |
334 } | |
335 | |
336 /** | |
337 * Should includes be recursively processed? | |
338 * | |
339 * @return bool | |
340 */ | |
341 public function recurseIncludes() | |
342 { | |
343 return $this->recurse; | |
344 } | |
345 | |
346 /** | |
347 * Should duplicate links be replaced in a 'last definition wins' order? | |
348 * | |
349 * @return bool | |
350 */ | |
351 public function replaceDuplicateLinks() | |
352 { | |
353 return $this->replace; | |
354 } | |
355 | |
356 /** | |
357 * Should duplicate links be ignored? | |
358 * | |
359 * @return bool | |
360 */ | |
361 public function ignoreDuplicateLinks() | |
362 { | |
363 return $this->ignore; | |
364 } | |
365 | |
366 /** | |
367 * Should the extra section be merged? | |
368 * | |
369 * By default, the extra section is not merged and there will be many | |
370 * cases where the merge of the extra section is performed too late | |
371 * to be of use to other plugins. When enabled, merging uses one of | |
372 * two strategies - either 'first wins' or 'last wins'. When enabled, | |
373 * 'first wins' is the default behaviour. If Replace mode is activated | |
374 * then 'last wins' is used. | |
375 * | |
376 * @return bool | |
377 */ | |
378 public function shouldMergeExtra() | |
379 { | |
380 return $this->mergeExtra; | |
381 } | |
382 | |
383 /** | |
384 * Should the extra section be merged deep / recursively? | |
385 * | |
386 * By default the extra section is merged with array_merge() and duplicate | |
387 * keys are ignored. When enabled this allows to merge the arrays recursively | |
388 * using the following rule: Integer keys are merged, while array values are | |
389 * replaced where the later values overwrite the former. | |
390 * | |
391 * This is useful especially for the extra section when plugins use larger | |
392 * structures like a 'patches' key with the packages as sub-keys and the | |
393 * patches as values. | |
394 * | |
395 * When 'replace' mode is activated the order of array merges is exchanged. | |
396 * | |
397 * @return bool | |
398 */ | |
399 public function shouldMergeExtraDeep() | |
400 { | |
401 return $this->mergeExtraDeep; | |
402 } | |
403 | |
404 | |
405 /** | |
406 * Should the scripts section be merged? | |
407 * | |
408 * By default, the scripts section is not merged. | |
409 * | |
410 * @return bool | |
411 */ | |
412 public function shouldMergeScripts() | |
413 { | |
414 return $this->mergeScripts; | |
415 } | |
416 } | |
417 // vim:sw=4:ts=4:sts=4:et: |