##// END OF EJS Templates
lfs: handle URLErrors to add additional information...
Matt Harbison -
r40697:380f5131 default
parent child Browse files
Show More
@@ -17,6 +17,7 b' import socket'
17 17 from mercurial.i18n import _
18 18
19 19 from mercurial import (
20 encoding,
20 21 error,
21 22 pathutil,
22 23 pycompat,
@@ -26,6 +27,10 b' from mercurial import ('
26 27 worker,
27 28 )
28 29
30 from mercurial.utils import (
31 stringutil,
32 )
33
29 34 from ..largefiles import lfutil
30 35
31 36 # 64 bytes for SHA256
@@ -231,6 +236,30 b' class local(object):'
231 236 False otherwise."""
232 237 return self.cachevfs.exists(oid) or self.vfs.exists(oid)
233 238
239 def _urlerrorreason(urlerror):
240 '''Create a friendly message for the given URLError to be used in an
241 LfsRemoteError message.
242 '''
243 inst = urlerror
244
245 if isinstance(urlerror.reason, Exception):
246 inst = urlerror.reason
247
248 if util.safehasattr(inst, 'reason'):
249 try: # usually it is in the form (errno, strerror)
250 reason = inst.reason.args[1]
251 except (AttributeError, IndexError):
252 # it might be anything, for example a string
253 reason = inst.reason
254 if isinstance(reason, pycompat.unicode):
255 # SSLError of Python 2.7.9 contains a unicode
256 reason = encoding.unitolocal(reason)
257 return reason
258 elif getattr(inst, "strerror", None):
259 return encoding.strtolocal(inst.strerror)
260 else:
261 return stringutil.forcebytestr(urlerror)
262
234 263 class _gitlfsremote(object):
235 264
236 265 def __init__(self, repo, url):
@@ -279,6 +308,11 b' class _gitlfsremote(object):'
279 308 }
280 309 hint = hints.get(ex.code, _('api=%s, action=%s') % (url, action))
281 310 raise LfsRemoteError(_('LFS HTTP error: %s') % ex, hint=hint)
311 except util.urlerr.urlerror as ex:
312 hint = (_('the "lfs.url" config may be used to override %s')
313 % self.baseurl)
314 raise LfsRemoteError(_('LFS error: %s') % _urlerrorreason(ex),
315 hint=hint)
282 316 try:
283 317 response = json.loads(rawjson)
284 318 except ValueError:
@@ -409,6 +443,11 b' class _gitlfsremote(object):'
409 443 self.ui.debug('%s: %s\n' % (oid, ex.read()))
410 444 raise LfsRemoteError(_('HTTP error: %s (oid=%s, action=%s)')
411 445 % (ex, oid, action))
446 except util.urlerr.urlerror as ex:
447 hint = (_('attempted connection to %s')
448 % util.urllibcompat.getfullurl(request))
449 raise LfsRemoteError(_('LFS error: %s') % _urlerrorreason(ex),
450 hint=hint)
412 451
413 452 def _batch(self, pointers, localstore, action):
414 453 if action not in ['upload', 'download']:
@@ -81,6 +81,11 b' Reasonable hint for a misconfigured blob'
81 81 (the "lfs.url" config may be used to override http://localhost:$HGPORT/missing)
82 82 [255]
83 83
84 $ hg -R httpclone update default --config lfs.url=http://localhost:$HGPORT2/missing
85 abort: LFS error: *onnection *refused*! (glob)
86 (the "lfs.url" config may be used to override http://localhost:$HGPORT2/missing)
87 [255]
88
84 89 Blob URIs are correct when --prefix is used
85 90
86 91 $ hg clone --debug http://localhost:$HGPORT/subdir/mount/point cloned2
General Comments 0
You need to be logged in to leave comments. Login now