lfs: provide more Batch API error info via a hint in the raised exception
A coworker had a typo in `lfs.url`, forgot it was even set because usually the
blob server is inferred, and then got a 404. It would have been easier to debug
with the failing URL printed.
--- a/hgext/lfs/blobstore.py Thu Nov 15 17:50:14 2018 -0500
+++ b/hgext/lfs/blobstore.py Thu Nov 15 17:55:01 2018 -0500
@@ -263,16 +263,17 @@
'objects': objects,
'operation': action,
})
- batchreq = util.urlreq.request('%s/objects/batch' % self.baseurl,
- data=requestdata)
+ url = '%s/objects/batch' % self.baseurl
+ batchreq = util.urlreq.request(url, data=requestdata)
batchreq.add_header('Accept', 'application/vnd.git-lfs+json')
batchreq.add_header('Content-Type', 'application/vnd.git-lfs+json')
try:
rsp = self.urlopener.open(batchreq)
rawjson = rsp.read()
except util.urlerr.httperror as ex:
- raise LfsRemoteError(_('LFS HTTP error: %s (action=%s)')
- % (ex, action))
+ raise LfsRemoteError(_('LFS HTTP error: %s') % ex,
+ hint=_('api=%s, action=%s')
+ % (url, action))
try:
response = json.loads(rawjson)
except ValueError:
--- a/tests/test-lfs-serve-access.t Thu Nov 15 17:50:14 2018 -0500
+++ b/tests/test-lfs-serve-access.t Thu Nov 15 17:55:01 2018 -0500
@@ -29,7 +29,8 @@
$ hg -R client push http://localhost:$HGPORT
pushing to http://localhost:$HGPORT/
searching for changes
- abort: LFS HTTP error: HTTP Error 400: no such method: .git (action=upload)!
+ abort: LFS HTTP error: HTTP Error 400: no such method: .git!
+ (api=http://localhost:$HGPORT/.git/info/lfs/objects/batch, action=upload)
[255]
... so do a local push to make the data available. Remove the blob from the
@@ -50,7 +51,8 @@
added 1 changesets with 1 changes to 1 files
new changesets 525251863cad
updating to branch default
- abort: LFS HTTP error: HTTP Error 400: no such method: .git (action=download)!
+ abort: LFS HTTP error: HTTP Error 400: no such method: .git!
+ (api=http://localhost:$HGPORT/.git/info/lfs/objects/batch, action=download)
[255]
$ "$PYTHON" $RUNTESTDIR/killdaemons.py $DAEMON_PIDS