mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-15 09:46:16 +01:00
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.
This commit is contained in:
@@ -35,13 +35,10 @@ package sonia.scm.repository;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
import com.google.inject.servlet.RequestScoped;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Sebastian Sdorra
|
||||
*/
|
||||
@RequestScoped
|
||||
public class HgContext
|
||||
{
|
||||
|
||||
|
||||
@@ -63,22 +63,17 @@ public class HgContextProvider implements Provider<HgContext>
|
||||
* @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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user