Mercurial > hg
changeset 41427:40efcf78f3df
py3: raw stringify various JSON and HTTP headers in the LFS blobstore module
This is (almost?) entirely from Augie's work. I'm a bit surprised that the JSON
data is being encoded with ASCII via `pycompat.bytesurl()`- I would have thought
UTF-8.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sun, 27 Jan 2019 15:42:55 -0500 |
parents | 02d0a7774882 |
children | 4045ab21945a |
files | hgext/lfs/blobstore.py |
diffstat | 1 files changed, 18 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/lfs/blobstore.py Sun Jan 27 15:19:28 2019 -0500 +++ b/hgext/lfs/blobstore.py Sun Jan 27 15:42:55 2019 -0500 @@ -291,15 +291,16 @@ Return decoded JSON object like {'objects': [{'oid': '', 'size': 1}]} See https://github.com/git-lfs/git-lfs/blob/master/docs/api/batch.md """ - objects = [{'oid': p.oid(), 'size': p.size()} for p in pointers] - requestdata = json.dumps({ - 'objects': objects, - 'operation': action, - }) + objects = [{r'oid': pycompat.strurl(p.oid()), + r'size': p.size()} for p in pointers] + requestdata = pycompat.bytesurl(json.dumps({ + r'objects': objects, + r'operation': pycompat.strurl(action), + })) url = b'%s/objects/batch' % self.baseurl batchreq = util.urlreq.request(pycompat.strurl(url), data=requestdata) - batchreq.add_header('Accept', 'application/vnd.git-lfs+json') - batchreq.add_header('Content-Type', 'application/vnd.git-lfs+json') + batchreq.add_header(r'Accept', r'application/vnd.git-lfs+json') + batchreq.add_header(r'Content-Type', r'application/vnd.git-lfs+json') try: with contextlib.closing(self.urlopener.open(batchreq)) as rsp: rawjson = rsp.read() @@ -332,12 +333,14 @@ self.ui.debug(b'%s\n' % b'\n'.join(sorted(headers.splitlines()))) - if 'objects' in response: - response['objects'] = sorted(response['objects'], - key=lambda p: p['oid']) - self.ui.debug('%s\n' - % json.dumps(response, indent=2, - separators=('', ': '), sort_keys=True)) + if r'objects' in response: + response[r'objects'] = sorted(response[r'objects'], + key=lambda p: p[r'oid']) + self.ui.debug(b'%s\n' + % pycompat.bytesurl( + json.dumps(response, indent=2, + separators=(r'', r': '), + sort_keys=True))) return response @@ -419,8 +422,8 @@ raise error.Abort(_(b'detected corrupt lfs object: %s') % oid, hint=_(b'run hg verify')) request.data = filewithprogress(localstore.open(oid), None) - request.get_method = lambda: 'PUT' - request.add_header('Content-Type', 'application/octet-stream') + request.get_method = lambda: r'PUT' + request.add_header(r'Content-Type', r'application/octet-stream') for k, v in headers: request.add_header(k, v)