Skip to content

Commit

Permalink
Add support for combining show --self with --installed or --locked (c…
Browse files Browse the repository at this point in the history
  • Loading branch information
Seldaek authored and theoboldalex committed Jan 10, 2024
1 parent 2fc65d1 commit 719c4ea
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 5 deletions.
19 changes: 14 additions & 5 deletions src/Composer/Command/ShowCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
use Composer\Pcre\Preg;
use Composer\Plugin\CommandEvent;
use Composer\Plugin\PluginEvents;
use Composer\Repository\ArrayRepository;
use Composer\Repository\InstalledArrayRepository;
use Composer\Repository\ComposerRepository;
use Composer\Repository\CompositeRepository;
Expand Down Expand Up @@ -142,7 +143,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$composer = $this->tryComposer();
$io = $this->getIO();

if ($input->getOption('installed')) {
if ($input->getOption('installed') && !$input->getOption('self')) {
$io->writeError('<warning>You are using the deprecated option "installed". Only installed packages are shown by default now. The --all option can be used to show all packages.</warning>');
}

Expand Down Expand Up @@ -199,7 +200,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$platformRepo = new PlatformRepository([], $platformOverrides);
$lockedRepo = null;

if ($input->getOption('self')) {
if ($input->getOption('self') && !$input->getOption('installed') && !$input->getOption('locked')) {
$package = clone $this->requireComposer()->getPackage();
if ($input->getOption('name-only')) {
$io->write($package->getName());
Expand Down Expand Up @@ -243,20 +244,28 @@ protected function execute(InputInterface $input, OutputInterface $output): int
}
$locker = $composer->getLocker();
$lockedRepo = $locker->getLockedRepository(!$input->getOption('no-dev'));
if ($input->getOption('self')) {
$lockedRepo->addPackage(clone $composer->getPackage());
}
$repos = $installedRepo = new InstalledRepository([$lockedRepo]);
} else {
// --installed / default case
if (!$composer) {
$composer = $this->requireComposer();
}
$rootPkg = $composer->getPackage();
$repos = $installedRepo = new InstalledRepository([$composer->getRepositoryManager()->getLocalRepository()]);

$rootRepo = new InstalledArrayRepository();
if ($input->getOption('self')) {
$rootRepo = new RootPackageRepository(clone $rootPkg);
}
if ($input->getOption('no-dev')) {
$packages = RepositoryUtils::filterRequiredPackages($installedRepo->getPackages(), $rootPkg);
$repos = $installedRepo = new InstalledRepository([new InstalledArrayRepository(array_map(static function ($pkg): PackageInterface {
$packages = RepositoryUtils::filterRequiredPackages($composer->getRepositoryManager()->getLocalRepository()->getPackages(), $rootPkg);
$repos = $installedRepo = new InstalledRepository([$rootRepo, new InstalledArrayRepository(array_map(static function ($pkg): PackageInterface {
return clone $pkg;
}, $packages))]);
} else {
$repos = $installedRepo = new InstalledRepository([$rootRepo, $composer->getRepositoryManager()->getLocalRepository()]);
}

if (!$installedRepo->getPackages()) {
Expand Down
23 changes: 23 additions & 0 deletions tests/Composer/Test/Command/ShowCommandTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ class ShowCommandTest extends TestCase
public function testShow(array $command, string $expected, array $requires = []): void
{
$this->initTempComposer([
'name' => 'root/pkg',
'version' => '1.2.3',
'repositories' => [
'packages' => [
'type' => 'package',
Expand Down Expand Up @@ -65,6 +67,12 @@ public function testShow(array $command, string $expected, array $requires = [])

$this->createInstalledJson([$pkg, $major, $minor, $patch]);

$pkg = self::getPackage('vendor/locked', '3.0.0');
$pkg->setDescription('description of locked package');
$this->createComposerLock([
$pkg,
]);

$appTester = $this->getApplicationTester();
$appTester->run(array_merge(['command' => 'show'], $command));
self::assertSame(trim($expected), trim($appTester->getDisplay(true)));
Expand All @@ -80,6 +88,21 @@ public static function provideShow(): \Generator
vendor/package 1.0.0 description of installed package',
];

yield 'with -s and --installed shows list of installed + self package' => [
['--installed' => true, '--self' => true],
'outdated/major 1.0.0
outdated/minor 1.0.0
outdated/patch 1.0.0
root/pkg 1.2.3
vendor/package 1.0.0 description of installed package',
];

yield 'with -s and --locked shows list of installed + self package' => [
['--locked' => true, '--self' => true],
'root/pkg 1.2.3
vendor/locked 3.0.0 description of locked package',
];

yield 'with -a show available packages with description but no version' => [
['-a' => true],
'outdated/major outdated/major v2.0.0 description
Expand Down

0 comments on commit 719c4ea

Please sign in to comment.