|
40 | 40 | import io.quarkus.registry.config.RegistryMavenRepoConfig; |
41 | 41 | import io.quarkus.registry.config.RegistryNonPlatformExtensionsConfig; |
42 | 42 | import io.quarkus.registry.config.RegistryPlatformsConfig; |
| 43 | +import io.quarkus.registry.config.RegistryQuarkusVersionsConfig; |
43 | 44 |
|
44 | 45 | public class MavenRegistryClientFactory implements RegistryClientFactory { |
45 | 46 |
|
@@ -185,57 +186,88 @@ private static MavenRegistryArtifactResolver defaultResolver(MavenArtifactResolv |
185 | 186 | return new MavenRegistryArtifactResolverWithCleanup(resolver, cleanupTimestampedArtifacts); |
186 | 187 | } |
187 | 188 |
|
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) { |
189 | 197 | RegistryConfig.Mutable complete = RegistryConfig.builder(); |
190 | 198 |
|
191 | | - complete.setId(original.getId() == null ? descriptor.getId() : original.getId()); |
| 199 | + complete.setId(local.getId() == null ? remote.getId() : local.getId()); |
192 | 200 |
|
193 | | - if (original.getDescriptor() == null) { |
194 | | - complete.setDescriptor(descriptor.getDescriptor()); |
| 201 | + if (local.getDescriptor() == null) { |
| 202 | + complete.setDescriptor(remote.getDescriptor()); |
195 | 203 | } else { |
196 | | - complete.setDescriptor(original.getDescriptor()); |
| 204 | + complete.setDescriptor(local.getDescriptor()); |
197 | 205 | } |
198 | | - if (original.getPlatforms() == null) { |
199 | | - complete.setPlatforms(descriptor.getPlatforms()); |
| 206 | + if (local.getPlatforms() == null) { |
| 207 | + complete.setPlatforms(remote.getPlatforms()); |
200 | 208 | } else { |
201 | | - complete.setPlatforms(completeRegistryPlatformConfig(original.getPlatforms(), descriptor.getPlatforms())); |
| 209 | + complete.setPlatforms(completeRegistryPlatformConfig(local.getPlatforms(), remote.getPlatforms())); |
202 | 210 | } |
203 | | - if (original.getNonPlatformExtensions() == null) { |
204 | | - complete.setNonPlatformExtensions(descriptor.getNonPlatformExtensions()); |
| 211 | + if (local.getNonPlatformExtensions() == null) { |
| 212 | + complete.setNonPlatformExtensions(remote.getNonPlatformExtensions()); |
205 | 213 | } else { |
206 | | - complete.setNonPlatformExtensions(original.getNonPlatformExtensions()); |
| 214 | + complete.setNonPlatformExtensions(local.getNonPlatformExtensions()); |
207 | 215 | } |
208 | | - if (original.getUpdatePolicy() == null) { |
209 | | - complete.setUpdatePolicy(descriptor.getUpdatePolicy()); |
| 216 | + if (local.getUpdatePolicy() == null) { |
| 217 | + complete.setUpdatePolicy(remote.getUpdatePolicy()); |
210 | 218 | } else { |
211 | | - complete.setUpdatePolicy(original.getUpdatePolicy()); |
| 219 | + complete.setUpdatePolicy(local.getUpdatePolicy()); |
212 | 220 | } |
213 | 221 |
|
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()); |
218 | 226 | } else { |
219 | 227 | complete.setMaven(RegistryMavenConfig.builder() |
220 | | - .setRepository(completeMavenRepoConfig(original.getMaven(), descriptor.getMaven()))); |
| 228 | + .setRepository(completeMavenRepoConfig(local.getMaven(), remote.getMaven()))); |
221 | 229 | } |
222 | 230 |
|
223 | | - if (original.getQuarkusVersions() == null) { |
224 | | - complete.setQuarkusVersions(descriptor.getQuarkusVersions()); |
225 | | - } |
| 231 | + complete.setQuarkusVersions(complete(local.getQuarkusVersions(), remote.getQuarkusVersions())); |
226 | 232 |
|
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()); |
231 | 237 | } 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()); |
234 | 240 | complete.setExtra(extra); |
235 | 241 | } |
236 | 242 | return complete; |
237 | 243 | } |
238 | 244 |
|
| 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 | + |
239 | 271 | private static RegistryPlatformsConfig completeRegistryPlatformConfig(RegistryPlatformsConfig client, |
240 | 272 | RegistryPlatformsConfig descriptor) { |
241 | 273 | if (client == null) { |
|
0 commit comments