Skip to content

Commit a98fd2a

Browse files
committed
TEMP locked pacakges
Signed-off-by: Tim Goudriaan <tim@codedmonkey.com>
1 parent 6108ed6 commit a98fd2a

3 files changed

Lines changed: 86 additions & 0 deletions

File tree

src/Composer/ComposerClient.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,24 @@
44

55
use CodedMonkey\Dirigent\Doctrine\Entity\Package;
66
use CodedMonkey\Dirigent\Doctrine\Entity\Registry;
7+
use Composer\Composer;
78
use Composer\Config;
89
use Composer\Factory;
910
use Composer\IO\IOInterface;
1011
use Composer\IO\NullIO;
1112
use Composer\Repository\ComposerRepository;
1213
use Composer\Repository\VcsRepository;
1314
use Composer\Util\HttpDownloader;
15+
use Composer\Util\Loop;
16+
use Composer\Util\ProcessExecutor;
1417

1518
class ComposerClient
1619
{
20+
public function getComposer(): Composer
21+
{
22+
23+
}
24+
1725
public function createComposerRepository(Package|Registry $registry, ?IOInterface $io = null, ?Config $config = null): ComposerRepository
1826
{
1927
$registry = $registry instanceof Package ? $registry->getMirrorRegistry() : $registry;
@@ -25,6 +33,9 @@ public function createComposerRepository(Package|Registry $registry, ?IOInterfac
2533
}
2634
$httpDownloader = $this->createHttpDownloader($io, $config);
2735

36+
$process = new ProcessExecutor($io);
37+
$loop = new Loop($httpDownloader, $process);
38+
2839
return new ComposerRepository(['url' => $registry->getUrl()], $io, $config, $httpDownloader);
2940
}
3041

src/Composer/InMemoryJsonFile.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
/*
4+
* © CleverMobi
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace CodedMonkey\Dirigent\Composer;
10+
11+
use Composer\Json\JsonFile;
12+
13+
class InMemoryJsonFile extends JsonFile
14+
{
15+
public function __construct(
16+
private readonly string $contents,
17+
) {
18+
parent::__construct('in-memory');
19+
}
20+
21+
public function exists(): bool
22+
{
23+
return true;
24+
}
25+
26+
public function read(): array
27+
{
28+
return static::parseJson($this->contents, 'in-memory');
29+
}
30+
31+
public function write(array $hash, int $options = JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)
32+
{
33+
throw new \LogicException();
34+
}
35+
}

src/Package/PackageMetadataResolver.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
use cebe\markdown\GithubMarkdown;
66
use CodedMonkey\Dirigent\Composer\ComposerClient;
7+
use CodedMonkey\Dirigent\Composer\ConfigFactory;
8+
use CodedMonkey\Dirigent\Composer\InMemoryJsonFile;
79
use CodedMonkey\Dirigent\Doctrine\Entity\AbstractVersionLink;
810
use CodedMonkey\Dirigent\Doctrine\Entity\Package;
911
use CodedMonkey\Dirigent\Doctrine\Entity\PackageFetchStrategy;
@@ -21,10 +23,15 @@
2123
use CodedMonkey\Dirigent\Doctrine\Repository\VersionRepository;
2224
use CodedMonkey\Dirigent\Message\DumpPackageProvider;
2325
use CodedMonkey\Dirigent\Message\UpdatePackageLinks;
26+
use Composer\Installer\InstallationManager;
27+
use Composer\IO\NullIO;
2428
use Composer\Package\AliasPackage;
2529
use Composer\Package\CompletePackageInterface;
30+
use Composer\Package\Locker;
2631
use Composer\Pcre\Preg;
2732
use Composer\Repository\Vcs\VcsDriverInterface;
33+
use Composer\Util\Loop;
34+
use Composer\Util\ProcessExecutor;
2835
use Doctrine\ORM\EntityManagerInterface;
2936
use Symfony\Component\Messenger\Envelope;
3037
use Symfony\Component\Messenger\MessageBusInterface;
@@ -120,6 +127,8 @@ private function resolveRegistryPackage(Package $package, ?Registry $registry =
120127
/** @var CompletePackageInterface[] $composerPackages */
121128
$composerPackages = $repository->findPackages($packageName);
122129

130+
dd($composerPackages);
131+
123132
$this->updatePackage($package, $composerPackages);
124133
}
125134

@@ -156,6 +165,10 @@ private function resolveVcsPackage(Package $package): void
156165
/** @var CompletePackageInterface[] $composerPackages */
157166
$composerPackages = $repository->findPackages($packageName);
158167

168+
dump($repository);
169+
dump($composerPackages[0]);
170+
//dd($composerPackages);
171+
159172
$this->updatePackage($package, $composerPackages, $driver);
160173
}
161174

@@ -213,6 +226,8 @@ private function updatePackage(Package $package, array $composerPackages, ?VcsDr
213226
$package->setRepositoryUrl($primaryVersion->getSourceUrl());
214227
}
215228

229+
$this->updateInstalledPackages($primaryVersion, $driver);
230+
216231
$message = Envelope::wrap(new UpdatePackageLinks($package->getId(), $primaryVersion->getNormalizedVersion()))
217232
->with(new DispatchAfterCurrentBusStamp())
218233
->with(new TransportNamesStamp('async'));
@@ -431,6 +446,31 @@ private function sanitize(?string $str): ?string
431446
return Preg::replace("{[\x01-\x1A]}u", '', $str);
432447
}
433448

449+
private function updateInstalledPackages(Version $version, VcsDriverInterface $driver): void
450+
{
451+
$source = $driver->getFileContent('composer.lock', $version->getSource()['reference']);
452+
453+
if (empty($source)) {
454+
return;
455+
}
456+
457+
$jsonFile = new InMemoryJsonFile($source);
458+
459+
$config = ConfigFactory::createForVcsRepository($version->getPackage()->getRepositoryUrl(), $version->getPackage()->getRepositoryCredentials());
460+
$io = new NullIO();
461+
$io->loadConfiguration($config);
462+
$process = new ProcessExecutor($io);
463+
$httpDownloader = $this->composer->createHttpDownloader($io, $config);
464+
$loop = new Loop($httpDownloader, $process);
465+
466+
467+
$locker = new Locker($io, $jsonFile, new InstallationManager($loop, $io), $driver->getFileContent('composer.json', $version->getSource()['reference']));
468+
469+
dump($locker->getLockedRepository());
470+
dump($source);
471+
dd();
472+
}
473+
434474
private function updateReadme(Version $version, VcsDriverInterface $driver): void
435475
{
436476
try {

0 commit comments

Comments
 (0)