[PATCH python-hglib] Add the abilty to trace the protocol between the client and server

Barry Scott barry at barrys-emacs.org
Tue Oct 18 10:35:20 UTC 2016


> On 16 Oct 2016, at 15:50, Yuya Nishihara <yuya at tcha.org> wrote:
> 
> On Thu, 06 Oct 2016 18:04:47 +0100, Barry A. Scott wrote:
>> # HG changeset patch
>> # User Barry A. Scott <barry at barrys-emacs.org>
>> # 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.
> 
> This generally looks good to me. Can you update the commit message and
> coding style?
> 
> https://www.mercurial-scm.org/wiki/ContributingChanges <https://www.mercurial-scm.org/wiki/ContributingChanges>
> 

No problem. I have read that link and the coding style and thought that I coded in the
required style. Can you point to the drop off please?

>> 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 )
> 
> Using a fake channel name seems a bit unfortunate. I slightly prefer b'' or
> None.s

I reasoned that given:

    stdout is ‘o’
    stderr is ‘e’

Clearly if there was an actual channel id for stdin the code would use ‘i’.

I could use b’’ or None, but that would just mean I need more code in the callers code mapping
None or b’’ into ‘i’ for printing.

It seemed better to have an obvious identifier.

Barry



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-devel/attachments/20161018/b74cf7cd/attachment-0002.html>


More information about the Mercurial-devel mailing list