mercurial/wireproto.py
changeset 29734 62e2e048d068
parent 29733 bb04f96df51c
child 29735 919a4b7f531d
--- a/mercurial/wireproto.py	Sat Aug 06 13:46:28 2016 -0700
+++ b/mercurial/wireproto.py	Sat Aug 06 13:55:21 2016 -0700
@@ -191,6 +191,11 @@
     """Return a ``cmds`` argument value for the ``batch`` command."""
     cmds = []
     for op, argsdict in req:
+        # Old servers didn't properly unescape argument names. So prevent
+        # the sending of argument names that may not be decoded properly by
+        # servers.
+        assert all(escapearg(k) == k for k in argsdict)
+
         args = ','.join('%s=%s' % (escapearg(k), escapearg(v))
                         for k, v in argsdict.iteritems())
         cmds.append('%s %s' % (op, args))
@@ -620,7 +625,7 @@
         for a in args.split(','):
             if a:
                 n, v = a.split('=')
-                vals[n] = unescapearg(v)
+                vals[unescapearg(n)] = unescapearg(v)
         func, spec = commands[op]
         if spec:
             keys = spec.split()