Skip to content

Commit e38ee9c

Browse files
committed
Add resolve distribution strategy field to Package entity
1 parent c42b202 commit e38ee9c

5 files changed

Lines changed: 114 additions & 0 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace DoctrineMigrations;
6+
7+
use Doctrine\DBAL\Schema\Schema;
8+
use Doctrine\Migrations\AbstractMigration;
9+
10+
final class Version20260616143154 extends AbstractMigration
11+
{
12+
public function getDescription(): string
13+
{
14+
return 'Add package distribution strategy';
15+
}
16+
17+
public function up(Schema $schema): void
18+
{
19+
$this->addSql(<<<'SQL'
20+
ALTER TABLE package ADD resolve_distribution_strategy VARCHAR(255) DEFAULT NULL
21+
SQL);
22+
$this->addSql(<<<'SQL'
23+
UPDATE package SET resolve_distribution_strategy = 'dynamic'
24+
SQL);
25+
$this->addSql(<<<'SQL'
26+
ALTER TABLE package ALTER resolve_distribution_strategy TYPE VARCHAR(255)
27+
SQL);
28+
$this->addSql(<<<'SQL'
29+
ALTER TABLE package ALTER resolve_distribution_strategy SET NOT NULL
30+
SQL);
31+
}
32+
33+
public function down(Schema $schema): void
34+
{
35+
$this->addSql(<<<'SQL'
36+
ALTER TABLE package DROP resolve_distribution_strategy
37+
SQL);
38+
}
39+
}

src/Doctrine/Entity/Package.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use CodedMonkey\Dirigent\Doctrine\Repository\PackageRepository;
88
use CodedMonkey\Dirigent\Entity\PackageFetchStrategy;
9+
use CodedMonkey\Dirigent\Entity\ResolveDistributionStrategy;
910
use CodedMonkey\Dirigent\Package\PackageMetadataResolver;
1011
use CodedMonkey\Dirigent\Validator\UniquePackage;
1112
use Composer\Package\Version\VersionParser;
@@ -68,6 +69,9 @@ class Package extends TrackedEntity
6869
#[ORM\Column(nullable: true, enumType: PackageFetchStrategy::class)]
6970
private ?PackageFetchStrategy $fetchStrategy = null;
7071

72+
#[ORM\Column(enumType: ResolveDistributionStrategy::class)]
73+
private ResolveDistributionStrategy $resolveDistributionStrategy = ResolveDistributionStrategy::Dynamic;
74+
7175
#[ORM\ManyToOne]
7276
private ?Registry $mirrorRegistry = null;
7377

@@ -248,6 +252,16 @@ public function setFetchStrategy(PackageFetchStrategy $fetchStrategy): void
248252
$this->fetchStrategy = $fetchStrategy;
249253
}
250254

255+
public function getResolveDistributionStrategy(): ResolveDistributionStrategy
256+
{
257+
return $this->resolveDistributionStrategy;
258+
}
259+
260+
public function setResolveDistributionStrategy(ResolveDistributionStrategy $resolveDistributionStrategy): void
261+
{
262+
$this->resolveDistributionStrategy = $resolveDistributionStrategy;
263+
}
264+
251265
public function getMirrorRegistry(): ?Registry
252266
{
253267
return $this->mirrorRegistry;
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace CodedMonkey\Dirigent\Entity;
6+
7+
use Symfony\Contracts\Translation\TranslatableInterface;
8+
use Symfony\Contracts\Translation\TranslatorInterface;
9+
10+
enum ResolveDistributionStrategy: string implements TranslatableInterface
11+
{
12+
case Disabled = 'none';
13+
case Dynamic = 'dynamic';
14+
case Automatic = 'auto';
15+
16+
public function isDisabled(): bool
17+
{
18+
return self::Disabled === $this;
19+
}
20+
21+
public function isDynamic(): bool
22+
{
23+
return self::Dynamic === $this;
24+
}
25+
26+
public function isAutomatic(): bool
27+
{
28+
return self::Automatic === $this;
29+
}
30+
31+
/**
32+
* Whether the strategy allows dynamic updates.
33+
*
34+
* Only the disabled strategy doesn't allow this.
35+
*/
36+
public function allowDynamic(): bool
37+
{
38+
return !$this->isDisabled();
39+
}
40+
41+
public function trans(TranslatorInterface $translator, ?string $locale = null): string
42+
{
43+
return $translator->trans("package.resolve-distribution-strategy.$this->value");
44+
}
45+
}

src/Form/PackageFormType.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
use CodedMonkey\Dirigent\Doctrine\Entity\Registry;
1010
use CodedMonkey\Dirigent\Doctrine\Repository\RegistryRepository;
1111
use CodedMonkey\Dirigent\Entity\PackageFetchStrategy;
12+
use CodedMonkey\Dirigent\Entity\ResolveDistributionStrategy;
1213
use CodedMonkey\Dirigent\Package\PackageVcsRepositoryValidator;
1314
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
15+
use Symfony\Component\DependencyInjection\Attribute\Autowire;
1416
use Symfony\Component\Form\AbstractType;
1517
use Symfony\Component\Form\Event\PostSetDataEvent;
1618
use Symfony\Component\Form\Event\SubmitEvent;
@@ -25,6 +27,8 @@ class PackageFormType extends AbstractType
2527
{
2628
public function __construct(
2729
private readonly PackageVcsRepositoryValidator $vcsRepositoryValidator,
30+
#[Autowire(param: 'dirigent.distributions.enabled')]
31+
private readonly bool $distributionsEnabled,
2832
) {
2933
}
3034

@@ -48,6 +52,14 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
4852
])
4953
->addEventListener(FormEvents::POST_SET_DATA, $this->onPostSetData(...))
5054
->addEventListener(FormEvents::SUBMIT, $this->onSubmit(...));
55+
56+
if ($this->distributionsEnabled) {
57+
$builder->add('resolveDistributionStrategy', EnumType::class, [
58+
'label' => 'Resolve distributions',
59+
'class' => ResolveDistributionStrategy::class,
60+
'expanded' => true,
61+
]);
62+
}
5163
}
5264

5365
public function onPostSetData(PostSetDataEvent $event): void

translations/messages.en.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ package:
118118
fetch-strategy:
119119
mirror: Fetch from registry
120120
vcs: Fetch from VCS
121+
resolve-distribution-strategy:
122+
auto: Resolve all distributions
123+
dynamic: Resolve distributions on request
124+
none: Never resolve distributions
121125
registry:
122126
package-mirroring:
123127
none: Package mirroring disabled

0 commit comments

Comments
 (0)