Skip to content

Commit afb99c6

Browse files
Refactoring the package links merging
1 parent 96e76d6 commit afb99c6

File tree

1 file changed

+17
-68
lines changed

1 file changed

+17
-68
lines changed

src/Entities/Package.php

+17-68
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,11 @@ public function mergeInto(RootPackageInterface $root, PluginState $state)
109109
$this->mergeDevAutoload($root);
110110
}
111111

112-
$this->mergeConflicts($root);
113-
$this->mergeReplaces($root);
114-
$this->mergeProvides($root);
115-
$this->mergeSuggests($root);
112+
$this->mergePackageLinks('conflict', $root);
113+
$this->mergePackageLinks('replace', $root);
114+
$this->mergePackageLinks('provide', $root);
116115

116+
$this->mergeSuggests($root);
117117
$this->mergeExtra($root, $state);
118118
}
119119

@@ -333,86 +333,35 @@ private function mergeStabilityFlags(RootPackageInterface $root, array $requires
333333
}
334334

335335
/**
336-
* Merge conflicting packages into a RootPackage.
336+
* Merge package links of the given type into a RootPackageInterface
337337
*
338+
* @param string $type 'conflict', 'replace' or 'provide'
338339
* @param \Composer\Package\RootPackageInterface $root
339340
*/
340-
protected function mergeConflicts(RootPackageInterface $root)
341+
protected function mergePackageLinks($type, RootPackageInterface $root)
341342
{
342-
$conflicts = $this->package->getConflicts();
343-
344-
if (empty($conflicts)) return;
345-
346-
$unwrapped = self::unwrapIfNeeded($root, 'setConflicts');
347-
348-
// @codeCoverageIgnoreStart
349-
if ($root !== $unwrapped) {
350-
$this->logger->warning(
351-
'This Composer version does not support ' .
352-
"'conflicts' merging for aliased packages."
353-
);
354-
}
355-
// @codeCoverageIgnoreEnd
356-
357-
$unwrapped->setConflicts(array_merge(
358-
$root->getConflicts(),
359-
$this->replaceSelfVersionDependencies('conflict', $conflicts, $root)
360-
));
361-
}
343+
$linkType = BasePackage::$supportedLinkTypes[$type];
344+
$getter = 'get' . ucfirst($linkType['method']);
345+
$setter = 'set' . ucfirst($linkType['method']);
362346

363-
/**
364-
* Merge replaced packages into a RootPackage.
365-
*
366-
* @param \Composer\Package\RootPackageInterface $root
367-
*/
368-
protected function mergeReplaces(RootPackageInterface $root)
369-
{
370-
$replaces = $this->package->getReplaces();
371-
372-
if (empty($replaces)) return;
373-
374-
$unwrapped = self::unwrapIfNeeded($root, 'setReplaces');
375-
376-
// @codeCoverageIgnoreStart
377-
if ($root !== $unwrapped) {
378-
$this->logger->warning(
379-
'This Composer version does not support ' .
380-
"'replaces' merging for aliased packages."
381-
);
382-
}
383-
// @codeCoverageIgnoreEnd
384-
385-
$unwrapped->setReplaces(array_merge(
386-
$root->getReplaces(),
387-
$this->replaceSelfVersionDependencies('replace', $replaces, $root)
388-
));
389-
}
390-
391-
/**
392-
* Merge provided virtual packages into a RootPackage.
393-
*
394-
* @param \Composer\Package\RootPackageInterface $root
395-
*/
396-
protected function mergeProvides(RootPackageInterface $root)
397-
{
398-
$provides = $this->package->getProvides();
347+
$links = $this->package->{$getter}();
399348

400-
if (empty($provides)) return;
349+
if (empty($links)) return;
401350

402-
$unwrapped = self::unwrapIfNeeded($root, 'setProvides');
351+
$unwrapped = self::unwrapIfNeeded($root, $setter);
403352

404353
// @codeCoverageIgnoreStart
405354
if ($root !== $unwrapped) {
406355
$this->logger->warning(
407356
'This Composer version does not support ' .
408-
"'provides' merging for aliased packages."
357+
"'{$type}' merging for aliased packages."
409358
);
410359
}
411360
// @codeCoverageIgnoreEnd
412361

413-
$unwrapped->setProvides(array_merge(
414-
$root->getProvides(),
415-
$this->replaceSelfVersionDependencies('provide', $provides, $root)
362+
$unwrapped->{$setter}(array_merge(
363+
$root->{$getter}(),
364+
$this->replaceSelfVersionDependencies($type, $links, $root)
416365
));
417366
}
418367

0 commit comments

Comments
 (0)