1
|
|
|
<?php namespace Arcanedev\Composer\Entities\PackageTraits; |
2
|
|
|
|
3
|
|
|
use Composer\Package\BasePackage; |
4
|
|
|
use Composer\Package\RootPackageInterface; |
5
|
|
|
use Composer\Package\Version\VersionParser; |
6
|
|
|
|
7
|
|
|
/** |
8
|
|
|
* Trait ReferencesTrait |
9
|
|
|
* |
10
|
|
|
* @package Arcanedev\Composer\Entities\PackageTraits |
11
|
|
|
* @author ARCANEDEV <[email protected]> |
12
|
|
|
*/ |
13
|
|
|
trait ReferencesTrait |
14
|
|
|
{ |
15
|
|
|
/* ------------------------------------------------------------------------------------------------ |
16
|
|
|
| Traits |
17
|
|
|
| ------------------------------------------------------------------------------------------------ |
18
|
|
|
*/ |
19
|
|
|
use PackageTrait; |
20
|
|
|
|
21
|
|
|
/* ------------------------------------------------------------------------------------------------ |
22
|
|
|
| Main Functions |
23
|
|
|
| ------------------------------------------------------------------------------------------------ |
24
|
|
|
*/ |
25
|
|
|
/** |
26
|
|
|
* Update the root packages reference information. |
27
|
|
|
* |
28
|
|
|
* @param \Composer\Package\RootPackageInterface $root |
29
|
|
|
*/ |
30
|
99 |
|
protected function mergeReferences(RootPackageInterface $root) |
31
|
|
|
{ |
32
|
|
|
// Merge source reference information for merged packages. |
33
|
|
|
// @see \Composer\Package\Loader\RootPackageLoader::load |
34
|
99 |
|
$references = []; |
35
|
99 |
|
$unwrapped = static::unwrapIfNeeded($root, 'setReferences'); |
36
|
|
|
|
37
|
99 |
|
foreach (['require', 'require-dev'] as $linkType) { |
38
|
99 |
|
$linkInfo = BasePackage::$supportedLinkTypes[$linkType]; |
39
|
99 |
|
$method = 'get'.ucfirst($linkInfo['method']); |
40
|
99 |
|
$links = []; |
41
|
|
|
|
42
|
|
|
/** @var \Composer\Package\Link $link */ |
43
|
99 |
|
foreach ($unwrapped->$method() as $link) { |
44
|
36 |
|
$links[$link->getTarget()] = $link->getConstraint()->getPrettyString(); |
45
|
|
|
} |
46
|
|
|
|
47
|
99 |
|
$references = $this->extractReferences($links, $references); |
48
|
|
|
} |
49
|
|
|
|
50
|
99 |
|
$unwrapped->setReferences($references); |
51
|
99 |
|
} |
52
|
|
|
|
53
|
|
|
/** |
54
|
|
|
* Extract vcs revision from version constraint (dev-master#abc123). |
55
|
|
|
* @see \Composer\Package\Loader\RootPackageLoader::extractReferences() |
56
|
|
|
* |
57
|
|
|
* @param array $requires |
58
|
|
|
* @param array $references |
59
|
|
|
* |
60
|
|
|
* @return array |
61
|
|
|
*/ |
62
|
99 |
|
private function extractReferences(array $requires, array $references) |
63
|
|
|
{ |
64
|
99 |
|
foreach ($requires as $reqName => $reqVersion) { |
65
|
36 |
|
$reqVersion = preg_replace('{^([^,\s@]+) as .+$}', '$1', $reqVersion); |
66
|
|
|
if ( |
67
|
36 |
|
preg_match('{^[^,\s@]+?#([a-f0-9]+)$}', $reqVersion, $match) && |
68
|
36 |
|
VersionParser::parseStability($reqVersion) === 'dev' |
69
|
|
|
) { |
70
|
18 |
|
$references[strtolower($reqName)] = $match[1]; |
71
|
|
|
} |
72
|
|
|
} |
73
|
|
|
|
74
|
99 |
|
return $references; |
75
|
|
|
} |
76
|
|
|
} |
77
|
|
|
|