Skip to content

Commit 58314b1

Browse files
authored
Merge pull request #272 from ruromero/unknown-deps
feat: consider components with unknown deps as direct deps
2 parents 8f12bd0 + 9af9c6b commit 58314b1

File tree

2 files changed

+37
-17
lines changed

2 files changed

+37
-17
lines changed

src/main/java/com/redhat/exhort/integration/backend/sbom/cyclonedx/CycloneDxParser.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.Map;
2828
import java.util.Optional;
2929
import java.util.Set;
30+
import java.util.function.Predicate;
3031
import java.util.stream.Collectors;
3132

3233
import org.cyclonedx.model.Bom;
@@ -109,6 +110,7 @@ private Map<PackageRef, DirectDependency> buildDependencies(
109110
.toList();
110111
}));
111112
List<PackageRef> directDeps;
113+
addUnknownDependencies(dependencies, componentPurls);
112114
if (rootRef != null && dependencies.get(rootRef) != null) {
113115
directDeps = dependencies.get(rootRef);
114116
} else {
@@ -123,6 +125,15 @@ private Map<PackageRef, DirectDependency> buildDependencies(
123125
.collect(Collectors.toMap(DirectDependency::ref, d -> d));
124126
}
125127

128+
private void addUnknownDependencies(
129+
Map<PackageRef, List<PackageRef>> dependencies, Map<String, PackageRef> componentPurls) {
130+
Set<PackageRef> knownDeps = new HashSet<>(dependencies.keySet());
131+
dependencies.values().forEach(v -> knownDeps.addAll(v));
132+
componentPurls.values().stream()
133+
.filter(Predicate.not(knownDeps::contains))
134+
.forEach(d -> dependencies.put(d, Collections.emptyList()));
135+
}
136+
126137
// The SBOM generator does not have info about the dependency hierarchy
127138
private Map<PackageRef, DirectDependency> buildUnknownDependencies(
128139
Map<String, PackageRef> componentPurls) {

src/main/java/com/redhat/exhort/integration/providers/ProviderResponseHandler.java

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -85,23 +85,32 @@ public ProviderResponse aggregateSplit(ProviderResponse oldExchange, ProviderRes
8585
if (oldExchange.status() != null && !Boolean.TRUE.equals(oldExchange.status().getOk())) {
8686
return oldExchange;
8787
}
88-
oldExchange
89-
.issues()
90-
.entrySet()
91-
.forEach(
92-
e -> {
93-
var issues = newExchange.issues().get(e.getKey());
94-
if (issues != null) {
95-
e.getValue().addAll(issues);
96-
}
97-
});
98-
newExchange.issues().keySet().stream()
99-
.filter(k -> !oldExchange.issues().keySet().contains(k))
100-
.forEach(
101-
k -> {
102-
oldExchange.issues().put(k, newExchange.issues().get(k));
103-
});
104-
return oldExchange;
88+
var exchange = new ProviderResponse(new HashMap<>(), oldExchange.status());
89+
if (oldExchange.issues() != null) {
90+
exchange.issues().putAll(oldExchange.issues());
91+
}
92+
if (newExchange.issues() != null) {
93+
exchange
94+
.issues()
95+
.entrySet()
96+
.forEach(
97+
e -> {
98+
var issues = newExchange.issues().get(e.getKey());
99+
if (issues != null) {
100+
e.getValue().addAll(issues);
101+
}
102+
});
103+
104+
newExchange.issues().keySet().stream()
105+
.filter(k -> !exchange.issues().keySet().contains(k))
106+
.forEach(
107+
k -> {
108+
exchange.issues().put(k, newExchange.issues().get(k));
109+
});
110+
} else if (Boolean.FALSE.equals(newExchange.status().getOk())) {
111+
return new ProviderResponse(exchange.issues(), newExchange.status());
112+
}
113+
return exchange;
105114
}
106115

107116
protected ProviderStatus defaultOkStatus(String provider) {

0 commit comments

Comments
 (0)