diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryDAO.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryDAO.java index c04a1d993f..c78a4e9ff6 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryDAO.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryDAO.java @@ -75,7 +75,7 @@ public interface RepositoryDAO extends GenericDAO * 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); } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/HookEventFacade.java b/scm-core/src/main/java/sonia/scm/repository/spi/HookEventFacade.java index 8dec9cf212..dc814f079e 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/HookEventFacade.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/HookEventFacade.java @@ -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); } diff --git a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryDAO.java b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryDAO.java index e7d3a84d41..930df7a153 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryDAO.java +++ b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryDAO.java @@ -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()); diff --git a/scm-dao-xml/src/test/java/sonia/scm/repository/xml/XmlRepositoryDAOTest.java b/scm-dao-xml/src/test/java/sonia/scm/repository/xml/XmlRepositoryDAOTest.java index 91be3597cb..f75e9dd13e 100644 --- a/scm-dao-xml/src/test/java/sonia/scm/repository/xml/XmlRepositoryDAOTest.java +++ b/scm-dao-xml/src/test/java/sonia/scm/repository/xml/XmlRepositoryDAOTest.java @@ -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); } } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitReceiveHook.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitReceiveHook.java index a3ff0b2423..0772249561 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitReceiveHook.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitReceiveHook.java @@ -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 --------------------------------------------------------------- diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookChangesetProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookChangesetProvider.java index 21f35587ed..695328f268 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookChangesetProvider.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookChangesetProvider.java @@ -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; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookContextProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookContextProvider.java index 5b354ecec4..2bc75eaffa 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookContextProvider.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookContextProvider.java @@ -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 ---------------------------------------------------------- diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgHookCallbackServlet.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgHookCallbackServlet.java index 1e480821c8..35b01b35cd 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgHookCallbackServlet.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgHookCallbackServlet.java @@ -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 --------------------------------------------------------------- diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgHookCallbackServletTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgHookCallbackServletTest.java index 0cc35686bc..d436d67490 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgHookCallbackServletTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgHookCallbackServletTest.java @@ -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); diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHook.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHook.java index 1722e70453..f1b9109239 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHook.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHook.java @@ -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 ---------------------------------------------------------------