diff options
author | David Pursehouse <david.pursehouse@gmail.com> | 2016-07-25 14:43:33 +0900 |
---|---|---|
committer | David Pursehouse <david.pursehouse@gmail.com> | 2016-07-27 15:54:03 +0900 |
commit | bb9988c2368f1986fc0d59cc44fa754f22ca2708 (patch) | |
tree | 08a362cbd49b56e56b37731809e373f55cc3038a /org.eclipse.jgit.lfs.server | |
parent | e27eab26e2027baba7e96a972b90b17f18843467 (diff) | |
download | jgit-bb9988c2368f1986fc0d59cc44fa754f22ca2708.tar.gz jgit-bb9988c2368f1986fc0d59cc44fa754f22ca2708.zip |
LfsProtocolServlet: Pass request and path to getLargeFileRepository
Passing the request and path to the method will allow implementations
to have more control over determination of the backend, for example:
- return different backends for different requests
- accept or refuse requests based on request characteristics
- etc
Change-Id: I1ec6ec54c91a5f0601b620ed18846eb4a3f46783
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
Diffstat (limited to 'org.eclipse.jgit.lfs.server')
-rw-r--r-- | org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/LfsProtocolServlet.java | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/LfsProtocolServlet.java b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/LfsProtocolServlet.java index 7d2efd26cf..7b1a67007d 100644 --- a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/LfsProtocolServlet.java +++ b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/LfsProtocolServlet.java @@ -82,40 +82,57 @@ public abstract class LfsProtocolServlet extends HttpServlet { /** * Get the large file repository * - * @return the large file repository storing large files + * @param request + * the request + * @param path + * the path + * + * @return the large file repository storing large files or null if the + * request is not supported. */ - protected abstract LargeFileRepository getLargeFileRepository(); + protected abstract LargeFileRepository getLargeFileRepository( + LfsRequest request, String path); + + /** LFS request. */ + protected static class LfsRequest { + private String operation; + + private List<LfsObject> objects; + + /** + * Get the LFS operation. + * + * @return the operation + */ + public String getOperation() { + return operation; + } + } @Override protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { - res.setStatus(SC_OK); - res.setContentType(CONTENTTYPE_VND_GIT_LFS_JSON); - Writer w = new BufferedWriter( new OutputStreamWriter(res.getOutputStream(), UTF_8)); Reader r = new BufferedReader(new InputStreamReader(req.getInputStream(), UTF_8)); LfsRequest request = gson.fromJson(r, LfsRequest.class); + String path = req.getPathInfo(); - LargeFileRepository repo = getLargeFileRepository(); + LargeFileRepository repo = getLargeFileRepository(request, path); if (repo == null) { res.setStatus(SC_SERVICE_UNAVAILABLE); return; } + res.setStatus(SC_OK); + res.setContentType(CONTENTTYPE_VND_GIT_LFS_JSON); TransferHandler handler = TransferHandler .forOperation(request.operation, repo, request.objects); gson.toJson(handler.process(), w); w.flush(); } - private static class LfsRequest { - String operation; - - List<LfsObject> objects; - } - private static Gson createGson() { GsonBuilder gb = new GsonBuilder() .setFieldNamingPolicy( |