diff options
5 files changed, 16 insertions, 8 deletions
diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/InfoRefsServlet.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/InfoRefsServlet.java index ffaa13153c..52f928548b 100644 --- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/InfoRefsServlet.java +++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/InfoRefsServlet.java @@ -72,7 +72,8 @@ class InfoRefsServlet extends HttpServlet { final Repository db = getRepository(req); final OutputStreamWriter out = new OutputStreamWriter( - new SmartOutputStream(req, rsp), Constants.CHARSET); + new SmartOutputStream(req, rsp, true), + Constants.CHARSET); final RefAdvertiser adv = new RefAdvertiser() { @Override protected void writeOne(final CharSequence line) throws IOException { diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackServlet.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackServlet.java index 10cadd7bb0..3d6c35b0b6 100644 --- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackServlet.java +++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackServlet.java @@ -171,7 +171,7 @@ class ReceivePackServlet extends HttpServlet { return; } - SmartOutputStream out = new SmartOutputStream(req, rsp) { + SmartOutputStream out = new SmartOutputStream(req, rsp, true) { @Override public void flush() throws IOException { doFlush(); diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/SmartOutputStream.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/SmartOutputStream.java index c39b78900d..145c63bcaf 100644 --- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/SmartOutputStream.java +++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/SmartOutputStream.java @@ -70,22 +70,29 @@ class SmartOutputStream extends TemporaryBuffer { private static final int LIMIT = 32 * 1024; private final HttpServletRequest req; - private final HttpServletResponse rsp; - + private boolean compressStream; private boolean startedOutput; SmartOutputStream(final HttpServletRequest req, - final HttpServletResponse rsp) { + final HttpServletResponse rsp, + boolean compressStream) { super(LIMIT); this.req = req; this.rsp = rsp; + this.compressStream = compressStream; } @Override protected OutputStream overflow() throws IOException { startedOutput = true; - return rsp.getOutputStream(); + + OutputStream out = rsp.getOutputStream(); + if (compressStream && acceptsGzipEncoding(req)) { + rsp.setHeader(HDR_CONTENT_ENCODING, ENCODING_GZIP); + out = new GZIPOutputStream(out); + } + return out; } public void close() throws IOException { diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/SmartServiceInfoRefs.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/SmartServiceInfoRefs.java index 907b328db9..4810753779 100644 --- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/SmartServiceInfoRefs.java +++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/SmartServiceInfoRefs.java @@ -122,7 +122,7 @@ abstract class SmartServiceInfoRefs implements Filter { throws IOException { final HttpServletRequest req = (HttpServletRequest) request; final HttpServletResponse res = (HttpServletResponse) response; - final SmartOutputStream buf = new SmartOutputStream(req, res); + final SmartOutputStream buf = new SmartOutputStream(req, res, true); try { res.setContentType(infoRefsResultType(svc)); diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java index 046db45766..c5272b55eb 100644 --- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java +++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java @@ -172,7 +172,7 @@ class UploadPackServlet extends HttpServlet { return; } - SmartOutputStream out = new SmartOutputStream(req, rsp) { + SmartOutputStream out = new SmartOutputStream(req, rsp, false) { @Override public void flush() throws IOException { doFlush(); |