hgext/lfs/wireprotolfsserver.py
changeset 37693 31a0d47d69b3
parent 37692 10e5bb9678f4
child 37766 925707ac2855
equal deleted inserted replaced
37692:10e5bb9678f4 37693:31a0d47d69b3
    24 
    24 
    25 HTTP_OK = hgwebcommon.HTTP_OK
    25 HTTP_OK = hgwebcommon.HTTP_OK
    26 HTTP_CREATED = hgwebcommon.HTTP_CREATED
    26 HTTP_CREATED = hgwebcommon.HTTP_CREATED
    27 HTTP_BAD_REQUEST = hgwebcommon.HTTP_BAD_REQUEST
    27 HTTP_BAD_REQUEST = hgwebcommon.HTTP_BAD_REQUEST
    28 HTTP_NOT_FOUND = hgwebcommon.HTTP_NOT_FOUND
    28 HTTP_NOT_FOUND = hgwebcommon.HTTP_NOT_FOUND
       
    29 HTTP_METHOD_NOT_ALLOWED = hgwebcommon.HTTP_METHOD_NOT_ALLOWED
       
    30 HTTP_NOT_ACCEPTABLE = hgwebcommon.HTTP_NOT_ACCEPTABLE
       
    31 HTTP_UNSUPPORTED_MEDIA_TYPE = hgwebcommon.HTTP_UNSUPPORTED_MEDIA_TYPE
    29 
    32 
    30 def handlewsgirequest(orig, rctx, req, res, checkperm):
    33 def handlewsgirequest(orig, rctx, req, res, checkperm):
    31     """Wrap wireprotoserver.handlewsgirequest() to possibly process an LFS
    34     """Wrap wireprotoserver.handlewsgirequest() to possibly process an LFS
    32     request if it is left unprocessed by the wrapped method.
    35     request if it is left unprocessed by the wrapped method.
    33     """
    36     """
   103     #       }
   106     #       }
   104     #     ]
   107     #     ]
   105     #     "operation": "upload"
   108     #     "operation": "upload"
   106     #  }
   109     #  }
   107 
   110 
   108     if (req.method != b'POST'
   111     if req.method != b'POST':
   109         or req.headers[b'Content-Type'] != b'application/vnd.git-lfs+json'
   112         _sethttperror(res, HTTP_METHOD_NOT_ALLOWED)
   110         or req.headers[b'Accept'] != b'application/vnd.git-lfs+json'):
   113         return True
   111         # TODO: figure out what the proper handling for a bad request to the
   114 
   112         #       Batch API is.
   115     if req.headers[b'Content-Type'] != b'application/vnd.git-lfs+json':
   113         _sethttperror(res, HTTP_BAD_REQUEST, b'Invalid Batch API request')
   116         _sethttperror(res, HTTP_UNSUPPORTED_MEDIA_TYPE)
       
   117         return True
       
   118 
       
   119     if req.headers[b'Accept'] != b'application/vnd.git-lfs+json':
       
   120         _sethttperror(res, HTTP_NOT_ACCEPTABLE)
   114         return True
   121         return True
   115 
   122 
   116     # XXX: specify an encoding?
   123     # XXX: specify an encoding?
   117     lfsreq = json.loads(req.bodyfh.read())
   124     lfsreq = json.loads(req.bodyfh.read())
   118 
   125 
   313             res.status = hgwebcommon.statusmessage(422, b'corrupt blob')
   320             res.status = hgwebcommon.statusmessage(422, b'corrupt blob')
   314             res.setbodybytes(b'')
   321             res.setbodybytes(b'')
   315 
   322 
   316         return True
   323         return True
   317     else:
   324     else:
   318         _sethttperror(res, HTTP_BAD_REQUEST,
   325         _sethttperror(res, HTTP_METHOD_NOT_ALLOWED,
   319                       message=b'Unsupported LFS transfer method: %s' % method)
   326                       message=b'Unsupported LFS transfer method: %s' % method)
   320         return True
   327         return True