D2214: httppeer: change logic around argument handling
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Wed Feb 14 21:05:08 EST 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHGb4b910c5c0d4: httppeer: change logic around argument handling (authored by indygreg, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D2214?vs=5613&id=5741
REVISION DETAIL
https://phab.mercurial-scm.org/D2214
AFFECTED FILES
mercurial/httppeer.py
CHANGE DETAILS
diff --git a/mercurial/httppeer.py b/mercurial/httppeer.py
--- a/mercurial/httppeer.py
+++ b/mercurial/httppeer.py
@@ -252,6 +252,8 @@
# with infinite recursion when trying to look up capabilities
# for the first time.
postargsok = self._caps is not None and 'httppostargs' in self._caps
+
+ # Send arguments via POST.
if postargsok and args:
strargs = urlreq.urlencode(sorted(args.items()))
if not data:
@@ -265,20 +267,27 @@
argsio.length = len(strargs)
data = _multifile(argsio, data)
headers[r'X-HgArgs-Post'] = len(strargs)
- else:
- if len(args) > 0:
- httpheader = self.capable('httpheader')
- if httpheader:
- headersize = int(httpheader.split(',', 1)[0])
+ elif args:
+ # Calling self.capable() can infinite loop if we are calling
+ # "capabilities". But that command should never accept wire
+ # protocol arguments. So this should never happen.
+ assert cmd != 'capabilities'
+ httpheader = self.capable('httpheader')
+ if httpheader:
+ headersize = int(httpheader.split(',', 1)[0])
+
+ # Send arguments via HTTP headers.
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',
headersize):
headers[header] = value
varyheaders.append(header)
+ # Send arguments via query string (Mercurial <1.9).
else:
q += sorted(args.items())
+
qs = '?%s' % urlreq.urlencode(q)
cu = "%s%s" % (self._url, qs)
size = 0
To: indygreg, #hg-reviewers, lothiraldan
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list