[PATCH 6 of 7] color: move triggering of the initialisation logic in core

Pierre-Yves David pierre-yves.david at ens-lyon.org
Sat Feb 25 08:11:38 EST 2017


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at ens-lyon.org>
# Date 1487697612 -3600
#      Tue Feb 21 18:20:12 2017 +0100
# Node ID 0deb181adc74dea75b109ebdf38fb73f5f20c724
# Parent  25fd71d9347a8c82adf2a991dab0b48ff35282f6
# EXP-Topic color
color: move triggering of the initialisation logic in core

We now run the color initialisation as part of the standard dispatch. This is
opening the way for multiple cleanups since we now have access to the multiple 'ui'
object and we'll be able to see difference between global and local config. This
cleanup will arrive in later changesets.

As a side effect, the '--color' flag is now working without the extension.

Since we now properly initialize color for each ui idependently, we get a
warning message twice.

diff -r 25fd71d9347a -r 0deb181adc74 hgext/color.py
--- a/hgext/color.py	Tue Feb 21 18:09:21 2017 +0100
+++ b/hgext/color.py	Tue Feb 21 18:20:12 2017 +0100
@@ -175,9 +175,6 @@ from mercurial import (
     cmdutil,
     color,
     commands,
-    dispatch,
-    extensions,
-    ui as uimod,
 )
 
 cmdtable = {}
@@ -188,15 +185,6 @@ command = cmdutil.command(cmdtable)
 # leave the attribute unspecified.
 testedwith = 'ships-with-hg-core'
 
-def uisetup(ui):
-    def colorcmd(orig, ui_, opts, cmd, cmdfunc):
-        mode = color._modesetup(ui_, opts['color'])
-        uimod.ui._colormode = mode
-        if mode and mode != 'debug':
-            color.configstyles(ui_)
-        return orig(ui_, opts, cmd, cmdfunc)
-    extensions.wrapfunction(dispatch, '_runcommand', colorcmd)
-
 def extsetup(ui):
     # change default color config
     for idx, entry in enumerate(commands.globalopts):
diff -r 25fd71d9347a -r 0deb181adc74 mercurial/color.py
--- a/mercurial/color.py	Tue Feb 21 18:09:21 2017 +0100
+++ b/mercurial/color.py	Tue Feb 21 18:20:12 2017 +0100
@@ -161,6 +161,17 @@ def _terminfosetup(ui, mode):
               "ECMA-48 color\n"))
         _terminfo_params.clear()
 
+def setup(ui, coloropts):
+    """configure color on a ui
+
+    The 'coloropts' argument is the value of the '--color' command line
+    argument. That function both set the colormode for the ui object and read
+    the configuration looking for custom colors and effect definitions."""
+    mode = _modesetup(ui, coloropts)
+    ui.__class__._colormode = mode
+    if mode and mode != 'debug':
+        configstyles(ui)
+
 def _modesetup(ui, coloropt):
     if ui.plain():
         return None
diff -r 25fd71d9347a -r 0deb181adc74 mercurial/dispatch.py
--- a/mercurial/dispatch.py	Tue Feb 21 18:09:21 2017 +0100
+++ b/mercurial/dispatch.py	Tue Feb 21 18:20:12 2017 +0100
@@ -764,6 +764,10 @@ def _dispatch(req):
             for ui_ in uis:
                 ui_.insecureconnections = True
 
+        # setup color handling
+        for ui_ in uis:
+            color.setup(ui_, options['color'])
+
         if options['version']:
             return commands.version_(ui)
         if options['help']:
diff -r 25fd71d9347a -r 0deb181adc74 tests/test-status-color.t
--- a/tests/test-status-color.t	Tue Feb 21 18:09:21 2017 +0100
+++ b/tests/test-status-color.t	Tue Feb 21 18:20:12 2017 +0100
@@ -295,6 +295,7 @@ test unknown color
 
   $ hg --config color.status.modified=periwinkle status --color=always
   ignoring unknown color/effect 'periwinkle' (configured in color.status.modified)
+  ignoring unknown color/effect 'periwinkle' (configured in color.status.modified)
   M modified
   \x1b[0;32;1mA \x1b[0m\x1b[0;32;1madded\x1b[0m (esc)
   \x1b[0;32;1mA \x1b[0m\x1b[0;32;1mcopied\x1b[0m (esc)


More information about the Mercurial-devel mailing list