Mercurial > hg
changeset 45105:5d09a120b4be
extensions: make `hg nonexistent` not crash with PyOxidizer
When running `hg nonexistent`, we try to look for extensions that
provide that command. We do that by looking for files in the
`hgext.__file__` directory. However, PyOxidizer doesn't provide a
`__file__`, so we crash when running with PyOxidizer.
We should be able to look for the command in built-in extensions, but
we seem to already have code for skipping the scan when running in a
frozen binary, so I just modified that code instead.
By the way, it also seems like we should be able to search for
extensions in the `hgext3rd` module, but we don't do that yet either
(before or after this patch).
Differential Revision: https://phab.mercurial-scm.org/D8750
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Tue, 14 Jul 2020 11:28:06 -0700 |
parents | eb26a9cf7821 |
children | a03c177a4679 |
files | mercurial/extensions.py |
diffstat | 1 files changed, 11 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/extensions.py Thu Jul 09 12:52:04 2020 +0200 +++ b/mercurial/extensions.py Tue Jul 14 11:28:06 2020 -0700 @@ -706,12 +706,17 @@ '''find paths of disabled extensions. returns a dict of {name: path}''' import hgext - extpath = os.path.dirname( - os.path.abspath(pycompat.fsencode(hgext.__file__)) - ) - try: # might not be a filesystem path - files = os.listdir(extpath) - except OSError: + # The hgext might not have a __file__ attribute (e.g. in PyOxidizer) and + # it might not be on a filesystem even if it does. + if util.safehasattr(hgext, '__file__'): + extpath = os.path.dirname( + os.path.abspath(pycompat.fsencode(hgext.__file__)) + ) + try: + files = os.listdir(extpath) + except OSError: + return {} + else: return {} exts = {}