Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F5957959
PluginState.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
9 KB
Referenced Files
None
Subscribers
None
PluginState.php
View Options
<?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\V2
;
use
Composer\Composer
;
use
Composer\Plugin\PluginInterface
;
/**
* Mutable plugin state
*
* @author Bryan Davis <bd808@bd808.com>
*/
class
PluginState
{
/**
* @var Composer $composer
*/
protected
$composer
;
/**
* @var bool $isComposer1
*/
protected
$isComposer1
;
/**
* @var array $includes
*/
protected
$includes
=
[];
/**
* @var array $requires
*/
protected
$requires
=
[];
/**
* @var bool $devMode
*/
protected
$devMode
=
false
;
/**
* @var bool $recurse
*/
protected
$recurse
=
true
;
/**
* @var bool $replace
*/
protected
$replace
=
false
;
/**
* @var bool $ignore
*/
protected
$ignore
=
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
;
/**
* Whether to merge the extra section in a deep / recursive way.
*
* By default the extra section is merged with array_merge() and duplicate
* keys are ignored. When enabled this allows to merge the arrays recursively
* using the following rule: Integer keys are merged, while array values are
* replaced where the later values overwrite the former.
*
* This is useful especially for the extra section when plugins use larger
* structures like a 'patches' key with the packages as sub-keys and the
* patches as values.
*
* When 'replace' mode is activated the order of array merges is exchanged.
*
* @var bool $mergeExtraDeep
*/
protected
$mergeExtraDeep
=
false
;
/**
* Whether to merge the replace section.
*
* @var bool $mergeReplace
*/
protected
$mergeReplace
=
true
;
/**
* Whether to merge the scripts section.
*
* @var bool $mergeScripts
*/
protected
$mergeScripts
=
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
;
$this
->
isComposer1
=
version_compare
(
PluginInterface
::
PLUGIN_API_VERSION
,
'2.0.0'
,
'<'
);
}
/**
* Test if this plugin runs within Composer 1.
*
* @return bool
*/
public
function
isComposer1
()
{
return
$this
->
isComposer1
;
}
/**
* Load plugin settings
*/
public
function
loadSettings
()
{
$extra
=
$this
->
composer
->
getPackage
()->
getExtra
();
$config
=
array_merge
(
[
'include'
=>
[],
'require'
=>
[],
'recurse'
=>
true
,
'replace'
=>
false
,
'ignore-duplicates'
=>
false
,
'merge-dev'
=>
true
,
'merge-extra'
=>
false
,
'merge-extra-deep'
=>
false
,
'merge-replace'
=>
true
,
'merge-scripts'
=>
false
,
],
$extra
[
'merge-plugin'
]
??
[]
);
$this
->
includes
=
(
is_array
(
$config
[
'include'
]))
?
$config
[
'include'
]
:
[
$config
[
'include'
]];
$this
->
requires
=
(
is_array
(
$config
[
'require'
]))
?
$config
[
'require'
]
:
[
$config
[
'require'
]];
$this
->
recurse
=
(
bool
)
$config
[
'recurse'
];
$this
->
replace
=
(
bool
)
$config
[
'replace'
];
$this
->
ignore
=
(
bool
)
$config
[
'ignore-duplicates'
];
$this
->
mergeDev
=
(
bool
)
$config
[
'merge-dev'
];
$this
->
mergeExtra
=
(
bool
)
$config
[
'merge-extra'
];
$this
->
mergeExtraDeep
=
(
bool
)
$config
[
'merge-extra-deep'
];
$this
->
mergeReplace
=
(
bool
)
$config
[
'merge-replace'
];
$this
->
mergeScripts
=
(
bool
)
$config
[
'merge-scripts'
];
}
/**
* 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
->
shouldMergeDev
()
&&
$this
->
devMode
;
}
/**
* Should devMode settings be merged?
*
* @return bool
*/
public
function
shouldMergeDev
()
{
return
$this
->
mergeDev
;
}
/**
* 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
;
}
/**
* 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 duplicate links be ignored?
*
* @return bool
*/
public
function
ignoreDuplicateLinks
()
{
return
$this
->
ignore
;
}
/**
* 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
;
}
/**
* Should the extra section be merged deep / recursively?
*
* By default the extra section is merged with array_merge() and duplicate
* keys are ignored. When enabled this allows to merge the arrays recursively
* using the following rule: Integer keys are merged, while array values are
* replaced where the later values overwrite the former.
*
* This is useful especially for the extra section when plugins use larger
* structures like a 'patches' key with the packages as sub-keys and the
* patches as values.
*
* When 'replace' mode is activated the order of array merges is exchanged.
*
* @return bool
*/
public
function
shouldMergeExtraDeep
()
{
return
$this
->
mergeExtraDeep
;
}
/**
* Should the replace section be merged?
*
* By default, the replace section is merged.
*
* @return bool
*/
public
function
shouldMergeReplace
()
{
return
$this
->
mergeReplace
;
}
/**
* Should the scripts section be merged?
*
* By default, the scripts section is not merged.
*
* @return bool
*/
public
function
shouldMergeScripts
()
{
return
$this
->
mergeScripts
;
}
}
// vim:sw=4:ts=4:sts=4:et:
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sat, Oct 3, 05:27 (2 w, 5 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
f8/5a/3712c8361b2edfd1324cadf79618
Default Alt Text
PluginState.php (9 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment