commandserver: add _readstr and _readlist
authorJun Wu <quark@fb.com>
Tue, 16 Feb 2016 19:11:45 +0000
changeset 28156 75f586a1bf55
parent 28155 7f430b2ac7fd
child 28157 e7c9b59dbbcf
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.
mercurial/commandserver.py
--- a/mercurial/commandserver.py	Wed Feb 10 16:59:34 2016 +0000
+++ b/mercurial/commandserver.py	Tue Feb 16 19:11:45 2016 +0000
@@ -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 """