diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryFilter.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryFilter.java index 3e0a57256..146259385 100644 --- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryFilter.java +++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryFilter.java @@ -154,10 +154,8 @@ public class RepositoryFilter implements Filter { static void sendError(int statusCode, HttpServletRequest req, HttpServletResponse rsp) throws IOException { String svc = req.getParameter("service"); - String accept = req.getHeader(HDR_ACCEPT); - if (svc != null && svc.startsWith("git-") && accept != null - && accept.contains("application/x-" + svc + "-advertisement")) { + if (req.getRequestURI().endsWith("/info/refs") && isService(svc)) { // Smart HTTP service request, use an ERR response. rsp.setContentType("application/x-" + svc + "-advertisement"); @@ -170,6 +168,7 @@ public class RepositoryFilter implements Filter { return; } + String accept = req.getHeader(HDR_ACCEPT); if (accept != null && accept.contains(UploadPackServlet.RSP_TYPE)) { // An upload-pack wants ACK or NAK, return ERR // and the client will print this instead. @@ -188,6 +187,10 @@ public class RepositoryFilter implements Filter { rsp.sendError(statusCode); } + private static boolean isService(String svc) { + return "git-upload-pack".equals(svc) || "git-receive-pack".equals(svc); + } + private static String translate(int statusCode) { switch (statusCode) { case SC_NOT_FOUND: