mercurial/httprepo.py
changeset 14093 ce99d887585f
parent 14076 924c82157d46
child 14094 d10c6835497e
equal deleted inserted replaced
14092:222c8ec7a274 14093:ce99d887585f
    74         if cmd == 'pushkey':
    74         if cmd == 'pushkey':
    75             args['data'] = ''
    75             args['data'] = ''
    76         data = args.pop('data', None)
    76         data = args.pop('data', None)
    77         headers = args.pop('headers', {})
    77         headers = args.pop('headers', {})
    78         self.ui.debug("sending %s command\n" % cmd)
    78         self.ui.debug("sending %s command\n" % cmd)
    79         q = [('cmd', cmd)] + sorted(args.items())
    79         q = [('cmd', cmd)]
       
    80         headersize = 0
       
    81         if len(args) > 0:
       
    82             httpheader = self.capable('httpheader')
       
    83             if httpheader:
       
    84                 headersize = int(httpheader.split(',')[0])
       
    85         if headersize > 0:
       
    86             # The headers can typically carry more data than the URL.
       
    87             encargs = urllib.urlencode(sorted(args.items()))
       
    88             headerfmt = 'X-Arg-%s'
       
    89             contentlen = headersize - len(headerfmt % '000' + ': \r\n')
       
    90             headernum = 0
       
    91             for i in xrange(0, len(encargs), contentlen):
       
    92                 headernum += 1
       
    93                 header = headerfmt % str(headernum)
       
    94                 headers[header] = encargs[i:i + contentlen]
       
    95             varyheaders = [headerfmt % str(h) for h in range(1, headernum + 1)]
       
    96             headers['Vary'] = ','.join(varyheaders)
       
    97         else:
       
    98             q += sorted(args.items())
    80         qs = '?%s' % urllib.urlencode(q)
    99         qs = '?%s' % urllib.urlencode(q)
    81         cu = "%s%s" % (self._url, qs)
   100         cu = "%s%s" % (self._url, qs)
    82         req = urllib2.Request(cu, data, headers)
   101         req = urllib2.Request(cu, data, headers)
    83         if data is not None:
   102         if data is not None:
    84             # len(data) is broken if data doesn't fit into Py_ssize_t
   103             # len(data) is broken if data doesn't fit into Py_ssize_t