changeset 40841:368ecbf734af

commandserver: enable logging when server process started This allows us to keep track of server events before client connects to the server. Tests will be added later. Currently there's no log() call to check if things are working well.
author Yuya Nishihara <yuya@tcha.org>
date Sat, 10 Nov 2018 18:19:34 +0900
parents 6a75363f834a
children 82210d88d814
files mercurial/commandserver.py mercurial/server.py
diffstat 2 files changed, 24 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commandserver.py	Sat Nov 10 18:16:33 2018 +0900
+++ b/mercurial/commandserver.py	Sat Nov 10 18:19:34 2018 +0900
@@ -208,15 +208,10 @@
     def __init__(self, ui, repo, fin, fout):
         self.cwd = encoding.getcwd()
 
-        # developer config: cmdserver.log
-        logpath = ui.config("cmdserver", "log")
-        if logpath:
+        if ui.config("cmdserver", "log") == '-':
             global logfile
-            if logpath == '-':
-                # write log on a special 'd' (debug) channel
-                logfile = channeledoutput(fout, 'd')
-            else:
-                logfile = open(logpath, 'a')
+            # switch log stream to the 'd' (debug) channel
+            logfile = channeledoutput(fout, 'd')
 
         if repo:
             # the ui here is really the repo ui so take its baseui so we don't
@@ -361,6 +356,24 @@
 
         return 0
 
+def setuplogging(ui):
+    """Set up server logging facility
+
+    If cmdserver.log is '-', log messages will be sent to the 'd' channel
+    while a client is connected. Otherwise, messages will be written to
+    the stderr of the server process.
+    """
+    # developer config: cmdserver.log
+    logpath = ui.config(b'cmdserver', b'log')
+    if not logpath:
+        return
+
+    global logfile
+    if logpath == b'-':
+        logfile = ui.ferr
+    else:
+        logfile = open(logpath, 'ab')
+
 class pipeservice(object):
     def __init__(self, ui, repo, opts):
         self.ui = ui
--- a/mercurial/server.py	Sat Nov 10 18:16:33 2018 +0900
+++ b/mercurial/server.py	Sat Nov 10 18:19:34 2018 +0900
@@ -155,9 +155,11 @@
 def _createcmdservice(ui, repo, opts):
     mode = opts['cmdserver']
     try:
-        return _cmdservicemap[mode](ui, repo, opts)
+        servicefn = _cmdservicemap[mode]
     except KeyError:
         raise error.Abort(_('unknown mode %s') % mode)
+    commandserver.setuplogging(ui)
+    return servicefn(ui, repo, opts)
 
 def _createhgwebservice(ui, repo, opts):
     # this way we can check if something was given in the command-line