Remove hooks for internal repository id

This commit is contained in:
René Pfeuffer
2018-11-23 16:12:35 +01:00
parent 1a9c3a1a6c
commit c8fc673ce0
10 changed files with 44 additions and 52 deletions

View File

@@ -75,7 +75,7 @@ public interface RepositoryDAO extends GenericDAO<Repository>
* may be the root directory of the repository or any other directory or file
* inside the root directory.
*
* @throws {@link RuntimeException} when there is no repository for the given path.
* @throws {@link sonia.scm.NotFoundException} when there is no repository for the given path.
*/
String getIdForDirectory(File path);
Repository getRepositoryForDirectory(File path);
}

View File

@@ -73,15 +73,6 @@ public final class HookEventFacade
//~--- methods --------------------------------------------------------------
public HookEventHandler handle(String id) {
Repository repository = repositoryManagerProvider.get().get(id);
if (repository == null)
{
throw notFound(entity("repository", id));
}
return handle(repository);
}
public HookEventHandler handle(NamespaceAndName namespaceAndName) {
Repository repository = repositoryManagerProvider.get().get(namespaceAndName);
if (repository == null)
@@ -91,7 +82,7 @@ public final class HookEventFacade
return handle(repository);
}
private HookEventHandler handle(Repository repository) {
public HookEventHandler handle(Repository repository) {
return new HookEventHandler(repositoryManagerProvider.get(),
hookContextFactory, repository);
}

View File

@@ -184,10 +184,10 @@ public class XmlRepositoryDAO
}
@Override
public String getIdForDirectory(File path) {
public Repository getRepositoryForDirectory(File path) {
for (RepositoryPath p : db.getPaths()) {
if (toRealPath(path.toPath()).startsWith(toRealPath(context.getBaseDirectory().toPath().resolve(p.getPath())))) {
return p.getId();
return p.getRepository();
}
}
throw new NotFoundException("directory", path.getPath());

View File

@@ -116,9 +116,9 @@ public class XmlRepositoryDAOTest {
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), fileSystem, context);
String id = dao.getIdForDirectory(new File(context.getBaseDirectory(), "relative/path/data"));
Repository repository = dao.getRepositoryForDirectory(new File(context.getBaseDirectory(), "relative/path/data"));
assertThat(id).isEqualTo("id");
assertThat(repository).isSameAs(existingRepository);
}
@Test
@@ -130,9 +130,9 @@ public class XmlRepositoryDAOTest {
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), fileSystem, context);
String id = dao.getIdForDirectory(folder);
Repository repository = dao.getRepositoryForDirectory(folder);
assertThat(id).isEqualTo("id");
assertThat(repository).isSameAs(existingRepository);
}
@Test
@@ -146,8 +146,8 @@ public class XmlRepositoryDAOTest {
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), fileSystem, context);
String id = dao.getIdForDirectory(folder);
Repository repository = dao.getRepositoryForDirectory(folder);
assertThat(id).isEqualTo("id");
assertThat(repository).isSameAs(existingRepository);
}
}

View File

@@ -118,14 +118,14 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
try
{
Repository repository = rpack.getRepository();
String id = resolveRepositoryId(repository);
sonia.scm.repository.Repository scmRepository = resolveRepositoryId(repository);
logger.trace("resolved repository to id {}", id);
logger.trace("resolved repository to {}", scmRepository.getNamespaceAndName());
GitHookContextProvider context = new GitHookContextProvider(rpack,
receiveCommands);
hookEventFacade.handle(id).fireHookEvent(type, context);
hookEventFacade.handle(scmRepository).fireHookEvent(type, context);
}
catch (Exception ex)
@@ -177,7 +177,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
*
* @throws IOException
*/
private String resolveRepositoryId(Repository repository)
private sonia.scm.repository.Repository resolveRepositoryId(Repository repository)
{
File directory;
@@ -190,7 +190,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
directory = repository.getWorkTree();
}
return repositoryDAO.getIdForDirectory(directory);
return repositoryDAO.getRepositoryForDirectory(directory);
}
//~--- fields ---------------------------------------------------------------

View File

@@ -62,11 +62,11 @@ public class HgHookChangesetProvider implements HookChangesetProvider
//~--- constructors ---------------------------------------------------------
public HgHookChangesetProvider(HgRepositoryHandler handler,
String id, HgHookManager hookManager, String startRev,
RepositoryHookType type)
sonia.scm.repository.Repository repository, HgHookManager hookManager, String startRev,
RepositoryHookType type)
{
this.handler = handler;
this.id = id;
this.repository = repository;
this.hookManager = hookManager;
this.startRev = startRev;
this.type = type;
@@ -123,9 +123,7 @@ public class HgHookChangesetProvider implements HookChangesetProvider
*/
private Repository open()
{
sonia.scm.repository.Repository repo = new sonia.scm.repository.Repository();
repo.setId(id);
File repositoryDirectory = handler.getDirectory(repo);
File repositoryDirectory = handler.getDirectory(repository);
// use HG_PENDING only for pre receive hooks
boolean pending = type == RepositoryHookType.PRE_RECEIVE;
@@ -144,7 +142,7 @@ public class HgHookChangesetProvider implements HookChangesetProvider
private HgHookManager hookManager;
/** Field description */
private String id;
private sonia.scm.repository.Repository repository;
/** Field description */
private HookChangesetResponse response;

View File

@@ -35,6 +35,7 @@ package sonia.scm.repository.spi;
import sonia.scm.repository.HgHookManager;
import sonia.scm.repository.HgRepositoryHandler;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryHookType;
import sonia.scm.repository.api.HgHookBranchProvider;
import sonia.scm.repository.api.HgHookMessageProvider;
@@ -67,16 +68,16 @@ public class HgHookContextProvider extends HookContextProvider
* Constructs a new instance.
*
* @param handler mercurial repository handler
* @param namespaceAndName namespace and name of changed repository
* @param repository the changed repository
* @param hookManager mercurial hook manager
* @param startRev start revision
* @param type type of hook
*/
public HgHookContextProvider(HgRepositoryHandler handler,
String id, HgHookManager hookManager, String startRev,
RepositoryHookType type)
Repository repository, HgHookManager hookManager, String startRev,
RepositoryHookType type)
{
this.hookChangesetProvider = new HgHookChangesetProvider(handler, id, hookManager, startRev, type);
this.hookChangesetProvider = new HgHookChangesetProvider(handler, repository, hookManager, startRev, type);
}
//~--- get methods ----------------------------------------------------------

View File

@@ -48,6 +48,7 @@ import sonia.scm.NotFoundException;
import sonia.scm.repository.HgContext;
import sonia.scm.repository.HgHookManager;
import sonia.scm.repository.HgRepositoryHandler;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryDAO;
import sonia.scm.repository.RepositoryHookType;
import sonia.scm.repository.api.HgHookMessage;
@@ -170,7 +171,7 @@ public class HgHookCallbackServlet extends HttpServlet
if (m.matches())
{
String id = getRepositoryId(request);
Repository repository = getRepositoryId(request);
String type = m.group(1);
String challenge = request.getParameter(PARAM_CHALLENGE);
@@ -187,7 +188,7 @@ public class HgHookCallbackServlet extends HttpServlet
authenticate(request, credentials);
}
hookCallback(response, id, type, challenge, node);
hookCallback(response, repository, type, challenge, node);
}
else if (logger.isDebugEnabled())
{
@@ -246,7 +247,7 @@ public class HgHookCallbackServlet extends HttpServlet
}
}
private void fireHook(HttpServletResponse response, String id,
private void fireHook(HttpServletResponse response, Repository repository,
String node, RepositoryHookType type)
throws IOException
{
@@ -259,10 +260,10 @@ public class HgHookCallbackServlet extends HttpServlet
contextProvider.get().setPending(true);
}
context = new HgHookContextProvider(handler, id, hookManager,
context = new HgHookContextProvider(handler, repository, hookManager,
node, type);
hookEventFacade.handle(id).fireHookEvent(type, context);
hookEventFacade.handle(repository).fireHookEvent(type, context);
printMessages(response, context);
}
@@ -280,7 +281,7 @@ public class HgHookCallbackServlet extends HttpServlet
}
}
private void hookCallback(HttpServletResponse response, String id, String typeName, String challenge, String node) throws IOException {
private void hookCallback(HttpServletResponse response, Repository repository, String typeName, String challenge, String node) throws IOException {
if (hookManager.isAcceptAble(challenge))
{
RepositoryHookType type = null;
@@ -296,7 +297,7 @@ public class HgHookCallbackServlet extends HttpServlet
if (type != null)
{
fireHook(response, id, node, type);
fireHook(response, repository, node, type);
}
else
{
@@ -450,20 +451,20 @@ public class HgHookCallbackServlet extends HttpServlet
* @return
*/
@SuppressWarnings("squid:S2083") // we do nothing with the path given, so this should be no issue
private String getRepositoryId(HttpServletRequest request)
private Repository getRepositoryId(HttpServletRequest request)
{
String id = null;
Repository repository = null;
String path = request.getParameter(PARAM_REPOSITORYPATH);
if (Util.isNotEmpty(path)) {
id = repositoryDAO.getIdForDirectory(new File(path));
repository = repositoryDAO.getRepositoryForDirectory(new File(path));
}
else if (logger.isWarnEnabled())
{
logger.warn("no repository path parameter found");
}
return id;
return repository;
}
//~--- fields ---------------------------------------------------------------

View File

@@ -2,6 +2,7 @@ package sonia.scm.web;
import org.junit.Test;
import sonia.scm.repository.HgRepositoryHandler;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryDAO;
import javax.servlet.ServletException;
@@ -23,7 +24,7 @@ public class HgHookCallbackServletTest {
public void shouldExtractCorrectRepositoryId() throws ServletException, IOException {
HgRepositoryHandler handler = mock(HgRepositoryHandler.class);
RepositoryDAO repositoryDAO = mock(RepositoryDAO.class);
when(repositoryDAO.getIdForDirectory(new File("/tmp/hg/12345"))).thenReturn("12345");
when(repositoryDAO.getRepositoryForDirectory(new File("/tmp/hg/12345"))).thenReturn(new Repository("12345", "git", "space", "name"));
HgHookCallbackServlet servlet = new HgHookCallbackServlet(null, handler, null, null, repositoryDAO);
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);

View File

@@ -154,10 +154,10 @@ public class SvnRepositoryHook implements FSHook
{
try
{
String id = getRepositoryId(directory);
Repository repository = getRepositoryId(directory);
//J-
hookEventFacade.handle(id)
hookEventFacade.handle(repository)
.fireHookEvent(
changesetProvider.getType(),
new SvnHookContextProvider(changesetProvider)
@@ -188,11 +188,11 @@ public class SvnRepositoryHook implements FSHook
*
* @throws IOException
*/
private String getRepositoryId(File directory)
private Repository getRepositoryId(File directory)
{
AssertUtil.assertIsNotNull(directory);
return repositoryDAO.getIdForDirectory(directory);
return repositoryDAO.getRepositoryForDirectory(directory);
}
//~--- fields ---------------------------------------------------------------