D9433: extensions: avoid a crash when the version isn't properly byteified on py3
mharbison72 (Matt Harbison)
phabricator at mercurial-scm.org
Sat Nov 28 04:49:02 UTC 2020
mharbison72 created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.
REVISION SUMMARY
We already force bytestr on the `testedwith` and `buglink` attributes in
dispatch.py when generating a bug report with a similar comment about not
every extension being ported to py3. We should do the same here, so the
function can be properly typed.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D9433
AFFECTED FILES
mercurial/extensions.py
tests/test-extension.t
CHANGE DETAILS
diff --git a/tests/test-extension.t b/tests/test-extension.t
--- a/tests/test-extension.t
+++ b/tests/test-extension.t
@@ -1399,12 +1399,20 @@
> cmdtable = {}
> command = registrar.command(cmdtable)
> class Bogon(Exception): pass
+ > # NB: version should be bytes; simulating extension not ported to py3
+ > __version__ = '1.0.0'
> @command(b'throw', [], b'hg throw', norepo=True)
> def throw(ui, **opts):
> """throws an exception"""
> raise Bogon()
> EOF
+Test extension without proper byteification of key attributes doesn't crash when
+accessed.
+
+ $ hg version -v --config extensions.throw=throw.py | grep '^ '
+ throw external 1.0.0
+
No declared supported version, extension complains:
$ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
** Unknown exception encountered with possibly-broken third-party extension throw
diff --git a/mercurial/extensions.py b/mercurial/extensions.py
--- a/mercurial/extensions.py
+++ b/mercurial/extensions.py
@@ -936,6 +936,10 @@
version = b''
if isinstance(version, (list, tuple)):
version = b'.'.join(pycompat.bytestr(o) for o in version)
+ else:
+ # version data should be bytes, but not all extensions are ported
+ # to py3.
+ version = stringutil.forcebytestr(version)
return version
To: mharbison72, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
More information about the Mercurial-devel
mailing list