From 909fe3257432ed50b996e43bec72766c83e26dce Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 12 Jan 2012 14:21:04 +0100 Subject: [PATCH] added api for repository imports --- .../repository/AbstractRepositoryHandler.java | 16 ++ .../sonia/scm/repository/ImportHandler.java | 58 ++++++++ .../scm/repository/RepositoryHandler.java | 14 ++ .../scm/repository/RepositoryManager.java | 17 +++ .../sonia/scm/repository/RepositoryUtil.java | 137 ++++++++++++++++++ .../repository/xml/XmlRepositoryManager.java | 42 +++++- 6 files changed, 281 insertions(+), 3 deletions(-) create mode 100644 scm-core/src/main/java/sonia/scm/repository/ImportHandler.java diff --git a/scm-core/src/main/java/sonia/scm/repository/AbstractRepositoryHandler.java b/scm-core/src/main/java/sonia/scm/repository/AbstractRepositoryHandler.java index fa835e2803..2a459b66d6 100644 --- a/scm-core/src/main/java/sonia/scm/repository/AbstractRepositoryHandler.java +++ b/scm-core/src/main/java/sonia/scm/repository/AbstractRepositoryHandler.java @@ -39,6 +39,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.ConfigChangedListener; +import sonia.scm.NotSupportedFeatuerException; import sonia.scm.SCMContextProvider; import sonia.scm.store.Store; import sonia.scm.store.StoreFactory; @@ -243,6 +244,21 @@ public abstract class AbstractRepositoryHandler searchRepositoryDirectories(File directory, + String... names) + { + List repositories = new ArrayList(); + + searchRepositoryDirectories(repositories, directory, Arrays.asList(names)); + + return repositories; + } + //~--- get methods ---------------------------------------------------------- /** @@ -166,4 +192,115 @@ public class RepositoryUtil return name; } + + /** + * Method description + * + * + * @param handler + * @param directoryNames + * + * @return + * + * @throws IOException + */ + public static List getRepositoryNames( + AbstractRepositoryHandler handler, String... directoryNames) + throws IOException + { + return getRepositoryNames(handler.getConfig(), directoryNames); + } + + /** + * Method description + * + * + * @param config + * @param directoryNames + * + * @return + * + * @throws IOException + */ + public static List getRepositoryNames(SimpleRepositoryConfig config, + String... directoryNames) + throws IOException + { + return getRepositoryNames(config.getRepositoryDirectory(), directoryNames); + } + + /** + * Method description + * + * + * @param baseDirectory + * @param directoryNames + * + * @return + * + * @throws IOException + */ + public static List getRepositoryNames(File baseDirectory, + String... directoryNames) + throws IOException + { + List repositories = new ArrayList(); + List repositoryFiles = searchRepositoryDirectories(baseDirectory, + directoryNames); + + for (File file : repositoryFiles) + { + String name = getRepositoryName(baseDirectory, file); + + if (name != null) + { + repositories.add(name); + } + } + + return repositories; + } + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @param repositories + * @param directory + * @param names + */ + private static void searchRepositoryDirectories(List repositories, + File directory, List names) + { + boolean found = false; + + for (String name : names) + { + if (new File(directory, name).exists()) + { + found = true; + + break; + } + } + + if (found) + { + repositories.add(directory); + } + else + { + File[] directories = directory.listFiles(DirectoryFileFilter.instance); + + if (directories != null) + { + for (File d : directories) + { + searchRepositoryDirectories(repositories, d, names); + } + } + } + } } diff --git a/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java b/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java index 1134ee7e48..79a42a53a4 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java @@ -163,12 +163,12 @@ public class XmlRepositoryManager extends AbstractRepositoryManager * * * @param repository + * @param createRepository * * @throws IOException * @throws RepositoryException */ - @Override - public void create(Repository repository) + public void create(Repository repository, boolean createRepository) throws RepositoryException, IOException { if (logger.isInfoEnabled()) @@ -187,7 +187,11 @@ public class XmlRepositoryManager extends AbstractRepositoryManager repository.setId(UUID.randomUUID().toString()); repository.setCreationDate(System.currentTimeMillis()); - getHandler(repository).create(repository); + + if (createRepository) + { + getHandler(repository).create(repository); + } synchronized (XmlRepositoryDatabase.class) { @@ -198,6 +202,22 @@ public class XmlRepositoryManager extends AbstractRepositoryManager fireEvent(repository, HandlerEvent.CREATE); } + /** + * Method description + * + * + * @param repository + * + * @throws IOException + * @throws RepositoryException + */ + @Override + public void create(Repository repository) + throws RepositoryException, IOException + { + create(repository, true); + } + /** * Method description * @@ -285,6 +305,22 @@ public class XmlRepositoryManager extends AbstractRepositoryManager fireHookEvent(repository, event); } + /** + * Method description + * + * + * @param repository + * + * @throws IOException + * @throws RepositoryException + */ + @Override + public void importRepository(Repository repository) + throws RepositoryException, IOException + { + create(repository, false); + } + /** * Method description *