diff --git a/scm-ui/pom.xml b/scm-ui/pom.xml index 58c935ad21..e05c9b0ade 100644 --- a/scm-ui/pom.xml +++ b/scm-ui/pom.xml @@ -68,6 +68,7 @@ + ${skipTests} diff --git a/scm-webapp/src/main/java/sonia/scm/ManagerDaoAdapter.java b/scm-webapp/src/main/java/sonia/scm/ManagerDaoAdapter.java index b94ce934f6..abc9ab2fd9 100644 --- a/scm-webapp/src/main/java/sonia/scm/ManagerDaoAdapter.java +++ b/scm-webapp/src/main/java/sonia/scm/ManagerDaoAdapter.java @@ -4,6 +4,7 @@ import com.github.sdorra.ssp.PermissionCheck; import sonia.scm.util.AssertUtil; import java.util.function.Function; +import java.util.function.Predicate; import java.util.function.Supplier; public class ManagerDaoAdapter { @@ -38,9 +39,13 @@ public class ManagerDaoAdapter { } public T create(T newObject, Supplier permissionCheck, AroundHandler beforeCreate, AroundHandler afterCreate) throws E { + return create(newObject, permissionCheck, beforeCreate, afterCreate, dao::contains); + } + + public T create(T newObject, Supplier permissionCheck, AroundHandler beforeCreate, AroundHandler afterCreate, Predicate existsCheck) throws E { permissionCheck.get().check(); AssertUtil.assertIsValid(newObject); - if (dao.contains(newObject)) { + if (existsCheck.test(newObject)) { throw alreadyExistsException.apply(newObject); } newObject.setCreationDate(System.currentTimeMillis()); diff --git a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java index 6998893652..69e969f9cb 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java @@ -42,14 +42,30 @@ import com.google.inject.Singleton; import org.apache.shiro.concurrent.SubjectAwareExecutorService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import sonia.scm.*; +import sonia.scm.ArgumentIsInvalidException; +import sonia.scm.ConfigurationException; +import sonia.scm.HandlerEventType; +import sonia.scm.ManagerDaoAdapter; +import sonia.scm.SCMContextProvider; +import sonia.scm.Type; import sonia.scm.config.ScmConfiguration; import sonia.scm.security.KeyGenerator; -import sonia.scm.util.*; +import sonia.scm.util.AssertUtil; +import sonia.scm.util.CollectionAppender; +import sonia.scm.util.HttpUtil; +import sonia.scm.util.IOUtil; +import sonia.scm.util.Util; import javax.servlet.http.HttpServletRequest; import java.io.IOException; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; @@ -138,7 +154,8 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { } fireEvent(HandlerEventType.BEFORE_CREATE, newRepository); }, - newRepository -> fireEvent(HandlerEventType.CREATE, newRepository) + newRepository -> fireEvent(HandlerEventType.CREATE, newRepository), + newRepository -> repositoryDAO.contains(newRepository.getNamespaceAndName()) ); }