|
26 | 26 | import com.github.bazelbuild.rules_jvm_external.resolver.ResolutionResult; |
27 | 27 | import com.github.bazelbuild.rules_jvm_external.resolver.Resolver; |
28 | 28 | import com.github.bazelbuild.rules_jvm_external.resolver.events.EventListener; |
| 29 | +import com.github.bazelbuild.rules_jvm_external.resolver.events.LogEvent; |
29 | 30 | import com.github.bazelbuild.rules_jvm_external.resolver.events.PhaseEvent; |
30 | 31 | import com.github.bazelbuild.rules_jvm_external.resolver.lockfile.DependencyIndex; |
31 | 32 | import com.github.bazelbuild.rules_jvm_external.resolver.lockfile.V3LockFile; |
@@ -281,7 +282,7 @@ private static void writeLockFile( |
281 | 282 |
|
282 | 283 | if (config.getInputHash() != null) { |
283 | 284 | toReturn.put("__INPUT_ARTIFACTS_HASH", config.getInputHash()); |
284 | | - toReturn.put("__RESOLVED_ARTIFACTS_HASH", calculateArtifactHash(rendered)); |
| 285 | + toReturn.put("__RESOLVED_ARTIFACTS_HASH", calculateArtifactHash(listener, rendered)); |
285 | 286 | } |
286 | 287 |
|
287 | 288 | String converted = |
@@ -312,7 +313,8 @@ private static void writeDependencyIndex(ResolverConfig config, Set<DependencyIn |
312 | 313 | } |
313 | 314 |
|
314 | 315 | @SuppressWarnings("unchecked") |
315 | | - public static Map<String, Integer> calculateArtifactHash(Map<String, Object> rendered) { |
| 316 | + public static Map<String, Integer> calculateArtifactHash( |
| 317 | + EventListener listener, Map<String, Object> rendered) { |
316 | 318 | Map<String, Map<String, Object>> allInfos = new LinkedHashMap<>(); |
317 | 319 |
|
318 | 320 | Map<String, Map<String, Object>> artifacts = |
@@ -345,14 +347,38 @@ public static Map<String, Integer> calculateArtifactHash(Map<String, Object> ren |
345 | 347 | for (Map.Entry<String, Iterable<String>> repo : repositories.entrySet()) { |
346 | 348 | Iterable<String> repoArtifacts = repo.getValue(); |
347 | 349 | for (String art : repoArtifacts) { |
348 | | - allInfos.get(art).put("repository", repo.getKey()); |
| 350 | + Map<String, Object> info = allInfos.get(art); |
| 351 | + if (info == null) { |
| 352 | + listener.onEvent( |
| 353 | + new LogEvent( |
| 354 | + "resolver", |
| 355 | + String.format( |
| 356 | + "skipping repository assignment for '%s' (referenced by repository '%s' but" |
| 357 | + + " not present in the artifact set)", |
| 358 | + art, repo.getKey()), |
| 359 | + null)); |
| 360 | + continue; |
| 361 | + } |
| 362 | + info.put("repository", repo.getKey()); |
349 | 363 | } |
350 | 364 | } |
351 | 365 |
|
352 | 366 | Map<String, Set<String>> dependencies = |
353 | 367 | sortMapRecursively((Map<?, ?>) rendered.get("dependencies")); |
354 | 368 | for (Map.Entry<String, Set<String>> dep : dependencies.entrySet()) { |
355 | | - allInfos.get(dep.getKey()).put("dependencies", dep.getValue()); |
| 369 | + Map<String, Object> info = allInfos.get(dep.getKey()); |
| 370 | + if (info == null) { |
| 371 | + listener.onEvent( |
| 372 | + new LogEvent( |
| 373 | + "resolver", |
| 374 | + String.format( |
| 375 | + "skipping dependencies for '%s' (declares %d dependencies but is not present in" |
| 376 | + + " the artifact set)", |
| 377 | + dep.getKey(), dep.getValue().size()), |
| 378 | + null)); |
| 379 | + continue; |
| 380 | + } |
| 381 | + info.put("dependencies", dep.getValue()); |
356 | 382 | } |
357 | 383 |
|
358 | 384 | Map<String, Integer> finalHash = new TreeMap<>(); |
|
0 commit comments