diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportBundleSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportBundleSubCommand.java new file mode 100644 index 0000000000..f107255e42 --- /dev/null +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportBundleSubCommand.java @@ -0,0 +1,152 @@ +/** +* Copyright (c) 2014, 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.io.Files; + +import org.kohsuke.args4j.Option; + +import sonia.scm.ConfigurationException; +import sonia.scm.client.ImportBundleRequest; +import sonia.scm.client.ScmClientSession; +import sonia.scm.repository.Repository; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.File; + +/** + * + * @author Sebastian Sdorra + * @since 1.43 + */ +@Command( + name = "import-from-bundle", + usage = "usageImportBundle", + group = "repository" +) +public class ImportBundleSubCommand extends ImportSubCommand +{ + + /** + * Method description + * + * + * @return + */ + public File getBundle() + { + return bundle; + } + + /** + * Method description + * + * + * @return + */ + public String getName() + { + return name; + } + + //~--- set methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param bundle + */ + public void setBundle(File bundle) + { + this.bundle = bundle; + } + + /** + * Method description + * + * + * @param name + */ + public void setName(String name) + { + this.name = name; + } + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + */ + @Override + protected void run() + { + if (!bundle.exists()) + { + throw new ConfigurationException("could not find bundle"); + } + else + { + ScmClientSession session = createSession(); + + Repository repository = session.getRepositoryHandler().importFromBundle( + new ImportBundleRequest( + getType(), name, Files.asByteSource(bundle))); + + printImportedRepository(repository); + } + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + @Option( + name = "--bundle", + required = true, + usage = "optionRepositoryBundle", + aliases = { "-b" } + ) + private File bundle; + + /** Field description */ + @Option( + name = "--name", + required = true, + usage = "optionRepositoryName", + aliases = { "-n" } + ) + private String name; +} 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 index 8b1eaa09de..788eef4fae 100644 --- 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 @@ -37,8 +37,6 @@ package sonia.scm.cli.cmd; import com.google.common.collect.Maps; -import org.kohsuke.args4j.Argument; - import sonia.scm.client.ImportResultWrapper; import sonia.scm.client.ScmClientSession; diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportSubCommand.java index 5cdbf57d9c..3aea7555fe 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportSubCommand.java @@ -33,8 +33,16 @@ package sonia.scm.cli.cmd; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.collect.Maps; + import org.kohsuke.args4j.Argument; +import sonia.scm.repository.Repository; + +//~--- JDK imports ------------------------------------------------------------ + +import java.util.Map; + /** * * @author Sebastian Sdorra @@ -67,6 +75,22 @@ public abstract class ImportSubCommand extends TemplateSubCommand this.type = type; } + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @param repository + */ + protected void printImportedRepository(Repository repository) + { + Map env = Maps.newHashMap(); + + env.put("repository", repository); + renderTemplate(env, GetRepositorySubCommand.TEMPLATE); + } + //~--- fields --------------------------------------------------------------- /** Field description */ diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportUrlSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportUrlSubCommand.java index 8e29875198..912a9a5fbc 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportUrlSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ImportUrlSubCommand.java @@ -120,10 +120,8 @@ public class ImportUrlSubCommand extends ImportSubCommand url.toExternalForm()); Repository repository = session.getRepositoryHandler().importFromUrl(request); - Map env = Maps.newHashMap(); - env.put("repository", repository); - renderTemplate(env, GetRepositorySubCommand.TEMPLATE); + printImportedRepository(repository); } //~--- fields --------------------------------------------------------------- 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 17218a6806..91f2345948 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 @@ -39,6 +39,7 @@ sonia.scm.cli.cmd.ListRepositoriesSubCommand sonia.scm.cli.cmd.DeleteRepositorySubCommand sonia.scm.cli.cmd.ImportDirectorySubCommand sonia.scm.cli.cmd.ImportUrlSubCommand +sonia.scm.cli.cmd.ImportBundleSubCommand # 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 1a3a7c90c4..47c4ee4ff2 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 @@ -52,6 +52,7 @@ optionRepositoryDescription = Repository description optionRepositoryPublic = Repository public readable optionRepositoryArchive = Repository archived optionRemoteRepositoryUrl = Remote repository url +optionRepositoryBundle = Import repository from a bundle file (e.g. svn dump) optionPermissionGroup = Group optionPermissionName = Group or user name @@ -93,6 +94,7 @@ security = Security level = Logging-Level boolean = true or false URL = url +bundle = file options = Options usage = scm-cli-client [options] command [command options]