Skip to content

Commit 8c3b3b9

Browse files
committed
Fix #4684: Include release field in RPM package versions
Signed-off-by: Jayant <jayantmcom@gmail.com>
1 parent 022ddc8 commit 8c3b3b9

2 files changed

Lines changed: 58 additions & 3 deletions

File tree

src/packagedcode/rpm_installed.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,31 @@ def build_package(rpm_tags, datasource_id, package_type, package_namespace=None,
158158
except Exception as e:
159159
raise Exception(value, converted) from e
160160
converted.update(handled)
161+
162+
# Combine version, release, and epoch into EVR format
163+
version = converted.get('version')
164+
release = converted.get('release')
165+
epoch = converted.get('epoch')
166+
167+
if version:
168+
# Combine version and release
169+
if release:
170+
vr = f'{version}-{release}'
171+
else:
172+
vr = version
173+
174+
# Prepend epoch if present and non-zero
175+
if epoch:
176+
try:
177+
epoch_int = int(epoch)
178+
if epoch_int:
179+
vr = f'{epoch}:{vr}'
180+
except (ValueError, TypeError):
181+
pass
182+
183+
converted['version'] = vr
184+
converted.pop('release', None)
185+
converted.pop('epoch', None)
161186

162187
current_filerefs = converted.get("current_filerefs", None)
163188
if current_filerefs:
@@ -298,9 +323,8 @@ def dirname_handler(value, **kwargs):
298323
############################################################################
299324

300325
'Name': name_value_str_handler('name'),
301-
# TODO: add these
302-
# 'Epoch'
303-
# 'Release' 11.3.2
326+
'Epoch': name_value_str_handler('epoch'),
327+
'Release': name_value_str_handler('release'),
304328
'Version': name_value_str_handler('version'),
305329
'Description': name_value_str_handler('description'),
306330
'Sha1header': name_value_str_handler('sha1'),

tests/packagedcode/test_rpm_installed.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,34 @@ def test_scan_system_package_end_to_end_installed_rpms_fedora_bdb(self):
142142
result_file = self.get_temp_file('results.json')
143143
run_scan_click(['--system-package', test_dir, '--json-pp', result_file])
144144
check_json_scan(expected_file, result_file, regen=REGEN_TEST_FIXTURES)
145+
146+
147+
def test_rpm_version_includes_release_field_issue_4684():
148+
"""
149+
Regression test for #4684: RPM versions should include release field.
150+
151+
Before: version="1.71.0"
152+
After: version="1.71.0-9.3" (includes release)
153+
154+
This test validates that the version field includes the release.
155+
Full test data updates will be done in a follow-up PR.
156+
"""
157+
# Test that the combining logic works correctly
158+
from packagedcode import rpm_installed
159+
160+
# Simulate RPM tags with version and release
161+
test_tags = [
162+
('Name', 'string', 'test-package'),
163+
('Version', 'string', '1.2.3'),
164+
('Release', 'string', '4.el8'),
165+
]
166+
167+
result = rpm_installed.build_package(
168+
rpm_tags=test_tags,
169+
datasource_id='test',
170+
package_type='rpm'
171+
)
172+
173+
# Version should include release
174+
assert result.version == '1.2.3-4.el8', f"Expected '1.2.3-4.el8', got '{result.version}'"
175+

0 commit comments

Comments
 (0)