##// END OF EJS Templates
http client: better work with authorization errors, broken sockets.
Vadim Gelfer -
r2467:4e78dc71 default
parent child Browse files
Show More
@@ -10,7 +10,7 b' from remoterepo import *'
10 from i18n import gettext as _
10 from i18n import gettext as _
11 from demandload import *
11 from demandload import *
12 demandload(globals(), "hg os urllib urllib2 urlparse zlib util httplib")
12 demandload(globals(), "hg os urllib urllib2 urlparse zlib util httplib")
13 demandload(globals(), "keepalive tempfile socket")
13 demandload(globals(), "errno keepalive tempfile socket")
14
14
15 class passwordmgr(urllib2.HTTPPasswordMgrWithDefaultRealm):
15 class passwordmgr(urllib2.HTTPPasswordMgrWithDefaultRealm):
16 def __init__(self, ui):
16 def __init__(self, ui):
@@ -192,6 +192,10 b' class httprepository(remoterepository):'
192 cu = "%s?%s" % (self.url, qs)
192 cu = "%s?%s" % (self.url, qs)
193 try:
193 try:
194 resp = urllib2.urlopen(urllib2.Request(cu, data, headers))
194 resp = urllib2.urlopen(urllib2.Request(cu, data, headers))
195 except urllib2.HTTPError, inst:
196 if inst.code == 401:
197 raise util.Abort(_('authorization failed'))
198 raise
195 except httplib.HTTPException, inst:
199 except httplib.HTTPException, inst:
196 self.ui.debug(_('http error while sending %s command\n') % cmd)
200 self.ui.debug(_('http error while sending %s command\n') % cmd)
197 self.ui.print_exc()
201 self.ui.print_exc()
@@ -278,17 +282,22 b' class httprepository(remoterepository):'
278 for chunk in util.filechunkiter(cg):
282 for chunk in util.filechunkiter(cg):
279 fp.write(chunk)
283 fp.write(chunk)
280 length = fp.tell()
284 length = fp.tell()
281 rfp = self.do_cmd(
282 'unbundle', data=fp,
283 headers={'content-length': length,
284 'content-type': 'application/octet-stream'},
285 heads=' '.join(map(hex, heads)))
286 try:
285 try:
287 ret = int(rfp.readline())
286 rfp = self.do_cmd(
288 self.ui.write(rfp.read())
287 'unbundle', data=fp,
289 return ret
288 headers={'content-length': length,
290 finally:
289 'content-type': 'application/octet-stream'},
291 rfp.close()
290 heads=' '.join(map(hex, heads)))
291 try:
292 ret = int(rfp.readline())
293 self.ui.write(rfp.read())
294 return ret
295 finally:
296 rfp.close()
297 except socket.error, err:
298 if err[0] in (errno.ECONNRESET, errno.EPIPE):
299 raise util.Abort(_('push failed: %s'), err[1])
300 raise util.Abort(err[1])
292 finally:
301 finally:
293 fp.close()
302 fp.close()
294 os.unlink(tempname)
303 os.unlink(tempname)
General Comments 0
You need to be logged in to leave comments. Login now