Skip to content

Commit a02dd67

Browse files
committed
Create default_fetch_strategy configuration option
1 parent 2d8f115 commit a02dd67

6 files changed

Lines changed: 48 additions & 14 deletions

File tree

config/reference.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1649,7 +1649,8 @@
16491649
* dev_packages?: bool|Param, // Default: false
16501650
* },
16511651
* metadata?: array{
1652-
* mirror_vcs_repositories?: bool|Param, // Fetch mirrored packages from their VCS repositories by default when possible. // Default: false
1652+
* default_fetch_strategy?: value-of<\CodedMonkey\Dirigent\Entity\PackageFetchStrategy>|\CodedMonkey\Dirigent\Entity\PackageFetchStrategy|Param, // Available values are "mirror" (default, fetch from the mirror), "source" (fetch from the VCS source) and "vcs" (fetch complete VCS repository) // Default: "mirror"
1653+
* mirror_vcs_repositories?: bool|Param, // Deprecated: The node "mirror_vcs_repositories" at path "dirigent.metadata.mirror_vcs_repositories" is deprecated. Use the "default_fetch_strategy" option instead. // Fetch mirrored packages from their VCS repositories by default when possible. // Default: false
16531654
* retain_pruned_versions?: bool|array{
16541655
* enabled?: bool|Param, // Retain pruned package versions. // Default: true
16551656
* tagged_versions?: bool|Param, // Retain pruned tagged package versions. // Default: true

docs/configuration-reference.md

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ dirigent:
3434
preferred: true
3535
dev_packages: false
3636
metadata:
37-
mirror_vcs_repositories: false
37+
default_fetch_strategy: 'mirror'
3838
retain_pruned_versions:
3939
enabled: true
4040
tagged_versions: true
@@ -131,13 +131,22 @@ Whether to enable or disable distribution mirroring
131131

132132
## metadata
133133

134-
### mirror_vcs_repositories
134+
### default_fetch_strategy
135135

136-
Type: `boolean` | Default: `false`
136+
Type: `string` | Default: `mirror`
137137

138-
Fetch mirrored packages from their VCS repositories by default when possible.
138+
Configure the default fetch strategy for new packages:
139139

140-
Sets the fetch strategy of new mirrored packages to **Fetch from VCS**.
140+
**mirror** (Fetch from mirror)
141+
Always try to mirror package metadata from mirror registries when possible. Only metadata from the project's
142+
`composer.json` is available. If mirroring is not possible, it defaults to `source` instead.
143+
**source** (Fetch from source)
144+
Fetch the package metadata directly from the source, but it doesn't have to include VCS data. For example, when the
145+
package is hosted on GitHub the API is used instead, which saves on storage and bandwidth but limits the amount of
146+
metadata that's available.
147+
**vcs** (Fetch from VCS)
148+
Fetch the package metadata directly from the source through VCS. Package metadata is created directly from the
149+
source code.
141150

142151
### retain_pruned_versions
143152

src/Controller/ApiController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ public function __construct(
4343
private readonly MessageBusInterface $messenger,
4444
#[Autowire(param: 'dirigent.packages.dynamic_updates')]
4545
private readonly bool $dynamicUpdatesEnabled,
46-
#[Autowire(param: 'dirigent.metadata.mirror_vcs_repositories')]
47-
private readonly bool $mirrorVcsRepositories = false,
46+
#[Autowire(param: 'dirigent.metadata.default_fetch_strategy')]
47+
private readonly PackageFetchStrategy $defaultFetchStrategy,
4848
) {
4949
}
5050

@@ -187,7 +187,7 @@ private function findPackage(string $packageName, ?bool $create = false): ?Packa
187187
$package = new Package();
188188
$package->setName($packageName);
189189
$package->setMirrorRegistry($registry);
190-
$package->setFetchStrategy($this->mirrorVcsRepositories ? PackageFetchStrategy::Vcs : PackageFetchStrategy::Mirror);
190+
$package->setFetchStrategy($this->defaultFetchStrategy);
191191

192192
$this->packageRepository->save($package, true);
193193
}

src/Controller/Dashboard/DashboardPackagesController.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ public function __construct(
3232
private readonly PackageRepository $packageRepository,
3333
private readonly PackageMetadataResolver $metadataResolver,
3434
private readonly MessageBusInterface $messenger,
35-
#[Autowire(param: 'dirigent.metadata.mirror_vcs_repositories')]
36-
private readonly bool $mirrorVcsRepositories = false,
35+
#[Autowire(param: 'dirigent.metadata.default_fetch_strategy')]
36+
private readonly PackageFetchStrategy $defaultFetchStrategy,
3737
) {
3838
}
3939

@@ -111,7 +111,7 @@ public function addMirroring(Request $request): Response
111111
$package = new Package();
112112
$package->setName($packageName);
113113
$package->setMirrorRegistry($registry);
114-
$package->setFetchStrategy($this->mirrorVcsRepositories ? PackageFetchStrategy::Vcs : PackageFetchStrategy::Mirror);
114+
$package->setFetchStrategy($this->defaultFetchStrategy);
115115

116116
$this->packageRepository->save($package, true);
117117

@@ -149,6 +149,11 @@ public function addVcsRepository(Request $request): Response
149149
if ($form->isSubmitted() && $form->isValid()) {
150150
/** @var Package $package */
151151
$package = $form->getData();
152+
153+
// Mirroring is not possible for local packages
154+
$defaultFetchStrategy = $this->defaultFetchStrategy->isMirror() ? PackageFetchStrategy::Source : $this->defaultFetchStrategy;
155+
$package->setFetchStrategy($defaultFetchStrategy);
156+
152157
$this->packageRepository->save($package, true);
153158

154159
$this->messenger->dispatch(new UpdatePackage($package->getId(), PackageUpdateSource::Manual));

src/DependencyInjection/DirigentConfiguration.php

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

55
namespace CodedMonkey\Dirigent\DependencyInjection;
66

7+
use CodedMonkey\Dirigent\Entity\PackageFetchStrategy;
78
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
89
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
910
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
@@ -91,9 +92,19 @@ private function addMetadataSection(ArrayNodeDefinition|NodeDefinition $rootNode
9192
->arrayNode('metadata')
9293
->addDefaultsIfNotSet()
9394
->children()
95+
->enumNode('default_fetch_strategy')
96+
->enumFqcn(PackageFetchStrategy::class)
97+
->defaultValue(PackageFetchStrategy::Mirror)
98+
->info('Available values are "mirror" (default, fetch from the mirror), "source" (fetch from the VCS source) and "vcs" (fetch complete VCS repository)')
99+
->end()
94100
->booleanNode('mirror_vcs_repositories')
95101
->defaultFalse()
96102
->info('Fetch mirrored packages from their VCS repositories by default when possible.')
103+
->setDeprecated(
104+
package: 'codedmonkey/dirigent',
105+
version: '0.8.0',
106+
message: 'The node "%node%" at path "%path%" is deprecated. Use the "default_fetch_strategy" option instead.',
107+
)
97108
->end()
98109
->arrayNode('retain_pruned_versions')
99110
->canBeDisabled('Retain pruned package versions.')

src/DependencyInjection/DirigentExtension.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace CodedMonkey\Dirigent\DependencyInjection;
66

7+
use CodedMonkey\Dirigent\Entity\PackageFetchStrategy;
78
use Symfony\Component\Config\Definition\ConfigurationInterface;
89
use Symfony\Component\DependencyInjection\ContainerBuilder;
910
use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension;
@@ -58,11 +59,18 @@ private function registerEncryptionConfiguration(array $config, ContainerBuilder
5859
}
5960

6061
/**
61-
* @param array{mirror_vcs_repositories: bool, retain_stale_revisions: array{enabled: bool, tagged_versions: bool, dev_versions: bool}, retain_pruned_versions: array{enabled: bool, tagged_versions: bool, dev_versions: bool}} $config
62+
* @param array{default_fetch_strategy: PackageFetchStrategy, mirror_vcs_repositories: bool, retain_stale_revisions: array{enabled: bool, tagged_versions: bool, dev_versions: bool}, retain_pruned_versions: array{enabled: bool, tagged_versions: bool, dev_versions: bool}} $config
6263
*/
6364
private function registerMetadataConfiguration(array $config, ContainerBuilder $container): void
6465
{
65-
$container->setParameter('dirigent.metadata.mirror_vcs_repositories', $config['mirror_vcs_repositories']);
66+
$defaultFetchStrategy = $config['default_fetch_strategy'];
67+
$mirrorVcsRepositories = $config['mirror_vcs_repositories'];
68+
69+
if ($mirrorVcsRepositories && $defaultFetchStrategy->isMirror()) {
70+
$defaultFetchStrategy = PackageFetchStrategy::Source;
71+
}
72+
73+
$container->setParameter('dirigent.metadata.default_fetch_strategy', $defaultFetchStrategy);
6674

6775
$retainPrunedVersions = $config['retain_pruned_versions']['enabled'];
6876
$container->setParameter(

0 commit comments

Comments
 (0)