mercurial/wireproto.py
changeset 25708 d3d32643c060
parent 25691 5cda0ce05c42
child 25711 26579a91f4fb
--- a/mercurial/wireproto.py	Wed Jul 01 17:51:57 2015 -0500
+++ b/mercurial/wireproto.py	Tue Jun 30 19:19:17 2015 -0400
@@ -182,17 +182,17 @@
 
 def escapearg(plain):
     return (plain
-            .replace(':', '::')
-            .replace(',', ':,')
-            .replace(';', ':;')
-            .replace('=', ':='))
+            .replace(':', ':c')
+            .replace(',', ':o')
+            .replace(';', ':s')
+            .replace('=', ':e'))
 
 def unescapearg(escaped):
     return (escaped
-            .replace(':=', '=')
-            .replace(':;', ';')
-            .replace(':,', ',')
-            .replace('::', ':'))
+            .replace(':e', '=')
+            .replace(':s', ';')
+            .replace(':o', ',')
+            .replace(':c', ':'))
 
 # mapping of options accepted by getbundle and their types
 #
@@ -221,10 +221,11 @@
     def _submitbatch(self, req):
         cmds = []
         for op, argsdict in req:
-            args = ','.join('%s=%s' % p for p in argsdict.iteritems())
+            args = ','.join('%s=%s' % (escapearg(k), escapearg(v))
+                            for k, v in argsdict.iteritems())
             cmds.append('%s %s' % (op, args))
         rsp = self._call("batch", cmds=';'.join(cmds))
-        return rsp.split(';')
+        return [unescapearg(r) for r in rsp.split(';')]
     def _submitone(self, op, args):
         return self._call(op, **args)