Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions src/packagedcode/rpm_installed.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,28 @@ def build_package(rpm_tags, datasource_id, package_type, package_namespace=None,
except Exception as e:
raise Exception(value, converted) from e
converted.update(handled)

version = converted.get('version')
release = converted.get('release')
epoch = converted.get('epoch')

if version:
if release:
vr = f'{version}-{release}'
else:
vr = version

if epoch:
try:
epoch_int = int(epoch)
if epoch_int:
vr = f'{epoch}:{vr}'
except (ValueError, TypeError):
pass

converted['version'] = vr
converted.pop('release', None)
converted.pop('epoch', None)

current_filerefs = converted.get("current_filerefs", None)
if current_filerefs:
Expand Down Expand Up @@ -301,6 +323,8 @@ def dirname_handler(value, **kwargs):
# TODO: add these
# 'Epoch'
# 'Release' 11.3.2
'Epoch': name_value_str_handler('epoch'),
'Release': name_value_str_handler('release'),
'Version': name_value_str_handler('version'),
'Description': name_value_str_handler('description'),
'Sha1header': name_value_str_handler('sha1'),
Expand Down
28 changes: 28 additions & 0 deletions tests/packagedcode/test_rpm_installed.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,3 +142,31 @@ def test_scan_system_package_end_to_end_installed_rpms_fedora_bdb(self):
result_file = self.get_temp_file('results.json')
run_scan_click(['--system-package', test_dir, '--json-pp', result_file])
check_json_scan(expected_file, result_file, regen=REGEN_TEST_FIXTURES)


def test_rpm_version_includes_release_field_issue_4684():
"""
Regression test for #4684: RPM versions should include release field.

Before: version="1.71.0"
After: version="1.71.0-9.3" (includes release)

This test validates that the version field includes the release.
Full test data updates will be done in a follow-up PR.
"""
from packagedcode import rpm_installed

test_tags = [
('Name', 'string', 'test-package'),
('Version', 'string', '1.2.3'),
('Release', 'string', '4.el8'),
]

result = rpm_installed.build_package(
rpm_tags=test_tags,
datasource_id='test',
package_type='rpm'
)

assert result.version == '1.2.3-4.el8', f"Expected '1.2.3-4.el8', got '{result.version}'"

Loading