Description of problem: Rpm's python3 API has been totally braindamaged all this time but people are only noticing now that it's starting to get used. We're changing rpm to return all string data as surrogate-escaped utf-8 python strings everywhere (instead of bytes with unknown encoding that the API doesn't otherwise even accept, see bug 1631292). This makes most rpm-scripts written for python2 just work with python3 too (from the rpm pov). Most software that has kept python2 compatibility are automatically compatible with the fixed API, but unfortunately python3-only users need fixing for the new behavior. There's at least one place in rpmdeplint that is affected, there's an explicit .decode() of rpm data in get_hawkey_package_arch() function. As the broken rpm versions are widely in use, it's best to keep compatibility with both initially. Basically replace all the hardcoded .decode("utf-8") calls to header data with something like this: def b2s(data): if isinstance(data, bytes): return data.decode('utf-8') return data
I was pointed out that the bug referred to in the message is a private RHEL bug, sorry about that. The public, Fedora side counterpart with the background story is the one blocked by this, ie https://bugzilla.redhat.com/show_bug.cgi?id=1693751
This bug appears to have been reported against 'rawhide' during the Fedora 31 development cycle. Changing version to '31'.
This bug appears to have been reported against 'rawhide' during the Fedora 31 development cycle. Changing version to 31.
Miro, I hope you don't mind if I flip this bug over to you. I don't have time to work on rpmdeplint anymore.
In Fedora 31, I tried $ rpmdeplint check-repoclosure ghc-either-5.0.1.1-1.fc31.x86_64.rpm Traceback (most recent call last): File "/usr/bin/rpmdeplint", line 11, in <module> load_entry_point('rpmdeplint==1.4', 'console_scripts', 'rpmdeplint')() File "/usr/lib/python3.7/site-packages/rpmdeplint/cli.py", line 232, in main return args.func(args) File "/usr/lib/python3.7/site-packages/rpmdeplint/cli.py", line 73, in cmd_check_repoclosure with dependency_analyzer_from_args(args) as analyzer: File "/usr/lib/python3.7/site-packages/rpmdeplint/cli.py", line 145, in dependency_analyzer_from_args sack_arches = {get_hawkey_package_arch(rpm) for rpm in rpms} - {'noarch'} File "/usr/lib/python3.7/site-packages/rpmdeplint/cli.py", line 145, in <setcomp> sack_arches = {get_hawkey_package_arch(rpm) for rpm in rpms} - {'noarch'} File "/usr/lib/python3.7/site-packages/rpmdeplint/__init__.py", line 39, in get_hawkey_package_arch pkg_arch = rpm_file[rpm.RPMTAG_ARCH].decode('utf8') AttributeError: 'str' object has no attribute 'decode' Is there a workaround or upstream fix for this?
Should be fixed in rpmdeplint-1.4-16.fc33 , rpmdeplint-1.4-16.fc32, rpmdeplint-1.4-16.fc31 ( https://koji.fedoraproject.org/koji/packageinfo?packageID=23204 ) . Jens, can you verify please? Thanks
Fixed by: rpmdeplint-1.4-16.fc33