@ -82,40 +82,57 @@ public abstract class LfsProtocolServlet extends HttpServlet {
/ * *
/ * *
* Get the large file repository
* 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
@Override
protected void doPost ( HttpServletRequest req , HttpServletResponse res )
protected void doPost ( HttpServletRequest req , HttpServletResponse res )
throws ServletException , IOException {
throws ServletException , IOException {
res . setStatus ( SC_OK ) ;
res . setContentType ( CONTENTTYPE_VND_GIT_LFS_JSON ) ;
Writer w = new BufferedWriter (
Writer w = new BufferedWriter (
new OutputStreamWriter ( res . getOutputStream ( ) , UTF_8 ) ) ;
new OutputStreamWriter ( res . getOutputStream ( ) , UTF_8 ) ) ;
Reader r = new BufferedReader ( new InputStreamReader ( req . getInputStream ( ) , UTF_8 ) ) ;
Reader r = new BufferedReader ( new InputStreamReader ( req . getInputStream ( ) , UTF_8 ) ) ;
LfsRequest request = gson . fromJson ( r , LfsRequest . class ) ;
LfsRequest request = gson . fromJson ( r , LfsRequest . class ) ;
String path = req . getPathInfo ( ) ;
LargeFileRepository repo = getLargeFileRepository ( ) ;
LargeFileRepository repo = getLargeFileRepository ( request , path ) ;
if ( repo = = null ) {
if ( repo = = null ) {
res . setStatus ( SC_SERVICE_UNAVAILABLE ) ;
res . setStatus ( SC_SERVICE_UNAVAILABLE ) ;
return ;
return ;
}
}
res . setStatus ( SC_OK ) ;
res . setContentType ( CONTENTTYPE_VND_GIT_LFS_JSON ) ;
TransferHandler handler = TransferHandler
TransferHandler handler = TransferHandler
. forOperation ( request . operation , repo , request . objects ) ;
. forOperation ( request . operation , repo , request . objects ) ;
gson . toJson ( handler . process ( ) , w ) ;
gson . toJson ( handler . process ( ) , w ) ;
w . flush ( ) ;
w . flush ( ) ;
}
}
private static class LfsRequest {
String operation ;
List < LfsObject > objects ;
}
private static Gson createGson ( ) {
private static Gson createGson ( ) {
GsonBuilder gb = new GsonBuilder ( )
GsonBuilder gb = new GsonBuilder ( )
. setFieldNamingPolicy (
. setFieldNamingPolicy (