From 74bf119fd713c833d3eb7f6cd5c0e5b21f92c182 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 1 Dec 2014 09:05:59 +0100 Subject: [PATCH] implemented import-from-directory cli sub command --- scm-clients/scm-cli-client/pom.xml | 2 +- .../cli/cmd/ImportDirectorySubCommand.java | 120 ++++++++++++++++++ .../services/sonia.scm.cli.cmd.SubCommand | 1 + .../resources/sonia/resources/i18n.properties | 4 +- .../sonia/resources/import-from-directory.ftl | 9 ++ 5 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportDirectorySubCommand.java create mode 100644 scm-clients/scm-cli-client/src/main/resources/sonia/resources/import-from-directory.ftl diff --git a/scm-clients/scm-cli-client/pom.xml b/scm-clients/scm-cli-client/pom.xml index 2d3e28f780..231ee856d6 100644 --- a/scm-clients/scm-cli-client/pom.xml +++ b/scm-clients/scm-cli-client/pom.xml @@ -40,7 +40,7 @@ args4j args4j - 2.0.28 + 2.0.29 diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportDirectorySubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportDirectorySubCommand.java new file mode 100644 index 0000000000..581cb3079d --- /dev/null +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportDirectorySubCommand.java @@ -0,0 +1,120 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of SCM-Manager; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.cli.cmd; + +//~--- non-JDK imports -------------------------------------------------------- + +import com.google.common.collect.Maps; + +import org.kohsuke.args4j.Argument; + +import sonia.scm.client.ImportResultWrapper; +import sonia.scm.client.ScmClientSession; + +//~--- JDK imports ------------------------------------------------------------ + +import java.util.Map; + +/** + * + * @author Sebastian Sdorra + * @since 1.43 + */ +@Command( + name = "import-from-directory", + usage = "usageImportDirectory", + group = "repository" +) +public class ImportDirectorySubCommand extends TemplateSubCommand +{ + + /** Field description */ + public static final String TEMPLATE = + "/sonia/resources/import-from-directory.ftl"; + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + public String getType() + { + return type; + } + + //~--- set methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param type + */ + public void setType(String type) + { + this.type = type; + } + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + */ + @Override + protected void run() + { + ScmClientSession session = createSession(); + ImportResultWrapper wrapper = + session.getRepositoryHandler().importFromDirectory(type); + Map env = Maps.newHashMap(); + + env.put("importedDirectories", wrapper.getImportedDirectories()); + env.put("failedDirectories", wrapper.getFailedDirectories()); + renderTemplate(env, TEMPLATE); + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + @Argument( + usage = "optionRepositoryType", + metaVar = "repositorytype", + required = true + ) + private String type; +} diff --git a/scm-clients/scm-cli-client/src/main/resources/META-INF/services/sonia.scm.cli.cmd.SubCommand b/scm-clients/scm-cli-client/src/main/resources/META-INF/services/sonia.scm.cli.cmd.SubCommand index b4d344adae..a135f1ff49 100644 --- a/scm-clients/scm-cli-client/src/main/resources/META-INF/services/sonia.scm.cli.cmd.SubCommand +++ b/scm-clients/scm-cli-client/src/main/resources/META-INF/services/sonia.scm.cli.cmd.SubCommand @@ -37,6 +37,7 @@ sonia.scm.cli.cmd.ModifyRepositorySubCommand sonia.scm.cli.cmd.GetRepositorySubCommand sonia.scm.cli.cmd.ListRepositoriesSubCommand sonia.scm.cli.cmd.DeleteRepositorySubCommand +sonia.scm.cli.cmd.ImportDirectorySubCommand # permission sonia.scm.cli.cmd.AddPermissionSubCommand diff --git a/scm-clients/scm-cli-client/src/main/resources/sonia/resources/i18n.properties b/scm-clients/scm-cli-client/src/main/resources/sonia/resources/i18n.properties index 69d88b2cfe..c16468cce9 100644 --- a/scm-clients/scm-cli-client/src/main/resources/sonia/resources/i18n.properties +++ b/scm-clients/scm-cli-client/src/main/resources/sonia/resources/i18n.properties @@ -46,7 +46,7 @@ optionTemplateFile = Template file optionRepositoryId = Repository Id optionRepositoryIdOrTypeAndName = Repository Id or type/name optionRepositoryName = Repository name -optionRepositoryType = Repository name +optionRepositoryType = Repository type optionRepositoryContact = Repository contact optionRepositoryDescription = Repository description optionRepositoryPublic = Repository public readable @@ -81,6 +81,7 @@ permissiontype = value groupname = groupname repositoryid = repositoryid username = username +repositorytype = type config = Configuration misc = Miscellaneous @@ -118,6 +119,7 @@ usageModifyRepository = Modify a repository usageStoreConfig = Stores the current configuration usageVersion = Show the version of scm-cli-client usageServerVersion = Show the version of the scm-manager +usageImportDirectory = Import repositories from repository directory usageEncrypt = Encrypts the given value usageGenerateKey = Generates a unique key \ No newline at end of file diff --git a/scm-clients/scm-cli-client/src/main/resources/sonia/resources/import-from-directory.ftl b/scm-clients/scm-cli-client/src/main/resources/sonia/resources/import-from-directory.ftl new file mode 100644 index 0000000000..33cf9e083e --- /dev/null +++ b/scm-clients/scm-cli-client/src/main/resources/sonia/resources/import-from-directory.ftl @@ -0,0 +1,9 @@ +Imported repositories: +<#list importedDirectories as imported> +- ${imported} + + +Repositories failed to import: +<#list failedDirectories as failed> +- ${failed} + \ No newline at end of file