# HG changeset patch # User Pierre-Yves David # Date 1487697612 -3600 # Node ID 45be7590301d3bc3757800311475f78bcd0d8974 # Parent 8346b2f09e795dd84f8644f77c932125a59f26e6 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 8346b2f09e79 -r 45be7590301d 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 @@ cmdutil, color, commands, - dispatch, - extensions, - ui as uimod, ) cmdtable = {} @@ -188,15 +185,6 @@ # 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 8346b2f09e79 -r 45be7590301d 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 @@ "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 8346b2f09e79 -r 45be7590301d 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 @@ 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 8346b2f09e79 -r 45be7590301d 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 @@ $ 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)