diff mercurial/ui.py @ 40759:fdc6eb1d650d

blackbox: send debug message to logger by core ui Since the core ui.log() may recurse into ui.log() through ui.debug(), it must guard against recursion. The ui extension class can finally be removed.
author Yuya Nishihara <yuya@tcha.org>
date Sun, 11 Nov 2018 17:34:46 +0900
parents 55b053af7196
children ffd574c144d2
line wrap: on
line diff
--- a/mercurial/ui.py	Sat Nov 17 20:23:50 2018 +0900
+++ b/mercurial/ui.py	Sun Nov 11 17:34:46 2018 +0900
@@ -1521,6 +1521,7 @@
         '''
         if self.debugflag:
             self._writemsg(self._fmsgout, type='debug', *msg, **opts)
+            self.log(b'debug', b'%s', b''.join(msg))
 
     def edit(self, text, user, extra=None, editform=None, pending=None,
              repopath=None, action=None):
@@ -1740,8 +1741,14 @@
                          if l.tracked(event)]
         if not activeloggers:
             return
-        for logger in activeloggers:
-            logger.log(self, event, msg, opts)
+        # guard against recursion from e.g. ui.debug()
+        registeredloggers = self._loggers
+        self._loggers = {}
+        try:
+            for logger in activeloggers:
+                logger.log(self, event, msg, opts)
+        finally:
+            self._loggers = registeredloggers
 
     def label(self, msg, label):
         '''style msg based on supplied label