packaging: remove version info from Breaks+Replaces in Debian package
The versioned Breaks: and Replaces: cause problem when trying to install
our package over the one in Debian.
$ sudo apt install ./packages/debian-buster/mercurial_5.2~rc0+15-buster-
a2ff3aff81d2_amd64.deb
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'mercurial' instead of './packages/debian-buster/mercurial_5.2~rc0+15-buster-
a2ff3aff81d2_amd64.deb'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
mercurial : Breaks: mercurial-common (< 5.2~rc0+15-buster-
a2ff3aff81d2) but 5.2~rc0-1 is to be installed
E: Unable to correct problems, you have held broken packages.
Removing version information resolves the situation.
py3: fix generated non-ascii message in test-notify.t
The resulting "Subject:" header contains an encoded word in Python 3 so
we have to add distinct outputs for Python 3 but underlying values are
the same:
>>> from email.header import decode_header
>>> decode_header('=?utf-8?b?w6AuLi4=?=')
[(b'\xc3\xa0...', 'utf-8')]
py3: decode encoding literal before passing to .decode()
bytes.decode(<encoding>) wants an str as "encoding" parameter,
it raises a TypeError if given a bytestring. encoding.encoding and
encoding.fallbackencoding are bytes values.
py3: decode payload of notify email
This fixes one UnicodeEncodeError in test-notify.t:422 when testing the
notify hook with non-ascii content (there are more later). We only
decode on Python 3, since it's not safe for sure on Python 2.
py3: use stdlib's parseaddr() to get sender header in notify extension
In Python 3, email headers are unicode string so using
stringutil.email() will not work as it compares with bytestring. So
let's use email.utils.parseaddr() from the stdlib which has a consistent
behavior across Python versions. The same is done in patchbomb
extension already.
py3: use a BytesParser in notify extension
This is the first step to make the "long line" case in test-notify.t
pass by fixing a UnicodeDecodeError on Python 3.
We alias a parsebytes() in mail module, similarly as we already have a
parse() function for Python 2 and Python 3 compatibility.