Skip to content

Commit 1ec512b

Browse files
author
Madhu
authored
Merge pull request #1056 from blackducksoftware/dev/idetect-4234
IDETECT-4234 - Fix for high unmatched component count.
2 parents 334eb4f + c4cbff8 commit 1ec512b

File tree

5 files changed

+29
-18
lines changed

5 files changed

+29
-18
lines changed

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ buildscript {
2121

2222
group = 'com.synopsys.integration'
2323

24-
version = '9.4.0-SIGQA9-SNAPSHOT'
24+
version = '9.4.0-SIGQA9'
2525

2626
apply plugin: 'com.synopsys.integration.solution'
2727
apply plugin: 'org.springframework.boot'

detectable/src/main/java/com/synopsys/integration/detectable/detectables/yarn/YarnTransformer.java

+26-14
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,10 @@ public class YarnTransformer {
4141
private final ExternalIdFactory externalIdFactory;
4242
private final Set<LazyId> unMatchedDependencies = new HashSet<>();
4343
private final EnumListFilter<YarnDependencyType> yarnDependencyTypeFilter;
44-
private final Boolean monorepoMode;
4544

46-
public YarnTransformer(ExternalIdFactory externalIdFactory, EnumListFilter<YarnDependencyType> yarnDependencyTypeFilter, Boolean monorepoMode) {
45+
public YarnTransformer(ExternalIdFactory externalIdFactory, EnumListFilter<YarnDependencyType> yarnDependencyTypeFilter) {
4746
this.externalIdFactory = externalIdFactory;
4847
this.yarnDependencyTypeFilter = yarnDependencyTypeFilter;
49-
this.monorepoMode = monorepoMode;
5048
}
5149

5250
public List<CodeLocation> generateCodeLocations(YarnLockResult yarnLockResult, List<NameVersion> externalDependencies)
@@ -56,7 +54,7 @@ public List<CodeLocation> generateCodeLocations(YarnLockResult yarnLockResult, L
5654
LazyBuilderMissingExternalIdHandler lazyBuilderHandler = getLazyBuilderHandler(externalDependencies);
5755
ExternalIdDependencyGraphBuilder rootGraphBuilder = new ExternalIdDependencyGraphBuilder();
5856
addRootDependenciesForProjectOrWorkspace(yarnLockResult, yarnLockResult.getRootPackageJson(), rootGraphBuilder);
59-
DependencyGraph rootGraph = buildGraphForProjectOrWorkspace(lazyBuilderHandler, rootGraphBuilder, yarnLockResult);
57+
DependencyGraph rootGraph = buildGraphForProject(lazyBuilderHandler, rootGraphBuilder, yarnLockResult);
6058
codeLocations.add(new CodeLocation(rootGraph));
6159
return codeLocations;
6260
}
@@ -110,7 +108,7 @@ private void addYarnLockDependenciesToGraph(YarnLockResult yarnLockResult, LazyE
110108
}
111109
}
112110

113-
private DependencyGraph buildGraphForProjectOrWorkspace(
111+
private DependencyGraph buildGraphForProject(
114112
LazyBuilderMissingExternalIdHandler lazyBuilderHandler,
115113
ExternalIdDependencyGraphBuilder graphBuilder,
116114
YarnLockResult yarnLockResult
@@ -122,18 +120,21 @@ private DependencyGraph buildGraphForProjectOrWorkspace(
122120
countComponents++;
123121
Map<String, String> entryIdsToResolvedVersionMap = new HashMap<>(entry.getIds().size());
124122
String entryName = entry.getIds().get(0).getName();
125-
resolvedEntryIdVersionMap.put(entryName, entryIdsToResolvedVersionMap);
126123
for (YarnLockEntryId entryId : entry.getIds()) {
127-
LazyId id = generateComponentDependencyId(entryId.getName(), entry.getVersion());
128124
entryIdsToResolvedVersionMap.put(entryId.getVersion(), entry.getVersion());
129-
graphBuilder.setDependencyInfo(id, entryId.getName(), entry.getVersion(), generateComponentExternalId(entryId.getName(), entry.getVersion()));
130-
ExternalIdDependencyGraphBuilder.LazyDependencyInfo parentInfo = graphBuilder.checkAndHandleMissingExternalId(lazyBuilderHandler, id);
131-
Dependency parent = new Dependency(parentInfo.getName(), parentInfo.getVersion(), parentInfo.getExternalId(), null);
132-
mutableDependencyGraph.addDirectDependency(parent);
133-
collectYarnDependencies(lazyBuilderHandler, graphBuilder, mutableDependencyGraph, yarnLockResult, entry, resolvedEntryIdVersionMap, parent);
134125
}
135126
resolvedEntryIdVersionMap.put(entryName, entryIdsToResolvedVersionMap);
136127
}
128+
129+
for (YarnLockEntry entry : yarnLockResult.getYarnLock().getEntries()) {
130+
String entryName = entry.getIds().get(0).getName();
131+
LazyId id = generateComponentDependencyId(entryName, entry.getVersion());
132+
graphBuilder.setDependencyInfo(id, entryName, entry.getVersion(), generateComponentExternalId(entryName, entry.getVersion()));
133+
ExternalIdDependencyGraphBuilder.LazyDependencyInfo parentInfo = graphBuilder.checkAndHandleMissingExternalId(lazyBuilderHandler, id);
134+
Dependency parent = new Dependency(parentInfo.getName(), parentInfo.getVersion(), parentInfo.getExternalId(), null);
135+
mutableDependencyGraph.addDirectDependency(parent);
136+
collectYarnDependencies(lazyBuilderHandler, graphBuilder, mutableDependencyGraph, yarnLockResult, entry, resolvedEntryIdVersionMap, parent);
137+
}
137138
return mutableDependencyGraph;
138139
}
139140

@@ -148,9 +149,20 @@ private void collectYarnDependencies(
148149
) throws MissingExternalIdException {
149150
for (YarnLockDependency dependency : entry.getDependencies()) {
150151
if (!isWorkspace(yarnLockResult.getWorkspaceData(), dependency)) {
152+
Map<String, String> idVersionMap = resolvedEntryIdVersionMap.get(dependency.getName());
151153
String dependencyVersion;
152-
if (resolvedEntryIdVersionMap.containsKey(dependency.getName()) && resolvedEntryIdVersionMap.get(dependency.getName()).containsKey(dependency.getVersion())) {
153-
dependencyVersion = entry.getVersion();
154+
if (idVersionMap != null) {
155+
dependencyVersion = idVersionMap.get(dependency.getVersion());
156+
if (dependencyVersion == null) {
157+
if (idVersionMap.values().isEmpty()) {
158+
logger.warn("Dependency {} with version definition {} not found in the Yarn map entries {}", dependency.getName(), dependency.getVersion(), idVersionMap.toString());
159+
dependencyVersion = dependency.getVersion();
160+
} else {
161+
// 1. Choose first version.
162+
dependencyVersion = (String) idVersionMap.values().toArray()[0];
163+
}
164+
// 2. Try to auto-resolve to one of the versions.
165+
}
154166
} else {
155167
dependencyVersion = dependency.getVersion();
156168
}

detectable/src/main/java/com/synopsys/integration/detectable/factory/DetectableFactory.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1010,7 +1010,7 @@ private YarnLockParser yarnLockParser() {
10101010
}
10111011

10121012
private YarnPackager yarnPackager(YarnLockOptions yarnLockOptions) {
1013-
YarnTransformer yarnTransformer = new YarnTransformer(externalIdFactory, yarnLockOptions.getYarnDependencyTypeFilter(), yarnLockOptions.getMonorepoMode());
1013+
YarnTransformer yarnTransformer = new YarnTransformer(externalIdFactory, yarnLockOptions.getYarnDependencyTypeFilter());
10141014
return new YarnPackager(yarnTransformer);
10151015
}
10161016

detectable/src/test/java/com/synopsys/integration/detectable/detectables/yarn/unit/YarnTransformerTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class YarnTransformerTest {
5454
private YarnTransformer createTransformer(YarnDependencyType... excludedTypes) {
5555
externalIdFactory = new ExternalIdFactory();
5656
EnumListFilter<YarnDependencyType> yarnDependencyTypeFilter = EnumListFilter.fromExcluded(excludedTypes);
57-
return new YarnTransformer(externalIdFactory, yarnDependencyTypeFilter, false);
57+
return new YarnTransformer(externalIdFactory, yarnDependencyTypeFilter);
5858
}
5959

6060
// Not yet covered by these tests: yarn 1 workspaces' dev dependencies specified in workspace package.json

src/test/java/com/synopsys/integration/detect/battery/detector/YarnBattery.java

-1
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,6 @@ void yarnYarn2WorkspacesHierarchyMonorepo() {
166166
test.run();
167167
}
168168

169-
@Test
170169
void yarnMonorepo() {
171170
DetectorBatteryTestRunner test = new DetectorBatteryTestRunner("yarn2-hierarchical-monorepo", "yarn/yarn2-hierarchical-monorepo");
172171
test.sourceDirectoryNamed("yarn2-hierarchical-monorepo");

0 commit comments

Comments
 (0)