changeset 47055:553451522113 stable

extensions: ignore exceptions from an extension's `getversion()` method This method is usually called when there's a stacktrace being generated, or with `hg version -v`. Raising another exception risks mangling the bug report info. I hit this issue when trying to add the method to the keyring extension to report the version of the extension and the underlying module, and ran into demandimport issues prior to py3.8. It seems like a wise thing to do anyway, though unfortunately there's no convenient `ui` object around to issue a warning. Use 'unknown' to signal that it tried to report a version and failed, unlike the default case of printing nothing. Differential Revision: https://phab.mercurial-scm.org/D10540
author Matt Harbison <matt_harbison@yahoo.com>
date Fri, 30 Apr 2021 17:36:09 -0400
parents 9cea55ca1175
children 067f2c53fb24
files mercurial/extensions.py
diffstat 1 files changed, 5 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/extensions.py	Wed Apr 28 17:05:32 2021 -0400
+++ b/mercurial/extensions.py	Fri Apr 30 17:36:09 2021 -0400
@@ -930,7 +930,11 @@
 def moduleversion(module):
     '''return version information from given module as a string'''
     if util.safehasattr(module, b'getversion') and callable(module.getversion):
-        version = module.getversion()
+        try:
+            version = module.getversion()
+        except Exception:
+            version = b'unknown'
+
     elif util.safehasattr(module, b'__version__'):
         version = module.__version__
     else: