mercurial/httprepo.py
branchstable
changeset 15152 94b200a11cf7
parent 14991 4f39610996fa
child 15159 85322c19c831
equal deleted inserted replaced
15095:ec222a29bdf0 15152:94b200a11cf7
    72 
    72 
    73     def _callstream(self, cmd, **args):
    73     def _callstream(self, cmd, **args):
    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         size = 0
       
    78         if util.safehasattr(data, 'length'):
       
    79             size = data.length
       
    80         elif data is not None:
       
    81             size = len(data)
    77         headers = args.pop('headers', {})
    82         headers = args.pop('headers', {})
    78 
    83 
    79         if data and self.ui.configbool('ui', 'usehttp2', False):
    84         if size and self.ui.configbool('ui', 'usehttp2', False):
    80             headers['Expect'] = '100-Continue'
    85             headers['Expect'] = '100-Continue'
    81             headers['X-HgHttp2'] = '1'
    86             headers['X-HgHttp2'] = '1'
    82 
    87 
    83         self.ui.debug("sending %s command\n" % cmd)
    88         self.ui.debug("sending %s command\n" % cmd)
    84         q = [('cmd', cmd)]
    89         q = [('cmd', cmd)]
   103             q += sorted(args.items())
   108             q += sorted(args.items())
   104         qs = '?%s' % urllib.urlencode(q)
   109         qs = '?%s' % urllib.urlencode(q)
   105         cu = "%s%s" % (self._url, qs)
   110         cu = "%s%s" % (self._url, qs)
   106         req = urllib2.Request(cu, data, headers)
   111         req = urllib2.Request(cu, data, headers)
   107         if data is not None:
   112         if data is not None:
   108             # len(data) is broken if data doesn't fit into Py_ssize_t
       
   109             # add the header ourself to avoid OverflowError
       
   110             size = data.__len__()
       
   111             self.ui.debug("sending %s bytes\n" % size)
   113             self.ui.debug("sending %s bytes\n" % size)
   112             req.add_unredirected_header('Content-Length', '%d' % size)
   114             req.add_unredirected_header('Content-Length', '%d' % size)
   113         try:
   115         try:
   114             resp = self.urlopener.open(req)
   116             resp = self.urlopener.open(req)
   115         except urllib2.HTTPError, inst:
   117         except urllib2.HTTPError, inst: