This is an automated email from the ASF dual-hosted git repository. michaelo pushed a commit to branch SCM-917 in repository https://gitbox.apache.org/repos/asf/maven-scm.git
commit 295855cafd86e96541896810c95ac4a7d3facf29 Author: Clemens Quoss <clem...@quoss.de> AuthorDate: Wed Feb 6 09:28:33 2019 +0100 [SCM-917] Implement scm:untag for Subversion provider This closes #88 --- .gitignore | 1 + .../org/apache/maven/scm/ScmUntagParameters.java | 104 ++++++++++++++ .../scm/command/untag/AbstractUntagCommand.java | 17 ++- .../org/apache/maven/scm/plugin/UntagMojo.java | 7 + .../git/gitexe/command/untag/GitUntagCommand.java | 5 +- .../git/jgit/command/untag/JGitUntagCommand.java | 5 +- .../scm/provider/svn/AbstractSvnScmProvider.java | 15 ++ .../maven/scm/provider/svn/TestSvnScmProvider.java | 5 + .../scm/provider/svn/svnexe/SvnExeScmProvider.java | 9 ++ .../svn/svnexe/command/untag/SvnUntagCommand.java | 153 +++++++++++++++++++++ .../command/untag/SvnExeUntagCommandTckTest.java | 100 ++++++++++++++ .../svnexe/command/untag/SvnUntagCommandTest.java | 117 ++++++++++++++++ .../svn/command/untag/SvnUntagCommandTckTest.java | 49 +++++++ pom.xml | 3 +- 14 files changed, 585 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index d93c7cd..2894b8b 100644 --- a/.gitignore +++ b/.gitignore @@ -9,5 +9,6 @@ target build .idea .java-version +nbactions.xml maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/test/repository/CVSROOT/history maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/test/repository/CVSROOT/history diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/ScmUntagParameters.java b/maven-scm-api/src/main/java/org/apache/maven/scm/ScmUntagParameters.java new file mode 100644 index 0000000..cda8ab3 --- /dev/null +++ b/maven-scm-api/src/main/java/org/apache/maven/scm/ScmUntagParameters.java @@ -0,0 +1,104 @@ +package org.apache.maven.scm; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.Serializable; + +/** + * parameters used by implementation to perform untag operation + * + * @since 1.11.2 + */ +public class ScmUntagParameters + implements Serializable +{ + /** + * serial version id + */ + private static final long serialVersionUID = -7508529445894924957L; + + /** + * id of tag to delete/remove + */ + private String tag; + + /** + * commit message + */ + private String message; + + /** + * constructor with tag and message + * + * @param tag tag id + * @param message commit message + */ + public ScmUntagParameters( String tag, String message ) + { + this.tag = tag; + this.message = message; + } + + /** + * get tag id + * + * @return tag id + */ + public String getTag() + { + return tag; + } + + /** + * set tag id + * + * @param tag tag id + */ + public void setTag( String tag ) + { + this.tag = tag; + } + + /** + * get commit message + * + * @return commit message + */ + public String getMessage() + { + return message; + } + + /** + * set commit message + * + * @param message commit message + */ + public void setMessage( String message ) + { + this.message = message; + } + + @Override + public String toString() + { + return ScmUntagParameters.class.getSimpleName() + " [tag=" + tag + ", message=" + message + "]"; + } +} diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/command/untag/AbstractUntagCommand.java b/maven-scm-api/src/main/java/org/apache/maven/scm/command/untag/AbstractUntagCommand.java index bbbb0c8..d3a9c16 100644 --- a/maven-scm-api/src/main/java/org/apache/maven/scm/command/untag/AbstractUntagCommand.java +++ b/maven-scm-api/src/main/java/org/apache/maven/scm/command/untag/AbstractUntagCommand.java @@ -24,6 +24,7 @@ import org.apache.maven.scm.CommandParameters; import org.apache.maven.scm.ScmException; import org.apache.maven.scm.ScmFileSet; import org.apache.maven.scm.ScmResult; +import org.apache.maven.scm.ScmUntagParameters; import org.apache.maven.scm.command.AbstractCommand; import org.apache.maven.scm.provider.ScmProviderRepository; @@ -31,18 +32,30 @@ import org.apache.maven.scm.provider.ScmProviderRepository; public abstract class AbstractUntagCommand extends AbstractCommand { + /** + * execute untag command + * + * @param repository scm repo + * @param fileSet set of files (unused) + * @param scmUntagParameters parameters used by untag implementations + * @return result of untag command + * @throws ScmException in case of error + */ protected abstract ScmResult executeUntagCommand( ScmProviderRepository repository, - ScmFileSet fileSet, String tagName ) + ScmFileSet fileSet, ScmUntagParameters scmUntagParameters ) throws ScmException; /** {@inheritDoc} */ + @Override public ScmResult executeCommand( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters ) throws ScmException { String tagName = parameters.getString( CommandParameter.TAG_NAME ); + String message = parameters.getString( CommandParameter.MESSAGE, "[maven-scm] remove tag " + tagName ); + ScmUntagParameters scmUntagParameters = new ScmUntagParameters( tagName, message ); - return executeUntagCommand( repository, fileSet, tagName ); + return executeUntagCommand( repository, fileSet, scmUntagParameters ); } } diff --git a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/UntagMojo.java b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/UntagMojo.java index 3368b53..ed915fe 100644 --- a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/UntagMojo.java +++ b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/UntagMojo.java @@ -43,6 +43,12 @@ public class UntagMojo @Parameter( property = "tag", required = true ) private String tag; + /** + * The commit message. + */ + @Parameter( property = "message", required = false ) + private String message; + /** {@inheritDoc} */ public void execute() throws MojoExecutionException @@ -59,6 +65,7 @@ public class UntagMojo CommandParameters parameters = new CommandParameters(); parameters.setString( CommandParameter.TAG_NAME, finalTag ); + parameters.setString( CommandParameter.MESSAGE, message ); UntagScmResult result = provider.untag( repository, getFileSet(), parameters ); diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/untag/GitUntagCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/untag/GitUntagCommand.java index 8c8798d..31e1543 100644 --- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/untag/GitUntagCommand.java +++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/untag/GitUntagCommand.java @@ -24,6 +24,7 @@ import java.io.File; import org.apache.maven.scm.ScmException; import org.apache.maven.scm.ScmFileSet; import org.apache.maven.scm.ScmResult; +import org.apache.maven.scm.ScmUntagParameters; import org.apache.maven.scm.command.untag.AbstractUntagCommand; import org.apache.maven.scm.command.untag.UntagScmResult; import org.apache.maven.scm.provider.ScmProviderRepository; @@ -41,9 +42,11 @@ public class GitUntagCommand { /** {@inheritDoc} */ - public ScmResult executeUntagCommand( ScmProviderRepository repo, ScmFileSet fileSet, String tag ) + public ScmResult executeUntagCommand( ScmProviderRepository repo, ScmFileSet fileSet, + ScmUntagParameters scmUntagParameters ) throws ScmException { + String tag = scmUntagParameters.getTag(); if ( tag == null || StringUtils.isEmpty( tag.trim() ) ) { throw new ScmException( "tag name must be specified" ); diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/untag/JGitUntagCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/untag/JGitUntagCommand.java index 3cc629e..074f8fb 100644 --- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/untag/JGitUntagCommand.java +++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/untag/JGitUntagCommand.java @@ -24,6 +24,7 @@ import java.util.Collection; import org.apache.maven.scm.ScmException; import org.apache.maven.scm.ScmFileSet; import org.apache.maven.scm.ScmResult; +import org.apache.maven.scm.ScmUntagParameters; import org.apache.maven.scm.command.untag.AbstractUntagCommand; import org.apache.maven.scm.command.untag.UntagScmResult; import org.apache.maven.scm.log.ScmLogger; @@ -44,8 +45,10 @@ public class JGitUntagCommand extends AbstractUntagCommand implements GitCommand @Override protected ScmResult executeUntagCommand( ScmProviderRepository repository, ScmFileSet fileSet, - String tagName ) throws ScmException + ScmUntagParameters scmUntagParameters ) + throws ScmException { + String tagName = scmUntagParameters.getTag(); if ( tagName == null || StringUtils.isEmpty( tagName.trim() ) ) { throw new ScmException( "tag name must be specified" ); diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java index f1e49e5..de6e929 100644 --- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java +++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java @@ -42,12 +42,14 @@ import org.apache.maven.scm.command.mkdir.MkdirScmResult; import org.apache.maven.scm.command.remove.RemoveScmResult; import org.apache.maven.scm.command.status.StatusScmResult; import org.apache.maven.scm.command.tag.TagScmResult; +import org.apache.maven.scm.command.untag.UntagScmResult; import org.apache.maven.scm.command.update.UpdateScmResult; import org.apache.maven.scm.provider.AbstractScmProvider; import org.apache.maven.scm.provider.ScmProviderRepository; import org.apache.maven.scm.provider.svn.command.SvnCommand; import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository; import org.apache.maven.scm.provider.svn.util.SvnUtil; +import org.apache.maven.scm.repository.ScmRepository; import org.apache.maven.scm.repository.ScmRepositoryException; import org.apache.maven.scm.repository.UnknownRepositoryStructure; import org.codehaus.plexus.util.StringUtils; @@ -413,6 +415,19 @@ public abstract class AbstractSvnScmProvider return (TagScmResult) executeCommand( getTagCommand(), repository, fileSet, parameters ); } + protected abstract SvnCommand getUntagCommand(); + + /** + * {@inheritDoc} + */ + @Override + public UntagScmResult untag( ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters ) + throws ScmException + { + return (UntagScmResult) executeCommand( getUntagCommand(), repository.getProviderRepository(), + fileSet, parameters ); + } + protected abstract SvnCommand getUpdateCommand(); /** diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/TestSvnScmProvider.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/TestSvnScmProvider.java index c14c683..7c7afa8 100644 --- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/TestSvnScmProvider.java +++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/TestSvnScmProvider.java @@ -79,6 +79,11 @@ public class TestSvnScmProvider return null; } + protected SvnCommand getUntagCommand() + { + return null; + } + protected SvnCommand getUpdateCommand() { return null; diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java index 06393d1..ddf3460 100644 --- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java +++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java @@ -44,6 +44,7 @@ import org.apache.maven.scm.provider.svn.svnexe.command.remoteinfo.SvnRemoteInfo import org.apache.maven.scm.provider.svn.svnexe.command.remove.SvnRemoveCommand; import org.apache.maven.scm.provider.svn.svnexe.command.status.SvnStatusCommand; import org.apache.maven.scm.provider.svn.svnexe.command.tag.SvnTagCommand; +import org.apache.maven.scm.provider.svn.svnexe.command.untag.SvnUntagCommand; import org.apache.maven.scm.provider.svn.svnexe.command.update.SvnUpdateCommand; import org.apache.maven.scm.repository.ScmRepositoryException; @@ -138,6 +139,14 @@ public class SvnExeScmProvider /** * {@inheritDoc} */ + protected SvnCommand getUntagCommand() + { + return new SvnUntagCommand(); + } + + /** + * {@inheritDoc} + */ protected SvnCommand getUpdateCommand() { return new SvnUpdateCommand(); diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/untag/SvnUntagCommand.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/untag/SvnUntagCommand.java new file mode 100644 index 0000000..de49edc --- /dev/null +++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/untag/SvnUntagCommand.java @@ -0,0 +1,153 @@ +package org.apache.maven.scm.provider.svn.svnexe.command.untag; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; +import java.io.IOException; +import org.apache.maven.scm.ScmException; +import org.apache.maven.scm.ScmFileSet; +import org.apache.maven.scm.ScmResult; +import org.apache.maven.scm.ScmTag; +import org.apache.maven.scm.ScmUntagParameters; +import org.apache.maven.scm.command.untag.AbstractUntagCommand; +import org.apache.maven.scm.command.untag.UntagScmResult; +import org.apache.maven.scm.provider.ScmProviderRepository; +import org.apache.maven.scm.provider.svn.SvnCommandUtils; +import org.apache.maven.scm.provider.svn.SvnTagBranchUtils; +import org.apache.maven.scm.provider.svn.command.SvnCommand; +import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository; +import org.apache.maven.scm.provider.svn.svnexe.command.SvnCommandLineUtils; +import org.codehaus.plexus.util.FileUtils; +import org.codehaus.plexus.util.Os; +import org.codehaus.plexus.util.cli.CommandLineException; +import org.codehaus.plexus.util.cli.CommandLineUtils; +import org.codehaus.plexus.util.cli.Commandline; + +/** + * scm:untag for provider svn is done by removing the tag dir + * + * @since 1.11.2 + */ +public class SvnUntagCommand extends AbstractUntagCommand implements SvnCommand +{ + + /** {@inheritDoc} */ + @Override + public ScmResult executeUntagCommand( ScmProviderRepository repo, ScmFileSet fileSet, + ScmUntagParameters scmUntagParameters ) throws ScmException + { + String tag = scmUntagParameters.getTag(); + if ( tag == null || tag.trim().isEmpty() ) + { + throw new ScmException( "tag must be specified" ); + } + + SvnScmProviderRepository repository = (SvnScmProviderRepository) repo; + + File messageFile = FileUtils.createTempFile( "maven-scm-", ".commit", null ); + + String message = scmUntagParameters.getMessage(); + try + { + FileUtils.fileWrite( messageFile.getAbsolutePath(), "UTF-8", message ); + } + catch ( IOException ex ) + { + return new UntagScmResult( null, "Error while making a temporary file for the commit message: " + + ex.getMessage(), null, false ); + } + + Commandline cl = createCommandline( repository, fileSet, tag, messageFile ); + + CommandLineUtils.StringStreamConsumer stdout = new CommandLineUtils.StringStreamConsumer(); + + CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer(); + + if ( getLogger().isInfoEnabled() ) + { + getLogger().info( "Executing: " + SvnCommandLineUtils.cryptPassword( cl ) ); + + if ( Os.isFamily( Os.FAMILY_WINDOWS ) ) + { + getLogger().info( "Working directory: " + cl.getWorkingDirectory().getAbsolutePath() ); + } + } + + int exitCode; + + try + { + exitCode = SvnCommandLineUtils.execute( cl, stdout, stderr, getLogger() ); + } + catch ( CommandLineException ex ) + { + throw new ScmException( "Error while executing svn remove command.", ex ); + } + finally + { + try + { + FileUtils.forceDelete( messageFile ); + } + catch ( IOException ex ) + { + // ignore + } + } + + if ( exitCode == 0 ) + { + return new UntagScmResult( cl.toString(), "The svn remove command was successful.", + stderr.getOutput(), true ); + } + else + { + return new UntagScmResult( cl.toString(), "The svn remove command failed.", stderr.getOutput(), false ); + } + + } + + /** + * create command line from parameters + * + * @param repo svn repo tu delete tag from + * @param fileSet file set containing base dir + * @param tag tag to delete + * @param messageFile file containing commit message + * @return command line instance + */ + Commandline createCommandline( SvnScmProviderRepository repo, ScmFileSet fileSet, String tag, File messageFile ) + { + Commandline cl = SvnCommandLineUtils.getBaseSvnCommandLine( fileSet.getBasedir(), repo ); + + cl.createArg().setValue( "--file" ); + + cl.createArg().setValue( messageFile.getAbsolutePath() ); + + cl.createArg().setValue( "remove" ); + + String tagUrl = SvnTagBranchUtils.resolveTagUrl( repo, new ScmTag( tag ) ); + tagUrl = SvnCommandUtils.fixUrl( tagUrl, repo.getUser() ); + cl.createArg().setValue( tagUrl + "@" ); + + return cl; + } + +} diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/untag/SvnExeUntagCommandTckTest.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/untag/SvnExeUntagCommandTckTest.java new file mode 100644 index 0000000..8dc0f69 --- /dev/null +++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/untag/SvnExeUntagCommandTckTest.java @@ -0,0 +1,100 @@ +package org.apache.maven.scm.provider.svn.svnexe.command.untag; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; +import org.apache.maven.scm.ScmFileSet; + +import org.apache.maven.scm.provider.svn.command.untag.SvnUntagCommandTckTest; +import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository; +import org.apache.maven.scm.repository.ScmRepository; +import org.codehaus.plexus.util.cli.Commandline; + +/** + * This test tests the untag command for Subversion. + * + */ +public class SvnExeUntagCommandTckTest + extends SvnUntagCommandTckTest +{ + /** + * test against ssh repository with user + * + * @throws Exception in case of error + */ + public void testUntagSsh() + throws Exception + { + File messageFile = File.createTempFile( "maven-scm", "commit" ); + messageFile.deleteOnExit(); + + ScmFileSet scmFileSet = new ScmFileSet( new File ( "target/svn-untag-command-test" ) ); + + testCommandLine( "scm:svn:svn+ssh://foo.com/svn/trunk", scmFileSet, "svntag", messageFile, + "user", "svn --username user --no-auth-cache --non-interactive --file " + + messageFile.getAbsolutePath() + " remove svn+ssh://u...@foo.com/svn/tags/svntag@" ); + } + + /** + * test against https repository with user + * + * @throws Exception in case of error + */ + public void testUntagHttps() + throws Exception + { + File messageFile = File.createTempFile( "maven-scm", "commit" ); + messageFile.deleteOnExit(); + + ScmFileSet scmFileSet = new ScmFileSet( new File ( "target/svn-untag-command-test" ) ); + + testCommandLine( "scm:svn:https://foo.com/svn/tags", scmFileSet, "svntag", messageFile, + "user", "svn --username user --no-auth-cache --non-interactive --file " + + messageFile.getAbsolutePath() + " remove https://foo.com/svn/tags/svntag@" ); + } + + /** + * test routine, build command line and assert + * + * @param scmUrl url to svn repo + * @param scmFileSet file set for local dir + * @param tag tag to delete + * @param messageFile file containing commit message + * @param user user to acces the repo with + * @param commandLine set command line for comparison + * @throws Exception in case of error + */ + private void testCommandLine( String scmUrl, ScmFileSet scmFileSet, String tag, File messageFile, String user, + String commandLine ) + throws Exception + { + File workingDirectory = getTestFile( "target/svn-untag-command-test" ); + + ScmRepository repository = getScmManager().makeScmRepository( scmUrl ); + + SvnScmProviderRepository svnRepository = (SvnScmProviderRepository) repository.getProviderRepository(); + + svnRepository.setUser( user ); + + Commandline cl = new SvnUntagCommand().createCommandline( svnRepository, scmFileSet, tag, messageFile ); + + assertCommandLine( commandLine, workingDirectory, cl ); + } +} diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/untag/SvnUntagCommandTest.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/untag/SvnUntagCommandTest.java new file mode 100644 index 0000000..7838a0c --- /dev/null +++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/untag/SvnUntagCommandTest.java @@ -0,0 +1,117 @@ +package org.apache.maven.scm.provider.svn.svnexe.command.untag; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.maven.scm.ScmTestCase; +import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository; +import org.apache.maven.scm.repository.ScmRepository; +import org.codehaus.plexus.util.cli.Commandline; + +import java.io.File; +import org.apache.maven.scm.ScmFileSet; + +/** + * test the subversion untag implementation + * + */ +public class SvnUntagCommandTest + extends ScmTestCase +{ + + /** + * test with http repo and user + * + * @throws Exception in case of error + */ + public void testUntagHttp() + throws Exception + { + + File messageFile = File.createTempFile( "maven-scm", "untag" ); + messageFile.deleteOnExit(); + + testCommandLine( "scm:svn:http://foo.com/svn/tags", new ScmFileSet( getUntagTestFile() ), "svntag", "user", + messageFile, "svn --username user --no-auth-cache --non-interactive " + + "--file " + messageFile.getAbsolutePath() + " remove http://foo.com/svn/tags/svntag@" ); + } + + /** + * test with ssh repo and user + * + * @throws Exception in case of error + */ + public void testUntagSsh() + throws Exception + { + + File messageFile = File.createTempFile( "maven-scm", "untag" ); + messageFile.deleteOnExit(); + + testCommandLine( "scm:svn:svn+ssh://foo.com/svn/tags", new ScmFileSet( getUntagTestFile() ), "svntag", "user", + messageFile, "svn --username user --no-auth-cache --non-interactive " + + "--file " + messageFile.getAbsolutePath() + " remove svn+ssh://u...@foo.com/svn/tags/svntag@" ); + } + + /** + * define path to local dir + * + * @return local dir + */ + private File getUntagTestFile() + { + return getTestFile( "target/svn-untag-command-test" ); + } + + /** + * get svn repo instance + * + * @param scmUrl url to svn repo + * @return svn repo instance + * @throws Exception in case of error + */ + private SvnScmProviderRepository getSvnRepository( String scmUrl ) + throws Exception + { + ScmRepository repository = getScmManager().makeScmRepository( scmUrl ); + + return (SvnScmProviderRepository) repository.getProviderRepository(); + } + + /** + * test routine for command line + * + * @param scmUrl url to build repo instnace from + * @param scmFileSet file set containing local base dir + * @param tag tag to delete + * @param user svn user for repo access + * @param messageFile file containing commit message + * @param commandline set command line to compare actual to + * @throws Exception in case of error + */ + private void testCommandLine( String scmUrl, ScmFileSet scmFileSet, String tag, String user, File messageFile, + String commandline ) throws Exception + { + SvnScmProviderRepository repo = getSvnRepository( scmUrl ); + repo.setUser(user); + Commandline cl = new SvnUntagCommand().createCommandline( repo, scmFileSet, tag, messageFile ); + + assertCommandLine( commandline, scmFileSet.getBasedir(), cl ); + } +} diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svntest/src/main/java/org/apache/maven/scm/provider/svn/command/untag/SvnUntagCommandTckTest.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svntest/src/main/java/org/apache/maven/scm/provider/svn/command/untag/SvnUntagCommandTckTest.java new file mode 100644 index 0000000..c8cb9d7 --- /dev/null +++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svntest/src/main/java/org/apache/maven/scm/provider/svn/command/untag/SvnUntagCommandTckTest.java @@ -0,0 +1,49 @@ +package org.apache.maven.scm.provider.svn.command.untag; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.maven.scm.provider.svn.SvnScmTestUtils; +import org.apache.maven.scm.tck.command.untag.UntagCommandTckTest; + +import java.io.File; + +/** + * This test tests the tag command. + * + * @author <a href="mailto:br...@apache.org">Brett Porter</a> + * + */ +public class SvnUntagCommandTckTest + extends UntagCommandTckTest +{ + /** {@inheritDoc} */ + public String getScmUrl() + throws Exception + { + return SvnScmTestUtils.getScmUrl( new File( getRepositoryRoot(), "trunk" ) ); + } + + /** {@inheritDoc} */ + public void initRepo() + throws Exception + { + SvnScmTestUtils.initializeRepository( getRepositoryRoot() ); + } +} diff --git a/pom.xml b/pom.xml index 6a3b1ca..3405fe8 100644 --- a/pom.xml +++ b/pom.xml @@ -349,7 +349,8 @@ <exclude>src/test/linear-changelog/**</exclude> <exclude>src/test/tck-repository/**</exclude> <exclude>src/main/resources/tck/**</exclude> - <exclude>.travis.yml </exclude> + <exclude>.travis.yml</exclude> + <exclude>nbactions.xml</exclude> </excludes> </configuration> </plugin>