Skip to content

Commit c5919fa

Browse files
committed
Include license info for deb pkgs in SPDX reports
Tern must scan the copyright files to gather any type of license information for Debian packages and uses the debian-inspector[1] library to do this. Once scanned, Debian licenses found are stored in the `pkg_licenses` field in the package data model (vs `pkg_license` field for packages found using the package manager). This was causing them not to be reported in SPDX documents. This commit enables Tern to report `pkg_licenses` found in Debian packages as `LicenseRefs` for both tag value and json SPDX formats. Resolves #1188 [1] https://github.com/nexB/debian-inspector Signed-off-by: Rose Judge <[email protected]>
1 parent 8a1a75c commit c5919fa

File tree

4 files changed

+17
-2
lines changed

4 files changed

+17
-2
lines changed

tern/formats/spdx/spdxjson/image_helpers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ def get_image_extracted_licenses(image_obj):
2929
for package in layer.packages:
3030
if package.pkg_license:
3131
unique_licenses.add(package.pkg_license)
32+
# Add debian licenses from copyright text as one license
33+
if package.pkg_licenses:
34+
unique_licenses.add(", ".join(package.pkg_licenses))
3235
extracted_texts = []
3336
for lic in list(unique_licenses):
3437
if not spdx_common.is_spdx_license_expression(lic):

tern/formats/spdx/spdxjson/package_helpers.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ def get_source_package_dict(package, template):
3030
JSON document.'''
3131
mapping = package.to_dict(template)
3232
_, src_ref = spdx_common.get_package_spdxref(package)
33+
declared_lic = mapping['PackageLicenseDeclared']
34+
# Define debian licenses from copyright text as one license
35+
if package.pkg_format == 'deb':
36+
declared_lic = ', '.join(package.pkg_licenses)
3337
package_dict = {
3438
'name': mapping['SourcePackageName'],
3539
'SPDXID': src_ref,
@@ -40,7 +44,7 @@ def get_source_package_dict(package, template):
4044
'filesAnalyzed': False, # always false for packages
4145
'licenseConcluded': 'NOASSERTION', # always NOASSERTION
4246
'licenseDeclared': spdx_common.get_package_license_declared(
43-
mapping['PackageLicenseDeclared']),
47+
declared_lic),
4448
'copyrightText': mapping['PackageCopyrightText'] if
4549
mapping['PackageCopyrightText'] else 'NONE',
4650
'comment': json_formats.source_package_comment

tern/formats/spdx/spdxtagvalue/image_helpers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ def get_image_packages_license_block(image_obj):
5656
for package in layer.packages:
5757
if package.pkg_license:
5858
licenses.add(package.pkg_license)
59+
# Add debian licenses from copyright text as one license
60+
if package.pkg_licenses:
61+
licenses.add(", ".join(package.pkg_licenses))
5962
for lic in licenses:
6063
if not spdx_common.is_spdx_license_expression(lic):
6164
block += spdx_formats.license_id.format(

tern/formats/spdx/spdxtagvalue/package_helpers.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,13 @@ def get_package_block(package_obj, template):
9797
# Package License Concluded (always NOASSERTION)
9898
block += 'PackageLicenseConcluded: NOASSERTION\n'
9999
# Package License Declared (use the license ref for this)
100+
declared_lic = mapping['PackageLicenseDeclared']
101+
if package_obj.pkg_format == 'deb':
102+
# Define debian licenses from copyright text as one license
103+
declared_lic = ', '.join(package_obj.pkg_licenses)
104+
# List debian package licenses collected from copyright texts
100105
block += 'PackageLicenseDeclared: ' + spdx_common.get_package_license_declared(
101-
mapping['PackageLicenseDeclared']) + '\n'
106+
declared_lic) + '\n'
102107
# Package Copyright Text
103108
if mapping['PackageCopyrightText']:
104109
block += 'PackageCopyrightText:' + spdx_formats.block_text.format(

0 commit comments

Comments
 (0)