Skip to content

Commit b13bfe0

Browse files
committed
fix(node): Fall back to any single enabled node package manager
If the Node package manager cannot be detected, use the first enabled one (according to the ordering in `NodePackageManagerType`) as a fallback instead of always falling back to NPM (which might not be enabled). Signed-off-by: Sebastian Schuberth <[email protected]>
1 parent 91354fe commit b13bfe0

File tree

5 files changed

+25
-2
lines changed

5 files changed

+25
-2
lines changed

plugins/package-managers/node/src/main/kotlin/NodePackageManager.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import org.apache.logging.log4j.kotlin.logger
2525

2626
import org.ossreviewtoolkit.analyzer.PackageManager
2727
import org.ossreviewtoolkit.analyzer.PackageManagerResult
28+
import org.ossreviewtoolkit.analyzer.determineEnabledPackageManagers
2829
import org.ossreviewtoolkit.analyzer.parseAuthorString
2930
import org.ossreviewtoolkit.downloader.VersionControlSystem
3031
import org.ossreviewtoolkit.model.Identifier
@@ -77,7 +78,17 @@ abstract class NodePackageManager(val managerType: NodePackageManagerType) : Pac
7778
analysisRoot: File,
7879
definitionFiles: List<File>,
7980
analyzerConfig: AnalyzerConfiguration
80-
) = NodePackageManagerDetection(definitionFiles).filterApplicable(managerType)
81+
): List<File> {
82+
val enabledIds = analyzerConfig.determineEnabledPackageManagers().map { it.descriptor.id.uppercase() }
83+
84+
// Only keep those types for which a package manager is enabled.
85+
val enabledTypes = NodePackageManagerType.entries.filter { it.name in enabledIds }
86+
87+
// Assume the first type to be the best candidate for the fallback.
88+
val fallbackType = enabledTypes.first()
89+
90+
return NodePackageManagerDetection(definitionFiles).filterApplicable(managerType, fallbackType)
91+
}
8192

8293
override fun createPackageManagerResult(projectResults: Map<File, List<ProjectAnalyzerResult>>) =
8394
PackageManagerResult(projectResults, graphBuilder.build(), graphBuilder.packages())

plugins/package-managers/node/src/main/kotlin/npm/Npm.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ class Npm(override val descriptor: PluginDescriptor = NpmFactory.descriptor, pri
100100
definitionFiles: List<File>,
101101
analyzerConfig: AnalyzerConfiguration
102102
) {
103+
super.beforeResolution(analysisRoot, definitionFiles, analyzerConfig)
104+
103105
NpmCommand.checkVersion()
104106

105107
val directories = definitionFiles.mapTo(mutableSetOf()) { it.resolveSibling("node_modules") }

plugins/package-managers/node/src/main/kotlin/pnpm/Pnpm.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ class Pnpm(override val descriptor: PluginDescriptor = PnpmFactory.descriptor) :
7575
definitionFiles: List<File>,
7676
analyzerConfig: AnalyzerConfiguration
7777
) {
78+
super.beforeResolution(analysisRoot, definitionFiles, analyzerConfig)
79+
7880
PnpmCommand.checkVersion()
7981

8082
val directories = definitionFiles.mapTo(mutableSetOf()) { it.resolveSibling("node_modules") }

plugins/package-managers/node/src/main/kotlin/yarn/Yarn.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ class Yarn(override val descriptor: PluginDescriptor = YarnFactory.descriptor) :
8484
definitionFiles: List<File>,
8585
analyzerConfig: AnalyzerConfiguration
8686
) {
87+
super.beforeResolution(analysisRoot, definitionFiles, analyzerConfig)
88+
8789
YarnCommand.checkVersion()
8890

8991
val directories = definitionFiles.mapTo(mutableSetOf()) { it.resolveSibling("node_modules") }

plugins/package-managers/node/src/main/kotlin/yarn2/Yarn2.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,13 @@ class Yarn2(override val descriptor: PluginDescriptor = Yarn2Factory.descriptor,
9090
analysisRoot: File,
9191
definitionFiles: List<File>,
9292
analyzerConfig: AnalyzerConfiguration
93-
) = definitionFiles.forEach { yarn2Command.checkVersion(it.parentFile) }
93+
) {
94+
super.beforeResolution(analysisRoot, definitionFiles, analyzerConfig)
95+
96+
definitionFiles.forEach {
97+
yarn2Command.checkVersion(it.parentFile)
98+
}
99+
}
94100

95101
override fun resolveDependencies(
96102
analysisRoot: File,

0 commit comments

Comments
 (0)