From 3d3854b15d387b9b82b8a274bb9f93b385bc08f3 Mon Sep 17 00:00:00 2001 From: Dan Wallis Date: Thu, 9 Jun 2022 21:36:19 +0100 Subject: [PATCH 1/4] Allow use of --locked with depends and prohibits --- .../Command/BaseDependencyCommand.php | 30 +++++++++++++++---- src/Composer/Command/DependsCommand.php | 1 + src/Composer/Command/ProhibitsCommand.php | 1 + 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/Composer/Command/BaseDependencyCommand.php b/src/Composer/Command/BaseDependencyCommand.php index 2d4dea40feda..e07f3c3e148f 100644 --- a/src/Composer/Command/BaseDependencyCommand.php +++ b/src/Composer/Command/BaseDependencyCommand.php @@ -58,12 +58,26 @@ protected function doExecute(InputInterface $input, OutputInterface $output, boo $commandEvent = new CommandEvent(PluginEvents::COMMAND, $this->getName(), $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); + $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[] = $localRepo = $composer->getRepositoryManager()->getLocalRepository(); + $platformOverrides = $composer->getConfig()->get('platform') ?: array(); - $installedRepo = new InstalledRepository(array( - new RootPackageRepository($composer->getPackage()), - $composer->getRepositoryManager()->getLocalRepository(), - new PlatformRepository(array(), $platformOverrides), - )); + $repos[] = new PlatformRepository([], $platformOverrides); + + $installedRepo = new InstalledRepository($repos); // Parse package name and constraint list($needle, $textConstraint) = array_pad( @@ -72,6 +86,12 @@ protected function doExecute(InputInterface $input, OutputInterface $output, boo $input->hasArgument(self::ARGUMENT_CONSTRAINT) ? $input->getArgument(self::ARGUMENT_CONSTRAINT) : '*' ); + $rootPkg = $composer->getPackage(); + if (!$input->getOption('locked') && count($localRepo->getPackages()) === 0 && (count($rootPkg->getRequires()) > 0 || count($rootPkg->getDevRequires()) > 0)) { + $output->writeln('No dependencies installed. Try running composer install or update, or use --locked.'); + return 1; + } + // Find packages that are or provide the requested package first $packages = $installedRepo->findPackagesWithReplacersAndProviders($needle); if (empty($packages)) { diff --git a/src/Composer/Command/DependsCommand.php b/src/Composer/Command/DependsCommand.php index 1b353807aad4..de912add93c4 100644 --- a/src/Composer/Command/DependsCommand.php +++ b/src/Composer/Command/DependsCommand.php @@ -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( <<setHelp( << Date: Fri, 10 Jun 2022 19:54:00 +0100 Subject: [PATCH 2/4] Only include other repos if not --locked --- src/Composer/Command/BaseDependencyCommand.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Composer/Command/BaseDependencyCommand.php b/src/Composer/Command/BaseDependencyCommand.php index e07f3c3e148f..859df81b755c 100644 --- a/src/Composer/Command/BaseDependencyCommand.php +++ b/src/Composer/Command/BaseDependencyCommand.php @@ -70,12 +70,12 @@ protected function doExecute(InputInterface $input, OutputInterface $output, boo } $repos[] = $locker->getLockedRepository(true); - } - - $repos[] = $localRepo = $composer->getRepositoryManager()->getLocalRepository(); + } else { + $repos[] = $localRepo = $composer->getRepositoryManager()->getLocalRepository(); - $platformOverrides = $composer->getConfig()->get('platform') ?: array(); - $repos[] = new PlatformRepository([], $platformOverrides); + $platformOverrides = $composer->getConfig()->get('platform') ?: array(); + $repos[] = new PlatformRepository([], $platformOverrides); + } $installedRepo = new InstalledRepository($repos); From 154acf4fd9c9ed5885f32cd6ec1e838a2bd2b13a Mon Sep 17 00:00:00 2001 From: Dan Wallis Date: Fri, 10 Jun 2022 21:53:35 +0100 Subject: [PATCH 3/4] Move logic to appease PHPStan --- src/Composer/Command/BaseDependencyCommand.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Composer/Command/BaseDependencyCommand.php b/src/Composer/Command/BaseDependencyCommand.php index 859df81b755c..c9b599a6721d 100644 --- a/src/Composer/Command/BaseDependencyCommand.php +++ b/src/Composer/Command/BaseDependencyCommand.php @@ -71,7 +71,15 @@ protected function doExecute(InputInterface $input, OutputInterface $output, boo $repos[] = $locker->getLockedRepository(true); } else { - $repos[] = $localRepo = $composer->getRepositoryManager()->getLocalRepository(); + $localRepo = $composer->getRepositoryManager()->getLocalRepository(); + $rootPkg = $composer->getPackage(); + + if (count($localRepo->getPackages()) === 0 && (count($rootPkg->getRequires()) > 0 || count($rootPkg->getDevRequires()) > 0)) { + $output->writeln('No dependencies installed. Try running composer install or update, or use --locked.'); + return 1; + } + + $repos[] = $localRepo; $platformOverrides = $composer->getConfig()->get('platform') ?: array(); $repos[] = new PlatformRepository([], $platformOverrides); @@ -86,12 +94,6 @@ protected function doExecute(InputInterface $input, OutputInterface $output, boo $input->hasArgument(self::ARGUMENT_CONSTRAINT) ? $input->getArgument(self::ARGUMENT_CONSTRAINT) : '*' ); - $rootPkg = $composer->getPackage(); - if (!$input->getOption('locked') && count($localRepo->getPackages()) === 0 && (count($rootPkg->getRequires()) > 0 || count($rootPkg->getDevRequires()) > 0)) { - $output->writeln('No dependencies installed. Try running composer install or update, or use --locked.'); - return 1; - } - // Find packages that are or provide the requested package first $packages = $installedRepo->findPackagesWithReplacersAndProviders($needle); if (empty($packages)) { From 808a7d4ae10b84a851c781d31e42c75697d47b8c Mon Sep 17 00:00:00 2001 From: Dan Wallis Date: Sat, 25 Jun 2022 09:53:13 +0100 Subject: [PATCH 4/4] Load a PlatformRepository when reading lock file --- src/Composer/Command/BaseDependencyCommand.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Composer/Command/BaseDependencyCommand.php b/src/Composer/Command/BaseDependencyCommand.php index c9b599a6721d..e87a183313ed 100644 --- a/src/Composer/Command/BaseDependencyCommand.php +++ b/src/Composer/Command/BaseDependencyCommand.php @@ -70,6 +70,7 @@ protected function doExecute(InputInterface $input, OutputInterface $output, boo } $repos[] = $locker->getLockedRepository(true); + $repos[] = new PlatformRepository([], $locker->getPlatformOverrides()); } else { $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $rootPkg = $composer->getPackage();