|
1 | 1 | package org.testcontainers.containers; |
2 | 2 |
|
| 3 | +import org.testcontainers.utility.DockerImageName; |
| 4 | + |
3 | 5 | import java.io.File; |
| 6 | +import java.util.Collection; |
4 | 7 | import java.util.HashMap; |
5 | | -import java.util.HashSet; |
6 | 8 | import java.util.List; |
7 | 9 | import java.util.Map; |
8 | | -import java.util.Map.Entry; |
9 | 10 | import java.util.Set; |
10 | 11 | import java.util.stream.Collectors; |
11 | 12 |
|
12 | 13 | public class DockerComposeFiles { |
13 | 14 |
|
14 | | - private List<ParsedDockerComposeFile> parsedComposeFiles; |
| 15 | + private final List<ParsedDockerComposeFile> parsedComposeFiles; |
15 | 16 |
|
16 | 17 | public DockerComposeFiles(List<File> composeFiles) { |
17 | 18 | this.parsedComposeFiles = composeFiles.stream().map(ParsedDockerComposeFile::new).collect(Collectors.toList()); |
18 | 19 | } |
19 | 20 |
|
20 | 21 | public Set<String> getDependencyImages() { |
21 | | - |
22 | 22 | Map<String, Set<String>> mergedServiceNameToImageNames = mergeServiceDependencyImageNames(); |
23 | 23 |
|
24 | 24 | return getImageNames(mergedServiceNameToImageNames); |
25 | 25 | } |
26 | 26 |
|
27 | 27 | private Map<String, Set<String>> mergeServiceDependencyImageNames() { |
28 | | - Map<String, Set<String>> mergedServiceNameToImageNames = new HashMap(); |
| 28 | + Map<String, Set<String>> mergedServiceNameToImageNames = new HashMap<>(); |
29 | 29 | for (ParsedDockerComposeFile parsedComposeFile : parsedComposeFiles) { |
30 | | - for (Entry<String, Set<String>> entry : parsedComposeFile.getServiceNameToImageNames().entrySet()) { |
31 | | - mergedServiceNameToImageNames.put(entry.getKey(), entry.getValue()); |
32 | | - } |
| 30 | + mergedServiceNameToImageNames.putAll(parsedComposeFile.getServiceNameToImageNames()); |
33 | 31 | } |
34 | 32 | return mergedServiceNameToImageNames; |
35 | 33 | } |
36 | 34 |
|
37 | 35 | private Set<String> getImageNames(Map<String, Set<String>> serviceToImageNames) { |
38 | | - Set<String> imageNames = new HashSet<>(); |
39 | | - serviceToImageNames.values().stream().forEach(imageNames::addAll); |
40 | | - return imageNames; |
| 36 | + return serviceToImageNames.values().stream() |
| 37 | + .flatMap(Collection::stream) |
| 38 | + // Pass through DockerImageName to convert image names to canonical form (e.g. making implicit latest tag explicit) |
| 39 | + .map(DockerImageName::parse) |
| 40 | + .map(DockerImageName::asCanonicalNameString) |
| 41 | + .collect(Collectors.toSet()); |
41 | 42 | } |
42 | | - |
43 | 43 | } |
0 commit comments