diff --git a/mercurial/httppeer.py b/mercurial/httppeer.py --- a/mercurial/httppeer.py +++ b/mercurial/httppeer.py @@ -221,7 +221,7 @@ argsio = io.BytesIO(strargs) argsio.length = len(strargs) data = _multifile(argsio, data) - headers['X-HgArgs-Post'] = len(strargs) + headers[r'X-HgArgs-Post'] = len(strargs) else: if len(args) > 0: httpheader = self.capable('httpheader') @@ -230,24 +230,25 @@ if headersize > 0: # The headers can typically carry more data than the URL. encargs = urlreq.urlencode(sorted(args.items())) - for header, value in encodevalueinheaders(encargs, 'X-HgArg', + for header, value in encodevalueinheaders(encargs, r'X-HgArg', headersize): headers[header] = value varyheaders.append(header) else: q += sorted(args.items()) - qs = '?%s' % urlreq.urlencode(q) - cu = "%s%s" % (self._url, qs) + qs = '?%s' % urlreq.urlencode([ + (pycompat.strurl(qq[0]), pycompat.strurl(qq[1])) for qq in q]) + cu = r"%s%s" % (pycompat.strurl(self._url), qs) size = 0 if util.safehasattr(data, 'length'): size = data.length elif data is not None: size = len(data) if size and self.ui.configbool('ui', 'usehttp2'): - headers['Expect'] = '100-Continue' - headers['X-HgHttp2'] = '1' - if data is not None and 'Content-Type' not in headers: - headers['Content-Type'] = 'application/mercurial-0.1' + headers[r'Expect'] = r'100-Continue' + headers[r'X-HgHttp2'] = r'1' + if data is not None and r'Content-Type' not in headers: + headers[r'Content-Type'] = r'application/mercurial-0.1' # Tell the server we accept application/mercurial-0.2 and multiple # compression formats if the server is capable of emitting those @@ -281,7 +282,7 @@ varyheaders.append(header) if varyheaders: - headers['Vary'] = ','.join(varyheaders) + headers[r'Vary'] = r','.join(varyheaders) req = self._requestbuilder(cu, data, headers)