Skip to content

Commit

Permalink
Allow use of --locked with depends and prohibits (#10834)
Browse files Browse the repository at this point in the history
* Allow use of --locked with depends and prohibits

* Only include other repos if not --locked

* Move logic to appease PHPStan

* Load a PlatformRepository when reading lock file
  • Loading branch information
fredden committed Jun 25, 2022
1 parent 978037f commit d880ab6
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 6 deletions.
35 changes: 29 additions & 6 deletions src/Composer/Command/BaseDependencyCommand.php
Expand Up @@ -58,12 +58,35 @@ protected function doExecute(InputInterface $input, OutputInterface $output, boo
$commandEvent = new CommandEvent(PluginEvents::COMMAND, $this->getName(), $input, $output);
$composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent);

$platformOverrides = $composer->getConfig()->get('platform') ?: array();
$installedRepo = new InstalledRepository(array(
new RootPackageRepository($composer->getPackage()),
$composer->getRepositoryManager()->getLocalRepository(),
new PlatformRepository(array(), $platformOverrides),
));
$repos = [];

$repos[] = new RootPackageRepository($composer->getPackage());

if ($input->getOption('locked')) {
$locker = $composer->getLocker();

if (!$locker->isLocked()) {
throw new \UnexpectedValueException('A valid composer.lock file is required to run this command with --locked');
}

$repos[] = $locker->getLockedRepository(true);
$repos[] = new PlatformRepository([], $locker->getPlatformOverrides());
} else {
$localRepo = $composer->getRepositoryManager()->getLocalRepository();
$rootPkg = $composer->getPackage();

if (count($localRepo->getPackages()) === 0 && (count($rootPkg->getRequires()) > 0 || count($rootPkg->getDevRequires()) > 0)) {
$output->writeln('<warning>No dependencies installed. Try running composer install or update, or use --locked.</warning>');
return 1;
}

$repos[] = $localRepo;

$platformOverrides = $composer->getConfig()->get('platform') ?: array();
$repos[] = new PlatformRepository([], $platformOverrides);
}

$installedRepo = new InstalledRepository($repos);

// Parse package name and constraint
list($needle, $textConstraint) = array_pad(
Expand Down
1 change: 1 addition & 0 deletions src/Composer/Command/DependsCommand.php
Expand Up @@ -39,6 +39,7 @@ protected function configure(): void
new InputArgument(self::ARGUMENT_PACKAGE, InputArgument::REQUIRED, 'Package to inspect', null, $this->suggestInstalledPackage(true)),
new InputOption(self::OPTION_RECURSIVE, 'r', InputOption::VALUE_NONE, 'Recursively resolves up to the root package'),
new InputOption(self::OPTION_TREE, 't', InputOption::VALUE_NONE, 'Prints the results as a nested tree'),
new InputOption('locked', null, InputOption::VALUE_NONE, 'Read dependency information from composer.lock'),
))
->setHelp(
<<<EOT
Expand Down
1 change: 1 addition & 0 deletions src/Composer/Command/ProhibitsCommand.php
Expand Up @@ -40,6 +40,7 @@ protected function configure(): void
new InputArgument(self::ARGUMENT_CONSTRAINT, InputArgument::REQUIRED, 'Version constraint, which version you expected to be installed'),
new InputOption(self::OPTION_RECURSIVE, 'r', InputOption::VALUE_NONE, 'Recursively resolves up to the root package'),
new InputOption(self::OPTION_TREE, 't', InputOption::VALUE_NONE, 'Prints the results as a nested tree'),
new InputOption('locked', null, InputOption::VALUE_NONE, 'Read dependency information from composer.lock'),
))
->setHelp(
<<<EOT
Expand Down

0 comments on commit d880ab6

Please sign in to comment.