From 40b9b0da69c2c465013afeea5ca04b7252e3c2c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 7 Sep 2018 09:51:23 +0200 Subject: [PATCH] Initialize svn parent directory for servlet --- .../InitializingHttpScmProtocolWrapper.java | 6 ++- .../java/sonia/scm/web/SvnDAVServlet.java | 2 +- .../web/SvnScmProtocolProviderWrapper.java | 45 +++++++++++++++++++ .../java/sonia/scm/web/SvnServletModule.java | 8 ---- 4 files changed, 51 insertions(+), 10 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapper.java b/scm-core/src/main/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapper.java index b06420d9c0..0e0e32dbf1 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapper.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapper.java @@ -29,7 +29,7 @@ public abstract class InitializingHttpScmProtocolWrapper implements HttpScmProto synchronized (this) { if (!isInitialized) { HttpServlet httpServlet = delegateProvider.get(); - httpServlet.init(config); + initializeServlet(config, httpServlet); isInitialized = true; } } @@ -37,6 +37,10 @@ public abstract class InitializingHttpScmProtocolWrapper implements HttpScmProto delegateProvider.get().service(request, response); } + protected void initializeServlet(ServletConfig config, HttpServlet httpServlet) throws ServletException { + httpServlet.init(config); + } + @Override public String getUrl(Repository repository, UriInfo uriInfo) { diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServlet.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServlet.java index 44c544bd68..0a2a63da46 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServlet.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServlet.java @@ -294,7 +294,7 @@ public class SvnDAVServlet extends DAVServlet implements HttpScmProtocol @Override public String getUrl(Repository repository, UriInfo uriInfo) { - return uriInfo.getBaseUri().resolve(URI.create("../../svn/" + repository.getNamespace() + "/" + repository.getName())).toASCIIString(); + return uriInfo.getBaseUri().resolve(URI.create("../../repo/" + repository.getNamespace() + "/" + repository.getName())).toASCIIString(); } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java index 2f54f57bc8..5544bf796e 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java @@ -5,6 +5,13 @@ import sonia.scm.repository.spi.InitializingHttpScmProtocolWrapper; import javax.inject.Inject; import javax.inject.Provider; import javax.inject.Singleton; +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import java.util.Enumeration; + +import static sonia.scm.web.SvnServletModule.PARAMETER_SVN_PARENTPATH; @Singleton public class SvnScmProtocolProviderWrapper extends InitializingHttpScmProtocolWrapper { @@ -12,4 +19,42 @@ public class SvnScmProtocolProviderWrapper extends InitializingHttpScmProtocolWr public SvnScmProtocolProviderWrapper(Provider servletProvider) { super(servletProvider); } + + @Override + protected void initializeServlet(ServletConfig config, HttpServlet httpServlet) throws ServletException { + + super.initializeServlet(new X(config), httpServlet); + } + + private static class X implements ServletConfig { + + private final ServletConfig originalConfig; + + private X(ServletConfig originalConfig) { + this.originalConfig = originalConfig; + } + + @Override + public String getServletName() { + return originalConfig.getServletName(); + } + + @Override + public ServletContext getServletContext() { + return originalConfig.getServletContext(); + } + + @Override + public String getInitParameter(String key) { + if (PARAMETER_SVN_PARENTPATH.equals(key)) { + return System.getProperty("java.io.tmpdir"); + } + return originalConfig.getInitParameter(key); + } + + @Override + public Enumeration getInitParameterNames() { + return originalConfig.getInitParameterNames(); + } + } } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java index 4dab556c8f..9b9dc0bcb0 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java @@ -41,9 +41,6 @@ import sonia.scm.api.v2.resources.SvnConfigDtoToSvnConfigMapper; import sonia.scm.api.v2.resources.SvnConfigToSvnConfigDtoMapper; import sonia.scm.plugin.Extension; -import java.util.HashMap; -import java.util.Map; - //~--- JDK imports ------------------------------------------------------------ /** @@ -75,10 +72,5 @@ public class SvnServletModule extends ServletModule bind(SvnConfigDtoToSvnConfigMapper.class).to(Mappers.getMapper(SvnConfigDtoToSvnConfigMapper.class).getClass()); bind(SvnConfigToSvnConfigDtoMapper.class).to(Mappers.getMapper(SvnConfigToSvnConfigDtoMapper.class).getClass()); - - Map parameters = new HashMap(); - - parameters.put(PARAMETER_SVN_PARENTPATH, - System.getProperty("java.io.tmpdir")); } }