Skip to content

Commit f07c43e

Browse files
committed
Add mirror_vcs_repositories configuration option
1 parent ba93574 commit f07c43e

5 files changed

Lines changed: 37 additions & 9 deletions

File tree

phpstan.dist.neon

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,10 @@ parameters:
1010
excludePaths:
1111
- tests/bootstrap.php
1212
ignoreErrors:
13+
- '#^Call to an undefined method Symfony\\Component\\Config\\Definition\\Builder\\NodeDefinition\:\:children\(\)\.$#'
1314
- '#CodedMonkey\\Dirigent\\Doctrine\\Entity\\AbstractVersionLink given\.#'
1415
- '#^PHPDoc tag @var with type CodedMonkey\\Dirigent\\Doctrine\\Entity\\AbstractVersionLink is not subtype of native type#'
1516
- '#^Property CodedMonkey\\Dirigent\\Doctrine\\Entity\\[a-zA-Z]+\:\:\$id \(int\|null\) is never assigned int so it can be removed from the property type\.$#'
16-
-
17-
message: '#^Call to an undefined method Symfony\\Component\\Config\\Definition\\Builder\\NodeDefinition\:\:children\(\)\.$#'
18-
identifier: method.notFound
19-
count: 1
20-
path: src/DependencyInjection/DirigentConfiguration.php
2117
-
2218
message: '#^Left side of \|\| is always false\.$#'
2319
identifier: booleanOr.leftAlwaysFalse

src/Controller/ApiController.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use CodedMonkey\Dirigent\Package\PackageMetadataResolver;
1414
use CodedMonkey\Dirigent\Package\PackageProviderManager;
1515
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
16+
use Symfony\Component\DependencyInjection\Attribute\Autowire;
1617
use Symfony\Component\HttpFoundation\BinaryFileResponse;
1718
use Symfony\Component\HttpFoundation\JsonResponse;
1819
use Symfony\Component\HttpFoundation\Request;
@@ -33,6 +34,8 @@ public function __construct(
3334
private readonly PackageDistributionResolver $distributionResolver,
3435
private readonly PackageProviderManager $providerManager,
3536
private readonly MessageBusInterface $messenger,
37+
#[Autowire(param: 'dirigent.metadata.mirror_vcs_repositories')]
38+
private readonly bool $mirrorVcsRepositories = false,
3639
) {
3740
}
3841

@@ -170,7 +173,7 @@ private function findPackage(string $packageName): ?Package
170173
$package = new Package();
171174
$package->setName($packageName);
172175
$package->setMirrorRegistry($registry);
173-
$package->setFetchStrategy(PackageFetchStrategy::Mirror);
176+
$package->setFetchStrategy($this->mirrorVcsRepositories ? PackageFetchStrategy::Vcs : PackageFetchStrategy::Mirror);
174177

175178
$this->packageRepository->save($package, true);
176179

src/Controller/Dashboard/DashboardPackagesController.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use CodedMonkey\Dirigent\Package\PackageMetadataResolver;
1515
use Doctrine\ORM\EntityManagerInterface;
1616
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
17+
use Symfony\Component\DependencyInjection\Attribute\Autowire;
1718
use Symfony\Component\HttpFoundation\Request;
1819
use Symfony\Component\HttpFoundation\Response;
1920
use Symfony\Component\Messenger\MessageBusInterface;
@@ -27,6 +28,8 @@ public function __construct(
2728
private readonly PackageRepository $packageRepository,
2829
private readonly PackageMetadataResolver $metadataResolver,
2930
private readonly MessageBusInterface $messenger,
31+
#[Autowire(param: 'dirigent.metadata.mirror_vcs_repositories')]
32+
private readonly bool $mirrorVcsRepositories = false,
3033
) {
3134
}
3235

@@ -104,7 +107,7 @@ public function addMirroring(Request $request): Response
104107
$package = new Package();
105108
$package->setName($packageName);
106109
$package->setMirrorRegistry($registry);
107-
$package->setFetchStrategy(PackageFetchStrategy::Mirror);
110+
$package->setFetchStrategy($this->mirrorVcsRepositories ? PackageFetchStrategy::Vcs : PackageFetchStrategy::Mirror);
108111

109112
$this->packageRepository->save($package, true);
110113

src/DependencyInjection/DirigentConfiguration.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace CodedMonkey\Dirigent\DependencyInjection;
44

5+
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
6+
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
57
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
68
use Symfony\Component\Config\Definition\ConfigurationInterface;
79
use function Symfony\Component\String\u;
@@ -84,6 +86,22 @@ public function getConfigTreeBuilder(): TreeBuilder
8486
->end()
8587
->end();
8688

89+
$this->addMetadataSection($rootNode);
90+
8791
return $treeBuilder;
8892
}
93+
94+
private function addMetadataSection(ArrayNodeDefinition|NodeDefinition $rootNode): void
95+
{
96+
$rootNode->children()
97+
->arrayNode('metadata')
98+
->addDefaultsIfNotSet()
99+
->children()
100+
->booleanNode('mirror_vcs_repositories')
101+
->defaultFalse()
102+
->info('Fetch mirrored packages from their VCS repositories by default when possible.')
103+
->end()
104+
->end()
105+
->end();
106+
}
89107
}

src/DependencyInjection/DirigentExtension.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ class DirigentExtension extends ConfigurableExtension
1212
protected function loadInternal(array $mergedConfig, ContainerBuilder $container): void
1313
{
1414
if (null === $slug = $mergedConfig['slug']) {
15-
$slug = (new AsciiSlugger())->slug($mergedConfig['title']);
16-
$slug = strtolower($slug);
15+
$slug = (new AsciiSlugger())->slug($mergedConfig['title'])->lower();
1716
}
1817

1918
$container->setParameter('dirigent.title', $mergedConfig['title']);
2019
$container->setParameter('dirigent.slug', $slug);
2120

2221
$this->registerEncryptionConfiguration($mergedConfig['encryption'], $container);
22+
$this->registerMetadataConfiguration($mergedConfig['metadata'], $container);
2323

2424
$container->setParameter('dirigent.security.public_access', $mergedConfig['security']['public']);
2525
$container->setParameter('dirigent.security.registration_enabled', $mergedConfig['security']['registration']);
@@ -58,4 +58,12 @@ private function registerEncryptionConfiguration(array $config, ContainerBuilder
5858
$container->setParameter('dirigent.encryption.public_key_path', $config['public_key_path']);
5959
$container->setParameter('dirigent.encryption.rotated_key_paths', $config['rotated_key_paths']);
6060
}
61+
62+
/**
63+
* @param array{mirror_vcs_repositories: bool} $config
64+
*/
65+
private function registerMetadataConfiguration(array $config, ContainerBuilder $container): void
66+
{
67+
$container->setParameter('dirigent.metadata.mirror_vcs_repositories', $config['mirror_vcs_repositories']);
68+
}
6169
}

0 commit comments

Comments
 (0)