|
|
@ -23,12 +23,52 @@ namespace vierbergenlars\Authserver\Composer; |
|
|
|
|
|
|
|
|
|
|
|
use Composer\Composer; |
|
|
|
use Composer\Composer; |
|
|
|
use Composer\IO\IOInterface; |
|
|
|
use Composer\IO\IOInterface; |
|
|
|
|
|
|
|
use Composer\Package\Link; |
|
|
|
|
|
|
|
use Composer\Package\Loader\ArrayLoader; |
|
|
|
use Composer\Plugin\PluginInterface; |
|
|
|
use Composer\Plugin\PluginInterface; |
|
|
|
|
|
|
|
use Composer\Semver\Constraint\Constraint; |
|
|
|
|
|
|
|
use Composer\Semver\Constraint\MultiConstraint; |
|
|
|
|
|
|
|
|
|
|
|
class AuthserverInstallerPlugin implements PluginInterface |
|
|
|
class AuthserverInstallerPlugin implements PluginInterface |
|
|
|
{ |
|
|
|
{ |
|
|
|
public function activate(Composer $composer, IOInterface $io) |
|
|
|
public function activate(Composer $composer, IOInterface $io) |
|
|
|
{ |
|
|
|
{ |
|
|
|
$composer->getInstallationManager()->addInstaller(new AuthserverInstaller($io, $composer)); |
|
|
|
$composer->getInstallationManager()->addInstaller(new AuthserverInstaller($io, $composer)); |
|
|
|
|
|
|
|
$this->overrideReplacesAndConflicts($composer); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private function overrideReplacesAndConflicts(Composer $composer) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
$rootPackage = $composer->getPackage(); |
|
|
|
|
|
|
|
$extra = $rootPackage->getExtra(); |
|
|
|
|
|
|
|
$loader = new ArrayLoader(); |
|
|
|
|
|
|
|
$replaces = $rootPackage->getReplaces(); |
|
|
|
|
|
|
|
$conflicts = $rootPackage->getConflicts(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(isset($extra['parent-lock-file'])) { |
|
|
|
|
|
|
|
$lockfile = json_decode(file_get_contents($extra['parent-lock-file']), true); |
|
|
|
|
|
|
|
foreach($lockfile['packages'] as $packageJson) { |
|
|
|
|
|
|
|
$package = $loader->load($packageJson); |
|
|
|
|
|
|
|
$constraint = new Constraint('=', $package->getVersion()); |
|
|
|
|
|
|
|
$replaces[$package->getName()] = new Link('__root_', $package->getName(), $constraint, 'replaces', $constraint->getPrettyString()); |
|
|
|
|
|
|
|
foreach($package->getProvides() as $provide) |
|
|
|
|
|
|
|
$replaces[$provide->getTarget()] = $provide; |
|
|
|
|
|
|
|
foreach($package->getReplaces() as $replace) |
|
|
|
|
|
|
|
$replaces[$replace->getTarget()] = $replace; |
|
|
|
|
|
|
|
foreach($package->getConflicts() as $conflict) { |
|
|
|
|
|
|
|
if(isset($conflicts[$conflict->getTarget()])) { |
|
|
|
|
|
|
|
$constraint = new MultiConstraint([ |
|
|
|
|
|
|
|
$conflicts[$conflict->getTarget()]->getConstraint(), |
|
|
|
|
|
|
|
$conflict->getConstraint(), |
|
|
|
|
|
|
|
], false); |
|
|
|
|
|
|
|
$conflict = new Link('__root__', $conflict->getTarget(), $constraint, 'conflicts', $constraint->getPrettyString()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
$conflicts[$conflict->getTarget()] = $conflict; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$rootPackage->setReplaces($replaces); |
|
|
|
|
|
|
|
$rootPackage->setConflicts($conflicts); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|