Skip to content

Commit fce1eeb

Browse files
authored
Merge pull request #50705 from aloubyansky/registry-config-complete-quarkus-versions
Make sure local quarkus-versions config are effective when the default registry provides its own
2 parents 9fb9d6c + 3e5118e commit fce1eeb

File tree

4 files changed

+123
-38
lines changed

4 files changed

+123
-38
lines changed

independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/RegistryExtensionResolver.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ private static String getConfiguredOfferingOrNull(RegistryConfig config) {
6363
*/
6464
private final String offeringSupportKey;
6565

66-
RegistryExtensionResolver(RegistryClient extensionResolver, MessageWriter log) throws RegistryResolutionException {
67-
this.extensionResolver = Objects.requireNonNull(extensionResolver, "Registry extension resolver is null");
68-
this.config = extensionResolver.resolveRegistryConfig();
66+
RegistryExtensionResolver(RegistryClient registryClient, MessageWriter log) throws RegistryResolutionException {
67+
this.extensionResolver = Objects.requireNonNull(registryClient, "Registry extension resolver is null");
68+
this.config = registryClient.resolveRegistryConfig();
6969

7070
final String versionExpr = config.getQuarkusVersions() == null ? null
7171
: config.getQuarkusVersions().getRecognizedVersionsExpression();

independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/client/maven/MavenRegistryClientFactory.java

Lines changed: 60 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import io.quarkus.registry.config.RegistryMavenRepoConfig;
4141
import io.quarkus.registry.config.RegistryNonPlatformExtensionsConfig;
4242
import io.quarkus.registry.config.RegistryPlatformsConfig;
43+
import io.quarkus.registry.config.RegistryQuarkusVersionsConfig;
4344

4445
public class MavenRegistryClientFactory implements RegistryClientFactory {
4546

@@ -185,57 +186,88 @@ private static MavenRegistryArtifactResolver defaultResolver(MavenArtifactResolv
185186
return new MavenRegistryArtifactResolverWithCleanup(resolver, cleanupTimestampedArtifacts);
186187
}
187188

188-
static RegistryConfig.Mutable completeRegistryConfig(RegistryConfig original, RegistryConfig descriptor) {
189+
/**
190+
* Merges remote and local registry client configurations, prioritizing the local configuration values.
191+
*
192+
* @param local local client configuration
193+
* @param remote default configuration provided by the registry itself
194+
* @return complete registry client configuration
195+
*/
196+
static RegistryConfig.Mutable completeRegistryConfig(RegistryConfig local, RegistryConfig remote) {
189197
RegistryConfig.Mutable complete = RegistryConfig.builder();
190198

191-
complete.setId(original.getId() == null ? descriptor.getId() : original.getId());
199+
complete.setId(local.getId() == null ? remote.getId() : local.getId());
192200

193-
if (original.getDescriptor() == null) {
194-
complete.setDescriptor(descriptor.getDescriptor());
201+
if (local.getDescriptor() == null) {
202+
complete.setDescriptor(remote.getDescriptor());
195203
} else {
196-
complete.setDescriptor(original.getDescriptor());
204+
complete.setDescriptor(local.getDescriptor());
197205
}
198-
if (original.getPlatforms() == null) {
199-
complete.setPlatforms(descriptor.getPlatforms());
206+
if (local.getPlatforms() == null) {
207+
complete.setPlatforms(remote.getPlatforms());
200208
} else {
201-
complete.setPlatforms(completeRegistryPlatformConfig(original.getPlatforms(), descriptor.getPlatforms()));
209+
complete.setPlatforms(completeRegistryPlatformConfig(local.getPlatforms(), remote.getPlatforms()));
202210
}
203-
if (original.getNonPlatformExtensions() == null) {
204-
complete.setNonPlatformExtensions(descriptor.getNonPlatformExtensions());
211+
if (local.getNonPlatformExtensions() == null) {
212+
complete.setNonPlatformExtensions(remote.getNonPlatformExtensions());
205213
} else {
206-
complete.setNonPlatformExtensions(original.getNonPlatformExtensions());
214+
complete.setNonPlatformExtensions(local.getNonPlatformExtensions());
207215
}
208-
if (original.getUpdatePolicy() == null) {
209-
complete.setUpdatePolicy(descriptor.getUpdatePolicy());
216+
if (local.getUpdatePolicy() == null) {
217+
complete.setUpdatePolicy(remote.getUpdatePolicy());
210218
} else {
211-
complete.setUpdatePolicy(original.getUpdatePolicy());
219+
complete.setUpdatePolicy(local.getUpdatePolicy());
212220
}
213221

214-
if (original.getMaven() == null) {
215-
complete.setMaven(descriptor.getMaven());
216-
} else if (isComplete(original.getMaven())) {
217-
complete.setMaven(original.getMaven());
222+
if (local.getMaven() == null) {
223+
complete.setMaven(remote.getMaven());
224+
} else if (isComplete(local.getMaven())) {
225+
complete.setMaven(local.getMaven());
218226
} else {
219227
complete.setMaven(RegistryMavenConfig.builder()
220-
.setRepository(completeMavenRepoConfig(original.getMaven(), descriptor.getMaven())));
228+
.setRepository(completeMavenRepoConfig(local.getMaven(), remote.getMaven())));
221229
}
222230

223-
if (original.getQuarkusVersions() == null) {
224-
complete.setQuarkusVersions(descriptor.getQuarkusVersions());
225-
}
231+
complete.setQuarkusVersions(complete(local.getQuarkusVersions(), remote.getQuarkusVersions()));
226232

227-
if (original.getExtra().isEmpty()) {
228-
complete.setExtra(descriptor.getExtra());
229-
} else if (descriptor.getExtra().isEmpty()) {
230-
complete.setExtra(original.getExtra());
233+
if (local.getExtra().isEmpty()) {
234+
complete.setExtra(remote.getExtra());
235+
} else if (remote.getExtra().isEmpty()) {
236+
complete.setExtra(local.getExtra());
231237
} else {
232-
var extra = new HashMap<>(descriptor.getExtra());
233-
extra.putAll(original.getExtra());
238+
var extra = new HashMap<>(remote.getExtra());
239+
extra.putAll(local.getExtra());
234240
complete.setExtra(extra);
235241
}
236242
return complete;
237243
}
238244

245+
/**
246+
* Merges remote and local registry Quarkus versions configuration, prioritizing the local configuration values.
247+
*
248+
* @param local local configuration
249+
* @param remote default configuration provided by the registry
250+
* @return final configuration
251+
*/
252+
private static RegistryQuarkusVersionsConfig complete(RegistryQuarkusVersionsConfig local,
253+
RegistryQuarkusVersionsConfig remote) {
254+
if (local == null) {
255+
return remote;
256+
}
257+
if (remote == null || local.equals(remote)) {
258+
return local;
259+
}
260+
var complete = RegistryQuarkusVersionsConfig.builder();
261+
complete.setExclusiveProvider(local.isExclusiveProvider() || remote.isExclusiveProvider());
262+
complete.setRecognizedGroupIds(local.getRecognizedGroupIds().isEmpty()
263+
? remote.getRecognizedGroupIds()
264+
: local.getRecognizedGroupIds());
265+
complete.setRecognizedVersionsExpression(local.getRecognizedVersionsExpression() == null
266+
? remote.getRecognizedVersionsExpression()
267+
: local.getRecognizedVersionsExpression());
268+
return complete;
269+
}
270+
239271
private static RegistryPlatformsConfig completeRegistryPlatformConfig(RegistryPlatformsConfig client,
240272
RegistryPlatformsConfig descriptor) {
241273
if (client == null) {

independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/config/RegistryQuarkusVersionsConfigImpl.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ public boolean equals(Object o) {
5656

5757
@Override
5858
public int hashCode() {
59-
return Objects.hash(exclusiveProvider, recognizedVersionsExpression);
59+
int result = Objects.hashCode(recognizedVersionsExpression);
60+
result = 31 * result + Objects.hashCode(recognizedGroupIds);
61+
result = 31 * result + Boolean.hashCode(exclusiveProvider);
62+
return result;
6063
}
6164

6265
@Override
@@ -142,19 +145,25 @@ public String toString() {
142145
}
143146

144147
static boolean quarkusVersionConfigEquals(RegistryQuarkusVersionsConfig v, Object o) {
145-
if (v == o)
148+
if (v == o) {
146149
return true;
147-
if (!(o instanceof RegistryQuarkusVersionsConfig))
150+
}
151+
if (!(o instanceof RegistryQuarkusVersionsConfig that)) {
152+
return false;
153+
}
154+
if (v.isExclusiveProvider() != that.isExclusiveProvider()
155+
|| !Objects.equals(v.getRecognizedVersionsExpression(), that.getRecognizedVersionsExpression())
156+
|| v.getRecognizedGroupIds().size() != that.getRecognizedGroupIds().size()) {
148157
return false;
149-
RegistryQuarkusVersionsConfig that = (RegistryQuarkusVersionsConfig) o;
150-
return v.isExclusiveProvider() == that.isExclusiveProvider()
151-
&& Objects.equals(v.getRecognizedVersionsExpression(), that.getRecognizedVersionsExpression());
158+
}
159+
return v.getRecognizedGroupIds().containsAll(that.getRecognizedGroupIds());
152160
}
153161

154162
static String quarkusVersionConfigToString(RegistryQuarkusVersionsConfig v) {
155163
return "RegistryQuarkusVersionsConfig{" +
156164
"exclusiveProvider=" + v.isExclusiveProvider() +
157165
", recognizedVersionsExpression='" + v.getRecognizedVersionsExpression() + '\'' +
166+
", recognizedGroupIds=" + v.getRecognizedGroupIds() +
158167
'}';
159168
}
160169
}

independent-projects/tools/registry-client/src/test/java/io/quarkus/registry/client/maven/MavenRegistryClientCompleteConfigTest.java

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@
1111
import io.quarkus.registry.config.RegistryConfig;
1212
import io.quarkus.registry.config.RegistryDescriptorConfig;
1313
import io.quarkus.registry.config.RegistryPlatformsConfig;
14+
import io.quarkus.registry.config.RegistryQuarkusVersionsConfig;
1415

1516
public class MavenRegistryClientCompleteConfigTest {
1617

1718
@Test
18-
public void testCompletePlatformsConfig() throws Exception {
19+
public void testCompletePlatformsConfig() {
1920

2021
final RegistryDescriptorConfig descriptorConfig = RegistryDescriptorConfig.builder()
2122
.setArtifact(ArtifactCoords.fromString("org.acme.registry:acme-registry-descriptor::json:1.0-SNAPSHOT"))
@@ -50,4 +51,47 @@ public void testCompletePlatformsConfig() throws Exception {
5051
.isEqualTo(ArtifactCoords.fromString("org.acme.registry:acme-platforms::json:1.0-SNAPSHOT"));
5152
assertThat(completePlatforms.getExtensionCatalogsIncluded()).isTrue();
5253
}
54+
55+
@Test
56+
public void testRecognizedVersionOverride() {
57+
58+
final RegistryDescriptorConfig descriptorConfig = RegistryDescriptorConfig.builder()
59+
.setArtifact(ArtifactCoords.fromString("org.acme.registry:acme-registry-descriptor::json:1.0-SNAPSHOT"))
60+
.build();
61+
62+
final RegistryConfig.Mutable originalRegistryConfig = RegistryConfig.builder();
63+
originalRegistryConfig.setId("acme-registry")
64+
.setDescriptor(descriptorConfig)
65+
.setPlatforms(RegistryPlatformsConfig.builder()
66+
.setArtifact(ArtifactCoords.fromString("org.acme.registry:acme-platforms::json:1.0-SNAPSHOT"))
67+
.build())
68+
.setQuarkusVersions(RegistryQuarkusVersionsConfig.builder()
69+
.setRecognizedVersionsExpression("*acme-acme*")
70+
.setExclusiveProvider(true));
71+
72+
final RegistryConfig.Mutable registryDescriptor = RegistryConfig.builder();
73+
registryDescriptor.setId("acme-registry")
74+
.setDescriptor(descriptorConfig)
75+
.setPlatforms(RegistryPlatformsConfig.builder()
76+
.setArtifact(ArtifactCoords.fromString("org.acme.registry:acme-platforms::json:1.0-SNAPSHOT"))
77+
.build())
78+
.setQuarkusVersions(RegistryQuarkusVersionsConfig.builder()
79+
.setRecognizedGroupIds(List.of("org.acme"))
80+
.setRecognizedVersionsExpression("*acme*"));
81+
82+
final RegistryConfig.Mutable completeConfig = MavenRegistryClientFactory.completeRegistryConfig(originalRegistryConfig,
83+
registryDescriptor);
84+
assertThat(completeConfig.getId()).isEqualTo("acme-registry");
85+
assertThat(completeConfig.getDescriptor().getArtifact())
86+
.isEqualTo(ArtifactCoords.fromString("org.acme.registry:acme-registry-descriptor::json:1.0-SNAPSHOT"));
87+
final RegistryPlatformsConfig completePlatforms = completeConfig.getPlatforms();
88+
assertThat(completePlatforms).isNotNull();
89+
assertThat(completePlatforms.getArtifact())
90+
.isEqualTo(ArtifactCoords.fromString("org.acme.registry:acme-platforms::json:1.0-SNAPSHOT"));
91+
assertThat(completeConfig.getQuarkusVersions())
92+
.isEqualTo(RegistryQuarkusVersionsConfig.builder()
93+
.setRecognizedVersionsExpression("*acme-acme*")
94+
.setExclusiveProvider(true)
95+
.setRecognizedGroupIds(List.of("org.acme")));
96+
}
5397
}

0 commit comments

Comments
 (0)