Use repository dao to find repository for given directory in hooks

This commit is contained in:
René Pfeuffer
2018-11-23 10:13:47 +01:00
parent 4925370a43
commit e8558e07ec
13 changed files with 79 additions and 253 deletions

View File

@@ -38,24 +38,21 @@ package org.eclipse.jgit.transport;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Inject;
import com.google.inject.Provider;
import org.eclipse.jgit.errors.NoRemoteRepositoryException;
import org.eclipse.jgit.errors.NotSupportedException;
import org.eclipse.jgit.errors.TransportException;
import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.RepositoryCache;
import sonia.scm.repository.GitRepositoryHandler;
import sonia.scm.repository.RepositoryDAO;
import sonia.scm.repository.spi.HookEventFacade;
import sonia.scm.web.GitReceiveHook;
//~--- JDK imports ------------------------------------------------------------
import java.io.File;
import java.util.Set;
//~--- JDK imports ------------------------------------------------------------
/**
*
* @author Sebastian Sdorra
@@ -75,24 +72,15 @@ public class ScmTransportProtocol extends TransportProtocol
* Constructs ...
*
*/
public ScmTransportProtocol() {}
// public ScmTransportProtocol() {}
/**
* Constructs ...
*
*
*
* @param hookEventFacadeProvider
*
* @param repositoryHandlerProvider
*/
@Inject
public ScmTransportProtocol(
Provider<HookEventFacade> hookEventFacadeProvider,
Provider<GitRepositoryHandler> repositoryHandlerProvider)
RepositoryDAO repositoryDAO)
{
this.hookEventFacadeProvider = hookEventFacadeProvider;
this.repositoryHandlerProvider = repositoryHandlerProvider;
this.repositoryDAO = repositoryDAO;
}
//~--- methods --------------------------------------------------------------
@@ -136,7 +124,7 @@ public class ScmTransportProtocol extends TransportProtocol
*/
@Override
public Transport open(URIish uri, Repository local, String remoteName)
throws NotSupportedException, TransportException
throws TransportException
{
File localDirectory = local.getDirectory();
File path = local.getFS().resolve(localDirectory, uri.getPath());
@@ -150,8 +138,7 @@ public class ScmTransportProtocol extends TransportProtocol
//J-
return new TransportLocalWithHooks(
hookEventFacadeProvider.get(),
repositoryHandlerProvider.get(),
local, uri, gitDir
local, uri, gitDir, repositoryDAO
);
//J+
}
@@ -194,23 +181,12 @@ public class ScmTransportProtocol extends TransportProtocol
private static class TransportLocalWithHooks extends TransportLocal
{
/**
* Constructs ...
*
*
*
* @param hookEventFacade
* @param handler
* @param local
* @param uri
* @param gitDir
*/
public TransportLocalWithHooks(HookEventFacade hookEventFacade,
GitRepositoryHandler handler, Repository local, URIish uri, File gitDir)
Repository local, URIish uri, File gitDir, RepositoryDAO repositoryDAO)
{
super(local, uri, gitDir);
this.hookEventFacade = hookEventFacade;
this.handler = handler;
this.repositoryDAO = repositoryDAO;
}
//~--- methods ------------------------------------------------------------
@@ -228,9 +204,9 @@ public class ScmTransportProtocol extends TransportProtocol
{
ReceivePack pack = new ReceivePack(dst);
if ((hookEventFacade != null) && (handler != null))
if (hookEventFacade != null)
{
GitReceiveHook hook = new GitReceiveHook(hookEventFacade, handler);
GitReceiveHook hook = new GitReceiveHook(hookEventFacade, repositoryDAO);
pack.setPreReceiveHook(hook);
pack.setPostReceiveHook(hook);
@@ -241,11 +217,9 @@ public class ScmTransportProtocol extends TransportProtocol
//~--- fields -------------------------------------------------------------
/** Field description */
private GitRepositoryHandler handler;
/** Field description */
private HookEventFacade hookEventFacade;
private RepositoryDAO repositoryDAO;
}
@@ -254,6 +228,5 @@ public class ScmTransportProtocol extends TransportProtocol
/** Field description */
private Provider<HookEventFacade> hookEventFacadeProvider;
/** Field description */
private Provider<GitRepositoryHandler> repositoryHandlerProvider;
private RepositoryDAO repositoryDAO;
}

View File

@@ -42,9 +42,8 @@ import org.eclipse.jgit.transport.ReceiveCommand;
import org.eclipse.jgit.transport.ReceivePack;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.repository.GitRepositoryHandler;
import sonia.scm.repository.RepositoryDAO;
import sonia.scm.repository.RepositoryHookType;
import sonia.scm.repository.RepositoryUtil;
import sonia.scm.repository.spi.GitHookContextProvider;
import sonia.scm.repository.spi.HookEventFacade;
@@ -68,19 +67,10 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
//~--- constructors ---------------------------------------------------------
/**
* Constructs ...
*
*
*
* @param hookEventFacade
* @param handler
*/
public GitReceiveHook(HookEventFacade hookEventFacade,
GitRepositoryHandler handler)
public GitReceiveHook(HookEventFacade hookEventFacade, RepositoryDAO repositoryDAO)
{
this.hookEventFacade = hookEventFacade;
this.handler = handler;
this.repositoryDAO = repositoryDAO;
}
//~--- methods --------------------------------------------------------------
@@ -187,7 +177,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
*
* @throws IOException
*/
private String resolveRepositoryId(Repository repository) throws IOException
private String resolveRepositoryId(Repository repository)
{
File directory;
@@ -200,14 +190,13 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
directory = repository.getWorkTree();
}
return RepositoryUtil.getRepositoryId(handler, directory);
return repositoryDAO.getIdForDirectory(directory);
}
//~--- fields ---------------------------------------------------------------
/** Field description */
private GitRepositoryHandler handler;
/** Field description */
private HookEventFacade hookEventFacade;
private final RepositoryDAO repositoryDAO;
}

View File

@@ -36,21 +36,19 @@ package sonia.scm.web;
//~--- non-JDK imports --------------------------------------------------------
import com.google.inject.Inject;
import org.eclipse.jgit.http.server.resolver.DefaultReceivePackFactory;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.ReceivePack;
import org.eclipse.jgit.transport.resolver.ReceivePackFactory;
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
import sonia.scm.repository.GitRepositoryHandler;
import sonia.scm.repository.RepositoryDAO;
import sonia.scm.repository.spi.HookEventFacade;
//~--- JDK imports ------------------------------------------------------------
import javax.servlet.http.HttpServletRequest;
//~--- JDK imports ------------------------------------------------------------
/**
*
* @author Sebastian Sdorra
@@ -59,19 +57,10 @@ public class GitReceivePackFactory
implements ReceivePackFactory<HttpServletRequest>
{
/**
* Constructs ...
*
*
*
* @param hookEventFacade
* @param handler
*/
@Inject
public GitReceivePackFactory(HookEventFacade hookEventFacade,
GitRepositoryHandler handler)
public GitReceivePackFactory(HookEventFacade hookEventFacade, RepositoryDAO repositoryDAO)
{
hook = new GitReceiveHook(hookEventFacade, handler);
hook = new GitReceiveHook(hookEventFacade, repositoryDAO);
}
//~--- methods --------------------------------------------------------------

View File

@@ -127,15 +127,7 @@ public class AbstractRemoteCommandTestBase
{
return null;
}
}, new Provider<GitRepositoryHandler>()
{
@Override
public GitRepositoryHandler get()
{
return null;
}
});
}, null);
Transport.register(proto);
}