From 12fc507d7b1ac97ef09b0c72367588d8365864f3 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 28 Sep 2010 18:59:33 +0200 Subject: [PATCH] use new cgiservlet --- .../java/sonia/scm/web/HgServletModule.java | 25 +++++++-- .../src/main/java/sonia/scm/web/HgUtil.java | 52 +++++++++++++++++++ .../java/sonia/scm/web/HgWebConfigWriter.java | 16 +----- .../main/java/sonia/scm/web/HgWebPlugin.java | 2 +- 4 files changed, 77 insertions(+), 18 deletions(-) create mode 100644 plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java diff --git a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java index 763c3a67ef..1820bd5ba6 100644 --- a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java +++ b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java @@ -12,15 +12,16 @@ package sonia.scm.web; import com.google.inject.Scopes; import com.google.inject.servlet.ServletModule; -import org.apache.catalina.servlets.CGIServlet; - import sonia.scm.web.filter.BasicAuthenticationFilter; +import sonia.scm.web.cgi.CGIServlet; //~--- JDK imports ------------------------------------------------------------ import java.util.HashMap; import java.util.Map; +import javax.servlet.ServletContext; + /** * * @author Sebastian Sdorra @@ -28,6 +29,19 @@ import java.util.Map; public class HgServletModule extends ServletModule { + /** + * Constructs ... + * + * + * @param servletContext + */ + HgServletModule(ServletContext servletContext) + { + cgiPath = HgUtil.getCGI().getAbsolutePath(); + } + + //~--- methods -------------------------------------------------------------- + /** * Method description * @@ -39,8 +53,13 @@ public class HgServletModule extends ServletModule Map initParams = new HashMap(); - initParams.put("cgiPathPrefix", "WEB-INF/cgi/hgweb.cgi"); + initParams.put("command", cgiPath); bind(CGIServlet.class).in(Scopes.SINGLETON); serve("/hg/*").with(CGIServlet.class, initParams); } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private String cgiPath; } diff --git a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java new file mode 100644 index 0000000000..baf09201d8 --- /dev/null +++ b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java @@ -0,0 +1,52 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm.web; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.SCMContext; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.File; + +/** + * + * @author Sebastian Sdorra + */ +public class HgUtil +{ + + /** Field description */ + public static final String CGI_DIRECTORY = "cgi-bin"; + + /** Field description */ + public static final String CGI_NAME = "hgweb.cgi"; + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + public static File getCGI() + { + File cgiDirectory = new File(SCMContext.getContext().getBaseDirectory(), + CGI_DIRECTORY); + + if (!cgiDirectory.exists() &&!cgiDirectory.mkdirs()) + { + throw new RuntimeException( + "could not create directory".concat(cgiDirectory.getPath())); + } + + return new File(cgiDirectory, CGI_NAME); + } +} diff --git a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebConfigWriter.java b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebConfigWriter.java index f31ec4dd1d..189f91bf42 100644 --- a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebConfigWriter.java +++ b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebConfigWriter.java @@ -34,9 +34,6 @@ import javax.servlet.ServletContext; public class HgWebConfigWriter { - /** Field description */ - public static final String CGI_PATH = "WEB-INF/cgi/hgweb.cgi"; - /** Field description */ public static final String CGI_TEMPLATE = "/sonia/scm/hgweb.cgi"; @@ -72,17 +69,7 @@ public class HgWebConfigWriter writeWebConfigFile(webConfigFile); - String path = context.getRealPath(CGI_PATH); - File cgiFile = new File(path); - File cgiDirectory = cgiFile.getParentFile(); - - if (!cgiDirectory.exists() &&!cgiDirectory.mkdirs()) - { - throw new IOException( - "could not create directory: ".concat(cgiDirectory.getPath())); - } - - System.out.println( cgiFile ); + File cgiFile = HgUtil.getCGI(); writeCGIFile(cgiFile, webConfigFile); } @@ -111,6 +98,7 @@ public class HgWebConfigWriter rp.addVariable("python", config.getPythonBinary()); rp.addVariable("config", webConfigFile.getAbsolutePath()); rp.process(input, output); + cgiFile.setExecutable(true); } finally { diff --git a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebPlugin.java b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebPlugin.java index dea962509a..25a32953d8 100644 --- a/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebPlugin.java +++ b/plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgWebPlugin.java @@ -42,6 +42,6 @@ public class HgWebPlugin implements ScmWebPlugin public void contextInitialized(ScmWebPluginContext context) { context.addScriptResource(new ClasspathWebResource(SCRIPT)); - context.addInjectModule(new HgServletModule()); + context.addInjectModule(new HgServletModule( context.getServletContext() )); } }