Description
LICENSES_MAPPING in src/packagedcode/rubygems.py defines 'LGPL' twice, on two consecutive lines (679-680):
'LGPL': 'lgpl',
'LGPL': 'lgpl-2.0-plus',
Both are entries of the same dict literal, so the first is discarded and every gem declaring a bare LGPL resolves to lgpl-2.0-plus.
That is worth a second look on its own: an unversioned LGPL declaration does not state a version, and lgpl-2.0-plus asserts one. The generic 'LGPL': 'lgpl' line immediately above looks like the mapping intended for the unversioned case, and the table already has separate explicit entries for the versioned spellings. Either way, which one applies is currently decided by line order rather than intent, and the unreachable line is misleading to read.
How To Reproduce
import ast, collections
src = open('src/packagedcode/rubygems.py').read()
for node in ast.walk(ast.parse(src)):
if isinstance(node, ast.Dict):
counts = collections.Counter(
k.value for k in node.keys
if isinstance(k, ast.Constant) and isinstance(k.value, str)
)
for key, n in counts.items():
if n > 1:
print(f'line {node.lineno}: duplicate key {key!r} x{n}')
line 658: duplicate key 'LGPL' x2
And the effective value:
>>> from packagedcode.rubygems import LICENSES_MAPPING
>>> LICENSES_MAPPING['LGPL']
'lgpl-2.0-plus'
The 'lgpl' entry is unreachable.
Suggested fix
Remove one of the two lines. I have opened a PR that drops the unreachable one and keeps the current result, so nothing changes at runtime. If a bare LGPL should instead stay unversioned as lgpl, that is a one-word change on top and I am happy to make it.
System configuration
- What OS are you running on? Linux (x86_64)
- What version of scancode-toolkit was used? 33.0.0rc1,
develop at 5ebebf2
- What installation method was used to install/run scancode? source checkout
- Python version: 3.x
Description
LICENSES_MAPPINGinsrc/packagedcode/rubygems.pydefines'LGPL'twice, on two consecutive lines (679-680):Both are entries of the same dict literal, so the first is discarded and every gem declaring a bare
LGPLresolves tolgpl-2.0-plus.That is worth a second look on its own: an unversioned
LGPLdeclaration does not state a version, andlgpl-2.0-plusasserts one. The generic'LGPL': 'lgpl'line immediately above looks like the mapping intended for the unversioned case, and the table already has separate explicit entries for the versioned spellings. Either way, which one applies is currently decided by line order rather than intent, and the unreachable line is misleading to read.How To Reproduce
And the effective value:
The
'lgpl'entry is unreachable.Suggested fix
Remove one of the two lines. I have opened a PR that drops the unreachable one and keeps the current result, so nothing changes at runtime. If a bare
LGPLshould instead stay unversioned aslgpl, that is a one-word change on top and I am happy to make it.System configuration
developat 5ebebf2