mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-01-07 16:12:10 +01:00
Remove hooks for internal repository id
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 ---------------------------------------------------------------
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 ----------------------------------------------------------
|
||||
|
||||
@@ -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 ---------------------------------------------------------------
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 ---------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user