diff hgext/color.py @ 30283:e1f6898a80e1

color: restore _style global after debugcolor ran Before this change, running 'debugcolor' would destroy all color style for the rest of the process life. We now properly backup and restore the variable content. Using a global variable is sketchy in general and could probably be removed. However, this is a quest for another adventure.
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Thu, 03 Nov 2016 14:29:19 +0100
parents 7a53458fae4e
children 7556507f7197
line wrap: on
line diff
--- a/hgext/color.py	Thu Nov 03 14:12:32 2016 +0100
+++ b/hgext/color.py	Thu Nov 03 14:29:19 2016 +0100
@@ -540,19 +540,23 @@
 def debugcolor(ui, repo, **opts):
     """show available colors and effects"""
     global _styles
-    _styles = {}
-    for effect in _effects.keys():
-        _styles[effect] = effect
-    if _terminfo_params:
-        for k, v in ui.configitems('color'):
-            if k.startswith('color.'):
-                _styles[k] = k[6:]
-            elif k.startswith('terminfo.'):
-                _styles[k] = k[9:]
-    ui.write(('color mode: %s\n') % ui._colormode)
-    ui.write(_('available colors:\n'))
-    for colorname, label in _styles.items():
-        ui.write(('%s\n') % colorname, label=label)
+    oldstyle = _styles
+    try:
+        _styles = {}
+        for effect in _effects.keys():
+            _styles[effect] = effect
+        if _terminfo_params:
+            for k, v in ui.configitems('color'):
+                if k.startswith('color.'):
+                    _styles[k] = k[6:]
+                elif k.startswith('terminfo.'):
+                    _styles[k] = k[9:]
+        ui.write(('color mode: %s\n') % ui._colormode)
+        ui.write(_('available colors:\n'))
+        for colorname, label in _styles.items():
+            ui.write(('%s\n') % colorname, label=label)
+    finally:
+        _styles = oldstyle
 
 if os.name != 'nt':
     w32effects = None