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()) ); } diff --git a/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java b/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java index 563e140434..25f8c61b3b 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java +++ b/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java @@ -40,6 +40,7 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.EagerSingleton; import sonia.scm.HandlerEventType; import sonia.scm.ManagerDaoAdapter; import sonia.scm.SCMContextProvider; @@ -55,7 +56,11 @@ import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import java.io.IOException; import java.io.InputStream; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; //~--- JDK imports ------------------------------------------------------------ @@ -63,7 +68,7 @@ import java.util.*; * * @author Sebastian Sdorra */ -@Singleton +@Singleton @EagerSingleton public class DefaultUserManager extends AbstractUserManager {