From d283393361c017db61196c595e78a7f57a08faf4 Mon Sep 17 00:00:00 2001 From: Jayant Date: Thu, 22 Jan 2026 19:36:04 +0530 Subject: [PATCH 1/2] Fix #4684: Include release field in RPM package versions Signed-off-by: Jayant --- src/packagedcode/rpm_installed.py | 24 ++++++++++++++++++++ tests/packagedcode/test_rpm_installed.py | 28 ++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/packagedcode/rpm_installed.py b/src/packagedcode/rpm_installed.py index 8e6a12261c5..358a615fb45 100644 --- a/src/packagedcode/rpm_installed.py +++ b/src/packagedcode/rpm_installed.py @@ -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: @@ -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'), diff --git a/tests/packagedcode/test_rpm_installed.py b/tests/packagedcode/test_rpm_installed.py index 4b593cd6212..af76e11cf55 100644 --- a/tests/packagedcode/test_rpm_installed.py +++ b/tests/packagedcode/test_rpm_installed.py @@ -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}'" + From 6122595d83e84dd3b16f24fc9c5739deaddc7470 Mon Sep 17 00:00:00 2001 From: Jayant Date: Sat, 24 Jan 2026 15:14:21 +0530 Subject: [PATCH 2/2] Trigger CI rebuild to fix clone error Signed-off-by: Jayant