debugextensions: gracefully handle missing __file__ attributes
This was crashing PyOxidizer.
Differential Revision: https://phab.mercurial-scm.org/D7452
--- a/mercurial/debugcommands.py Sun Nov 17 01:00:06 2019 -0500
+++ b/mercurial/debugcommands.py Sun Nov 17 01:34:52 2019 -0500
@@ -1029,7 +1029,12 @@
fm = ui.formatter(b'debugextensions', opts)
for extname, extmod in sorted(exts, key=operator.itemgetter(0)):
isinternal = extensions.ismoduleinternal(extmod)
- extsource = pycompat.fsencode(extmod.__file__)
+ extsource = None
+
+ if util.safehasattr(extmod, '__file__'):
+ extsource = pycompat.fsencode(extmod.__file__)
+ elif getattr(sys, 'oxidized', False):
+ extsource = pycompat.sysexecutable
if isinternal:
exttestedwith = [] # never expose magic string to users
else: