From 352bfe7f5ae42fd58766f807001f4038392302fa Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 13 Feb 2019 12:30:40 +0100 Subject: [PATCH] fixed mercurial PreReceiveRepositoryHooks The problem seems to be that guice had multiple options for injecting HgContext. HgContextProvider bound via Module and HgContext bound void RequestScoped annotation. It looks like that Guice 4 injects randomly the one or the other, in SCMv1 (Guice 3) everything works as expected. To fix the problem we have created a new class annotated with RequestScoped, which holds an instance of HgContext. This way only the HgContextProvider is used for injection. --- .../java/sonia/scm/repository/HgContext.java | 3 --- .../sonia/scm/repository/HgContextProvider.java | 17 ++++++----------- .../scm/repository/HgContextRequestStore.java | 14 ++++++++++++++ .../src/main/java/sonia/scm/web/HgUtil.java | 2 ++ 4 files changed, 22 insertions(+), 14 deletions(-) create mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextRequestStore.java diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContext.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContext.java index cbf7804444..21e27af328 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContext.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContext.java @@ -35,13 +35,10 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- -import com.google.inject.servlet.RequestScoped; - /** * * @author Sebastian Sdorra */ -@RequestScoped public class HgContext { diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextProvider.java index c86588fb27..e6f7436650 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextProvider.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextProvider.java @@ -63,22 +63,17 @@ public class HgContextProvider implements Provider * @return */ @Override - public HgContext get() - { - HgContext ctx = context; - - if (ctx == null) - { - ctx = new HgContext(); + public HgContext get() { + if (contextRequestStore == null) { logger.trace("context is null, we are probably out of request scope"); + return new HgContext(); } - - return ctx; + logger.trace("return HgContext from request store"); + return contextRequestStore.get(); } //~--- fields --------------------------------------------------------------- - /** Field description */ @Inject(optional = true) - private HgContext context; + private HgContextRequestStore contextRequestStore; } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextRequestStore.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextRequestStore.java new file mode 100644 index 0000000000..156e915416 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextRequestStore.java @@ -0,0 +1,14 @@ +package sonia.scm.repository; + +import com.google.inject.servlet.RequestScoped; + +@RequestScoped +public class HgContextRequestStore { + + private HgContext context = new HgContext(); + + public HgContext get() { + return context; + } + +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java index ec35762de7..b6b085f3ac 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java @@ -134,6 +134,8 @@ public final class HgUtil repoConfiguration.setHgBin(handler.getConfig().getHgBinary()); + logger.debug("open hg repository {}: encoding: {}, pending: {}", directory, enc, pending); + return Repository.open(repoConfiguration, directory); }