From 59ef757f4eb22ab36495ac759b25812fb679d379 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 5 Feb 2012 11:32:38 +0100 Subject: [PATCH] support for mercurial 2.1 --- .../java/sonia/scm/web/cgi/CGIExecutor.java | 17 ++++++++ .../main/java/sonia/scm/web/HgCGIServlet.java | 3 +- .../sonia/scm/web/cgi/DefaultCGIExecutor.java | 39 +++++++++++++++++-- .../sonia/scm/it/ChangesetViewerITCase.java | 2 +- 4 files changed, 56 insertions(+), 5 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/web/cgi/CGIExecutor.java b/scm-core/src/main/java/sonia/scm/web/cgi/CGIExecutor.java index 38fcdacbde..19951a2267 100644 --- a/scm-core/src/main/java/sonia/scm/web/cgi/CGIExecutor.java +++ b/scm-core/src/main/java/sonia/scm/web/cgi/CGIExecutor.java @@ -184,6 +184,15 @@ public interface CGIExecutor */ public File getWorkDirectory(); + /** + * Method description + * + * + * @return + * @since 1.12 + */ + public boolean isContentLengthWorkaround(); + /** * Method description * @@ -210,6 +219,14 @@ public interface CGIExecutor */ public void setBufferSize(int bufferSize); + /** + * Method description + * @since 1.12 + * + * @param contentLengthWorkaround + */ + public void setContentLengthWorkaround(boolean contentLengthWorkaround); + /** * Method description * diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java index 6c4e419fe5..e116aafcc5 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java @@ -46,8 +46,8 @@ import sonia.scm.repository.HgConfig; import sonia.scm.repository.HgHookManager; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryRequestListenerUtil; import sonia.scm.repository.RepositoryProvider; +import sonia.scm.repository.RepositoryRequestListenerUtil; import sonia.scm.util.AssertUtil; import sonia.scm.web.cgi.CGIExecutor; import sonia.scm.web.cgi.CGIExecutorFactory; @@ -228,6 +228,7 @@ public class HgCGIServlet extends HttpServlet CGIExecutor executor = cgiExecutorFactory.createExecutor(configuration, getServletContext(), request, response); + executor.setContentLengthWorkaround(true); executor.getEnvironment().set(ENV_REPOSITORY_NAME, name); executor.getEnvironment().set(ENV_REPOSITORY_PATH, directory.getAbsolutePath()); diff --git a/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutor.java b/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutor.java index 242a0fba0e..9705631a9f 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutor.java +++ b/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutor.java @@ -128,6 +128,12 @@ public class DefaultCGIExecutor extends AbstractCGIExecutor File command = new File(cmd); EnvList env = new EnvList(environment); + // workaround for mercurial 2.1 + if (isContentLengthWorkaround()) + { + env.set(ENV_CONTENT_LENGTH, Integer.toString(request.getContentLength())); + } + if (workDirectory == null) { workDirectory = command.getParentFile(); @@ -161,7 +167,7 @@ public class DefaultCGIExecutor extends AbstractCGIExecutor if (logger.isTraceEnabled()) { - logger.trace(environment.toString()); + logger.trace(env.toString()); } } @@ -169,8 +175,7 @@ public class DefaultCGIExecutor extends AbstractCGIExecutor try { - p = Runtime.getRuntime().exec(execCmd, environment.getEnvArray(), - workDirectory); + p = Runtime.getRuntime().exec(execCmd, env.getEnvArray(), workDirectory); execute(p); } catch (Throwable ex) @@ -205,8 +210,33 @@ public class DefaultCGIExecutor extends AbstractCGIExecutor return exceptionHandler; } + /** + * Method description + * + * + * @return + */ + @Override + public boolean isContentLengthWorkaround() + { + return contentLengthWorkaround; + } + //~--- set methods ---------------------------------------------------------- + /** + * Method description + * + * + * + * @param contentLengthWorkaround + */ + @Override + public void setContentLengthWorkaround(boolean contentLengthWorkaround) + { + this.contentLengthWorkaround = contentLengthWorkaround; + } + /** * Method description * @@ -593,6 +623,9 @@ public class DefaultCGIExecutor extends AbstractCGIExecutor /** Field description */ private ScmConfiguration configuration; + /** Field description */ + private boolean contentLengthWorkaround = false; + /** Field description */ private ServletContext context; diff --git a/scm-webapp/src/test/java/sonia/scm/it/ChangesetViewerITCase.java b/scm-webapp/src/test/java/sonia/scm/it/ChangesetViewerITCase.java index bddd44a558..baaef1bd3b 100644 --- a/scm-webapp/src/test/java/sonia/scm/it/ChangesetViewerITCase.java +++ b/scm-webapp/src/test/java/sonia/scm/it/ChangesetViewerITCase.java @@ -180,7 +180,7 @@ public class ChangesetViewerITCase extends AbstractAdminITCaseBase { RepositoryClient rc = createRepositoryClient(); - rc.checkout(); + rc.init(); addTestFile(rc, "a", 1, false); }