From patchwork Thu Oct 6 17:04:47 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [python-hglib] Add the abilty to trace the protocol between the client and server From: "Barry A. Scott" X-Patchwork-Id: 16869 Message-Id: To: mercurial-devel@mercurial-scm.org Cc: gregory.szorc@gmail.com Date: Thu, 06 Oct 2016 18:04:47 +0100 # HG changeset patch # User Barry A. Scott # Date 1475770955 -3600 # Thu Oct 06 17:22:35 2016 +0100 # Branch hglib-protocol-trace # Node ID efc527cc43d7394a5bd0deb1d29c4307592f7528 # Parent 6f15cb7cc9cb4427f35c60080f85dbf4ca5abd10 Add the abilty to trace the protocol between the client and server. This is useful when debugging issues with driving hg via hglib where output and error messages can be lost. call setprotocoltrace with the name of a trace function or None. If the trace function is None no tracing is done. The trace function is called with the channel and its data. diff -r 6f15cb7cc9cb -r efc527cc43d7 hglib/client.py --- a/hglib/client.py Mon Jul 18 23:40:45 2016 -0500 +++ b/hglib/client.py Thu Oct 06 17:22:35 2016 +0100 @@ -62,6 +62,15 @@ if connect: self.open() + self._protocoltracefn = None + + def setprotocoltrace( self, tracefn=None ): + """ + if tracefn is None no trace calls will be made. + Otherwise tracefn is call as tracefn( channel, data ) + """ + self._protocoltracefn = tracefn + def __enter__(self): if self.server is None: self.open() @@ -119,6 +128,7 @@ def runcommand(self, args, inchannels, outchannels): def writeblock(data): + if self._protocoltracefn is not None: self._protocoltracefn( b'i', data ) self.server.stdin.write(struct.pack(self.inputfmt, len(data))) self.server.stdin.write(data) self.server.stdin.flush() @@ -131,6 +141,7 @@ while True: channel, data = self._readchannel() + if self._protocoltracefn is not None: self._protocoltracefn( channel, data ) # input channels if channel in inchannels: