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 _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel