@@ -109,11 +109,11 @@ public function mergeInto(RootPackageInterface $root, PluginState $state)
109
109
$ this ->mergeDevAutoload ($ root );
110
110
}
111
111
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 );
116
115
116
+ $ this ->mergeSuggests ($ root );
117
117
$ this ->mergeExtra ($ root , $ state );
118
118
}
119
119
@@ -333,86 +333,35 @@ private function mergeStabilityFlags(RootPackageInterface $root, array $requires
333
333
}
334
334
335
335
/**
336
- * Merge conflicting packages into a RootPackage.
336
+ * Merge package links of the given type into a RootPackageInterface
337
337
*
338
+ * @param string $type 'conflict', 'replace' or 'provide'
338
339
* @param \Composer\Package\RootPackageInterface $root
339
340
*/
340
- protected function mergeConflicts ( RootPackageInterface $ root )
341
+ protected function mergePackageLinks ( $ type , RootPackageInterface $ root )
341
342
{
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 ' ]);
362
346
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 }();
399
348
400
- if (empty ($ provides )) return ;
349
+ if (empty ($ links )) return ;
401
350
402
- $ unwrapped = self ::unwrapIfNeeded ($ root , ' setProvides ' );
351
+ $ unwrapped = self ::unwrapIfNeeded ($ root , $ setter );
403
352
404
353
// @codeCoverageIgnoreStart
405
354
if ($ root !== $ unwrapped ) {
406
355
$ this ->logger ->warning (
407
356
'This Composer version does not support ' .
408
- "'provides ' merging for aliased packages. "
357
+ "' { $ type } ' merging for aliased packages. "
409
358
);
410
359
}
411
360
// @codeCoverageIgnoreEnd
412
361
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 )
416
365
));
417
366
}
418
367
0 commit comments