--- a/mercurial/httprepo.py Sat Apr 30 19:36:48 2011 +0200
+++ b/mercurial/httprepo.py Sun May 01 01:04:37 2011 +0800
@@ -76,7 +76,26 @@
data = args.pop('data', None)
headers = args.pop('headers', {})
self.ui.debug("sending %s command\n" % cmd)
- q = [('cmd', cmd)] + sorted(args.items())
+ q = [('cmd', cmd)]
+ headersize = 0
+ if len(args) > 0:
+ httpheader = self.capable('httpheader')
+ if httpheader:
+ headersize = int(httpheader.split(',')[0])
+ if headersize > 0:
+ # The headers can typically carry more data than the URL.
+ encargs = urllib.urlencode(sorted(args.items()))
+ headerfmt = 'X-Arg-%s'
+ contentlen = headersize - len(headerfmt % '000' + ': \r\n')
+ headernum = 0
+ for i in xrange(0, len(encargs), contentlen):
+ headernum += 1
+ header = headerfmt % str(headernum)
+ headers[header] = encargs[i:i + contentlen]
+ varyheaders = [headerfmt % str(h) for h in range(1, headernum + 1)]
+ headers['Vary'] = ','.join(varyheaders)
+ else:
+ q += sorted(args.items())
qs = '?%s' % urllib.urlencode(q)
cu = "%s%s" % (self._url, qs)
req = urllib2.Request(cu, data, headers)