Skip to content

Commit 24c47b2

Browse files
ShraddhaSharma3Jayant-kernel
authored andcommitted
Fix #4609: Handle file-type license references in NuGet packages
Detect <license type='file'> in .nuspec files and extract file path to license_file_references field. Keep extracted_license_statement as raw path value to integrate with existing license resolution in process_codebase function. This follows the two-phase architecture pattern: - Phase 1: Extract and store file path (this change) - Phase 2: Existing process_codebase resolves file references Minimal changes (37 lines) following maintainer feedback from PR #4689. Fixes #4609 Signed-off-by: Jayant <jayantmcom@gmail.com>
1 parent 316ce59 commit 24c47b2

12 files changed

Lines changed: 83 additions & 2 deletions

CONTRIBUTING.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ template. Your help and contribution make ScanCode docs better, we love hearing
8585

8686
The ScanCode documentation is hosted at `scancode-toolkit.readthedocs.io <https://scancode-toolkit.readthedocs.io/en/latest/>`_.
8787

88-
If you want to contribute to Scancode Documentation, you'll find `this guide here <https://scancode-toolkit.readthedocs.io/en/latest/contribute/contrib_doc.html>`_ helpful.
88+
If you want to contribute to Scancode Documentation, you'll find `this guide here https://scancode-toolkit.readthedocs.io/en/latest/getting-started/contribute/contributing-docs.html`_ helpful.
8989

9090
Development
9191
===========

src/packagedcode/nuget.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,30 @@ def parse(cls, location, package_only=False):
156156
urls = get_urls(name, version)
157157

158158
extracted_license_statement = None
159+
license_file_references = []
160+
159161
# See https://docs.microsoft.com/en-us/nuget/reference/nuspec#license
160162
# This is a SPDX license expression
161163
if 'license' in nuspec:
162-
extracted_license_statement = nuspec.get('license')
164+
license_data = nuspec.get('license')
165+
166+
if isinstance(license_data, dict):
167+
license_type = license_data.get('@type', '')
168+
license_text = license_data.get('#text', '')
169+
170+
if license_type == 'expression':
171+
extracted_license_statement = license_text
172+
173+
elif license_type == 'file':
174+
extracted_license_statement = license_text
175+
license_file_references = [license_text]
176+
177+
elif license_type == 'url':
178+
extracted_license_statement = license_text
179+
else:
180+
extracted_license_statement = str(license_data)
181+
else:
182+
extracted_license_statement = license_data
163183
# Deprecated and not a license expression, just a URL
164184
elif 'licenseUrl' in nuspec:
165185
extracted_license_statement = nuspec.get('licenseUrl')
@@ -174,6 +194,7 @@ def parse(cls, location, package_only=False):
174194
parties=parties,
175195
dependencies=list(get_dependencies(nuspec)),
176196
extracted_license_statement=extracted_license_statement,
197+
license_file_references=license_file_references,
177198
copyright=nuspec.get('copyright') or None,
178199
vcs_url=vcs_url,
179200
**urls,

tests/packagedcode/data/nuget/Castle.Core.nuspec-package-only.json.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
"other_license_expression_spdx": null,
4646
"other_license_detections": [],
4747
"extracted_license_statement": "http://www.apache.org/licenses/LICENSE-2.0.html",
48+
"license_file_references": [],
4849
"notice_text": null,
4950
"source_packages": [],
5051
"file_references": [],

tests/packagedcode/data/nuget/Castle.Core.nuspec.json.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
"other_license_expression_spdx": null,
6969
"other_license_detections": [],
7070
"extracted_license_statement": "http://www.apache.org/licenses/LICENSE-2.0.html",
71+
"license_file_references": [],
7172
"notice_text": null,
7273
"source_packages": [],
7374
"file_references": [],

tests/packagedcode/data/nuget/EntityFramework.nuspec.json.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
"other_license_expression_spdx": null,
6969
"other_license_detections": [],
7070
"extracted_license_statement": "http://go.microsoft.com/fwlink/?LinkID=320539",
71+
"license_file_references": [],
7172
"notice_text": null,
7273
"source_packages": [],
7374
"file_references": [],

tests/packagedcode/data/nuget/Microsoft.AspNet.Mvc.nuspec.json.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
"other_license_expression_spdx": null,
6969
"other_license_detections": [],
7070
"extracted_license_statement": "http://www.microsoft.com/web/webpi/eula/net_library_eula_enu.htm",
71+
"license_file_references": [],
7172
"notice_text": null,
7273
"source_packages": [],
7374
"file_references": [],

tests/packagedcode/data/nuget/Microsoft.Net.Http.nuspec.json.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
"other_license_expression_spdx": null,
6969
"other_license_detections": [],
7070
"extracted_license_statement": "http://go.microsoft.com/fwlink/?LinkId=329770",
71+
"license_file_references": [],
7172
"notice_text": null,
7273
"source_packages": [],
7374
"file_references": [],

tests/packagedcode/data/nuget/bootstrap.nuspec.json.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
"other_license_expression_spdx": null,
6969
"other_license_detections": [],
7070
"extracted_license_statement": "https://github.com/twbs/bootstrap/blob/master/LICENSE",
71+
"license_file_references": [],
7172
"notice_text": null,
7273
"source_packages": [],
7374
"file_references": [],

tests/packagedcode/data/nuget/jQuery.UI.Combined.nuspec.json.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
"other_license_expression_spdx": null,
6969
"other_license_detections": [],
7070
"extracted_license_statement": "http://jquery.org/license",
71+
"license_file_references": [],
7172
"notice_text": null,
7273
"source_packages": [],
7374
"file_references": [],
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
3+
<metadata>
4+
<id>Test.Package</id>
5+
<version>1.0.0</version>
6+
<authors>Tester</authors>
7+
<description>Test package with license file</description>
8+
<license type="file">LICENSE.txt</license>
9+
</metadata>
10+
</package>

0 commit comments

Comments
 (0)