From 5975140a695b45c423a44c7126536adce418f121 Mon Sep 17 00:00:00 2001 From: Sebastian Schuberth Date: Mon, 7 Nov 2022 21:41:50 +0100 Subject: [PATCH] feat(nuget)!: Split the product / technology namespace from the name Use up to two namespace nodes from the name that identify the company and product / technology as defined at [1] as the namespace. This allows to write curations with empty name and version that affect a whole product / technology, and to set e.g. a concluded license for all "Microsoft.AspNetCore" packages. [1]: https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-namespaces Signed-off-by: Sebastian Schuberth --- .../src/main/kotlin/utils/NuGetInspector.kt | 23 ++++++-- .../test/kotlin/utils/NuGetInspectorTest.kt | 58 +++++++++++++++++++ 2 files changed, 75 insertions(+), 6 deletions(-) create mode 100644 plugins/package-managers/nuget/src/test/kotlin/utils/NuGetInspectorTest.kt diff --git a/plugins/package-managers/nuget/src/main/kotlin/utils/NuGetInspector.kt b/plugins/package-managers/nuget/src/main/kotlin/utils/NuGetInspector.kt index 8570649a8cdad..5868b6fd82b1d 100644 --- a/plugins/package-managers/nuget/src/main/kotlin/utils/NuGetInspector.kt +++ b/plugins/package-managers/nuget/src/main/kotlin/utils/NuGetInspector.kt @@ -197,6 +197,13 @@ private fun List.toPackageReferences(): Set.toOrtPackages(): Set = groupBy { "${it.name}:${it.version}" }.mapTo(mutableSetOf()) { (_, packages) -> val pkg = packages.first() @@ -206,12 +213,16 @@ internal fun Collection.toOrtPackages(): Set() val pkgDeclaredLicense = pkg.declaredLicense.orEmpty() diff --git a/plugins/package-managers/nuget/src/test/kotlin/utils/NuGetInspectorTest.kt b/plugins/package-managers/nuget/src/test/kotlin/utils/NuGetInspectorTest.kt new file mode 100644 index 0000000000000..71a7a732c00d8 --- /dev/null +++ b/plugins/package-managers/nuget/src/test/kotlin/utils/NuGetInspectorTest.kt @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2020 The ORT Project Authors (see ) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * License-Filename: LICENSE + */ + +package org.ossreviewtoolkit.plugins.packagemanagers.nuget.utils + +import io.kotest.assertions.assertSoftly +import io.kotest.core.spec.style.WordSpec +import io.kotest.matchers.shouldBe + +import org.ossreviewtoolkit.model.Identifier + +class NuGetInspectorTest : WordSpec({ + "getIdentifierWithNamespace()" should { + "split the namespace from the name" { + assertSoftly { + getIdentifierWithNamespace("SharpCompress", "0.23.0") shouldBe + Identifier("NuGet::SharpCompress:0.23.0") + + getIdentifierWithNamespace("System.IO", "4.1.0") shouldBe + Identifier("NuGet:System:IO:4.1.0") + getIdentifierWithNamespace("System.IO.Compression", "4.3.0") shouldBe + Identifier("NuGet:System.IO:Compression:4.3.0") + getIdentifierWithNamespace("System.IO.Compression.ZipFile", "4.0.1") shouldBe + Identifier("NuGet:System.IO:Compression.ZipFile:4.0.1") + + getIdentifierWithNamespace( + "Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore", + "2.2.1" + ) shouldBe Identifier( + "NuGet:Microsoft.Extensions:Diagnostics.HealthChecks.EntityFrameworkCore:2.2.1" + ) + + getIdentifierWithNamespace( + "Microsoft.AspNetCore.Components.WebAssembly.Build.BrotliCompression", + "3.1.6" + ) shouldBe Identifier( + "NuGet:Microsoft.AspNetCore:Components.WebAssembly.Build.BrotliCompression:3.1.6" + ) + } + } + } +})