diff --git a/src/Composer/Command/BaseDependencyCommand.php b/src/Composer/Command/BaseDependencyCommand.php index 2d4dea40feda..e87a183313ed 100644 --- a/src/Composer/Command/BaseDependencyCommand.php +++ b/src/Composer/Command/BaseDependencyCommand.php @@ -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('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); + } + + $installedRepo = new InstalledRepository($repos); // Parse package name and constraint list($needle, $textConstraint) = array_pad( 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( <<