diff --git a/rpmrepo.py b/rpmrepo.py index 03e60da..90ccb2e 100755 --- a/rpmrepo.py +++ b/rpmrepo.py @@ -562,7 +562,7 @@ def header_to_other(header, sha256): """ pkgid = sha256 name = get_with_decode(header, 'NAME', None) - arch = get_with_decode(header, 'ARCH', None) + arch = get_arch_from_header(header) epoch = header.get('EPOCH', '0') rel = get_with_decode(header, 'RELEASE', None) ver = get_with_decode(header, 'VERSION', None) @@ -653,10 +653,30 @@ def get_with_decode(dictionary, key, default='', encoding='utf-8'): return res +def get_arch_from_header(header): + """Defines the architecture of the package according to + the data from the header. + + Keyword arguments: + header - parsed rpm package header (dict) + + Return the architecture the package is for (string) + """ + + # The architecture definition condition is based on + # https://github.com/rpm-software-management/yum/blob/4ed25525ee4781907bd204018c27f44948ed83fe/yum/packages.py#L2222 + sourcepackage = header.get('SOURCEPACKAGE', None) + sourcerpm = get_with_decode(header, 'SOURCERPM', '') + if sourcepackage == 1 or not sourcerpm: + return 'src' + else: + return get_with_decode(header, 'ARCH', None) + + def header_to_filelists(header, sha256): pkgid = sha256 name = get_with_decode(header, 'NAME', None) - arch = get_with_decode(header, 'ARCH', None) + arch = get_arch_from_header(header) epoch = header.get('EPOCH', '0') rel = get_with_decode(header, 'RELEASE', None) ver = get_with_decode(header, 'VERSION', None) @@ -712,7 +732,7 @@ def header_to_primary( header_end, size): name = get_with_decode(header, 'NAME', None) - arch = get_with_decode(header, 'ARCH') + arch = get_arch_from_header(header) summary = get_with_decode(header, 'SUMMARY') description = get_with_decode(header, 'DESCRIPTION') packager = get_with_decode(header, 'PACKAGER', None) diff --git a/test/test_other.py b/test/test_other.py index feabd77..ce85302 100644 --- a/test/test_other.py +++ b/test/test_other.py @@ -149,6 +149,7 @@ def test_header_to_other(self): sha_256_key = '9a791d16574dc3408f495eb383b6c2669b34fc4545b3c43c8c791fbbe10619d2' header = { 'NAME': b'Test Package Header Other 1', + 'SOURCERPM':b'tpho-0.0.1-1.fc34.src.rpm', 'ARCH': b'aarch64', 'EPOCH': 1, 'RELEASE': b'10.el8_4',