Skip to content

Commit caccff5

Browse files
committed
refactor(nuget): Separate resolveDependencies out of the inspector
The `NuGetInspector` should just be a wrapper around the CLI tool (with capabilities to transform its results), but the actual dependency resolution / building of the ORT data model should be the concern of the `NuGet` implementation. Note that further changes to fixup the error / warning mapping will follow. Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
1 parent 9a034d9 commit caccff5

File tree

2 files changed

+35
-46
lines changed

2 files changed

+35
-46
lines changed

plugins/package-managers/nuget/src/main/kotlin/NuGet.kt

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,13 @@ import org.apache.logging.log4j.kotlin.Logging
2525

2626
import org.ossreviewtoolkit.analyzer.AbstractPackageManagerFactory
2727
import org.ossreviewtoolkit.analyzer.PackageManager
28+
import org.ossreviewtoolkit.model.Issue
2829
import org.ossreviewtoolkit.model.ProjectAnalyzerResult
2930
import org.ossreviewtoolkit.model.config.AnalyzerConfiguration
3031
import org.ossreviewtoolkit.model.config.RepositoryConfiguration
3132
import org.ossreviewtoolkit.plugins.packagemanagers.nuget.utils.NuGetInspector
33+
import org.ossreviewtoolkit.plugins.packagemanagers.nuget.utils.toOrtPackages
34+
import org.ossreviewtoolkit.plugins.packagemanagers.nuget.utils.toOrtProject
3235

3336
/**
3437
* A package manager implementation for [.NET](https://docs.microsoft.com/en-us/dotnet/core/tools/) project files that
@@ -54,15 +57,39 @@ class NuGet(
5457
) = NuGet(type, analysisRoot, analyzerConfig, repoConfig)
5558
}
5659

57-
private val nugetConfigOption = options[OPTION_NUGET_CONFIG]
60+
private val nugetConfig = options[OPTION_NUGET_CONFIG]
5861

5962
override fun resolveDependencies(
6063
definitionFile: File,
6164
labels: Map<String, String>
62-
): List<ProjectAnalyzerResult> = NuGetInspector.resolveDependencies(
63-
definitionFile = definitionFile,
64-
managerName = managerName,
65-
analysisRoot = analysisRoot,
66-
nugetConfig = nugetConfigOption,
67-
)
65+
): List<ProjectAnalyzerResult> {
66+
val result = NuGetInspector.inspect(definitionFile, nugetConfig)
67+
val project = result.toOrtProject(managerName, analysisRoot, definitionFile)
68+
val packages = result.dependencies.toOrtPackages()
69+
val errorMessage = collectErrorMessage(result)
70+
val issues = if (errorMessage.isNotBlank()) {
71+
listOf(
72+
Issue(
73+
message = errorMessage,
74+
source = managerName
75+
)
76+
)
77+
} else {
78+
emptyList()
79+
}
80+
81+
return listOf(ProjectAnalyzerResult(project, packages, issues))
82+
}
83+
}
84+
85+
private fun collectErrorMessage(result: NuGetInspector.Result): String {
86+
var errorMessage = ""
87+
result.headers.first().errors.forEach {
88+
errorMessage += it + "\n"
89+
}
90+
result.packages.first().errors.forEach {
91+
errorMessage += it + "\n"
92+
}
93+
result.dependencies.forEach { dep -> dep.errors.forEach { errorMessage += it + "\n" } }
94+
return errorMessage
6895
}

plugins/package-managers/nuget/src/main/kotlin/utils/NuGetInspector.kt

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,9 @@ import org.ossreviewtoolkit.analyzer.PackageManager
3333
import org.ossreviewtoolkit.downloader.VersionControlSystem
3434
import org.ossreviewtoolkit.model.Hash
3535
import org.ossreviewtoolkit.model.Identifier
36-
import org.ossreviewtoolkit.model.Issue
3736
import org.ossreviewtoolkit.model.Package
3837
import org.ossreviewtoolkit.model.PackageReference
3938
import org.ossreviewtoolkit.model.Project
40-
import org.ossreviewtoolkit.model.ProjectAnalyzerResult
4139
import org.ossreviewtoolkit.model.RemoteArtifact
4240
import org.ossreviewtoolkit.model.Scope
4341
import org.ossreviewtoolkit.model.VcsInfo
@@ -53,7 +51,7 @@ private val json = Json { ignoreUnknownKeys = true }
5351
internal object NuGetInspector : CommandLineTool {
5452
override fun command(workingDir: File?) = "nuget-inspector"
5553

56-
private fun inspect(definitionFile: File, nugetConfig: String?): Result {
54+
fun inspect(definitionFile: File, nugetConfig: String?): Result {
5755
val workingDir = definitionFile.parentFile
5856
val outputFile = createOrtTempFile(prefix = "nuget-inspector", suffix = ".json")
5957

@@ -80,30 +78,6 @@ internal object NuGetInspector : CommandLineTool {
8078
}
8179
}
8280

83-
fun resolveDependencies(
84-
definitionFile: File,
85-
managerName: String,
86-
analysisRoot: File,
87-
nugetConfig: String?
88-
): List<ProjectAnalyzerResult> {
89-
val result = inspect(definitionFile, nugetConfig)
90-
val project = result.toOrtProject(managerName, analysisRoot, definitionFile)
91-
val packages = result.dependencies.toOrtPackages()
92-
val errorMessage = collectErrorMessage(result)
93-
val issues = if (errorMessage.isNotBlank()) {
94-
listOf(
95-
Issue(
96-
message = errorMessage,
97-
source = managerName
98-
)
99-
)
100-
} else {
101-
emptyList()
102-
}
103-
104-
return listOf(ProjectAnalyzerResult(project, packages, issues))
105-
}
106-
10781
@Serializable
10882
internal data class Result(
10983
val packages: List<PackageData>,
@@ -169,18 +143,6 @@ private fun List<NuGetInspector.Party>.toAuthors(): SortedSet<String> =
169143
}.takeIf { it.isNotBlank() }
170144
}
171145

172-
private fun collectErrorMessage(result: NuGetInspector.Result): String {
173-
var errorMessage = ""
174-
result.headers.first().errors.forEach {
175-
errorMessage += it + "\n"
176-
}
177-
result.packages.first().errors.forEach {
178-
errorMessage += it + "\n"
179-
}
180-
result.dependencies.forEach { dep -> dep.errors.forEach { errorMessage += it + "\n" } }
181-
return errorMessage
182-
}
183-
184146
internal fun NuGetInspector.Result.toOrtProject(
185147
managerName: String,
186148
analysisRoot: File,

0 commit comments

Comments
 (0)