diff -r 84518051bc3b -r d3d32643c060 mercurial/wireproto.py --- 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)