[PATCH 1 of 5 V2] commandserver: add _readstr and _readlist

Jun Wu quark at fb.com
Tue Feb 16 19:50:22 UTC 2016


# HG changeset patch
# User Jun Wu <quark at fb.com>
# Date 1455649905 0
#      Tue Feb 16 19:11:45 2016 +0000
# Node ID 4fee628c32ea96ebc9c51eb3a1c22ef94feb8645
# Parent  e0c52563425cc71d985c7e22fc824857afcb4030
commandserver: add _readstr and _readlist

Reading a string or a list are common operations for commandserver and
chgserver. This patch adds _readstr and _readlist to avoid duplication.

diff --git a/mercurial/commandserver.py b/mercurial/commandserver.py
--- a/mercurial/commandserver.py
+++ b/mercurial/commandserver.py
@@ -190,6 +190,25 @@
 
         return data
 
+    def _readstr(self):
+        """read a string from the channel
+
+        format:
+        data length (uint32), data
+        """
+        length = struct.unpack('>I', self._read(4))[0]
+        if not length:
+            return ''
+        return self._read(length)
+
+    def _readlist(self):
+        """read a list of NULL separated strings from the channel"""
+        s = self._readstr()
+        if s:
+            return s.split('\0')
+        else:
+            return []
+
     def runcommand(self):
         """ reads a list of \0 terminated arguments, executes
         and writes the return code to the result channel """


More information about the Mercurial-devel mailing list