You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2018/12/30 17:33:43 UTC
[maven-scm] 01/01: [SCM-318] Untag command, with Git implementations
This is an automated email from the ASF dual-hosted git repository.
michaelo pushed a commit to branch SCM-318_2
in repository https://gitbox.apache.org/repos/asf/maven-scm.git
commit 9741b3d12b0f0088ab78d497f20d9280041a61a7
Author: Pr0methean <49...@users.noreply.github.com>
AuthorDate: Tue Jul 31 00:08:53 2018 -0700
[SCM-318] Untag command, with Git implementations
This closes #79
---
.../maven/scm/command/tag/AbstractTagCommand.java | 8 +-
.../scm/command/untag/AbstractUntagCommand.java | 47 +++++++++
.../maven/scm/command/untag/UntagScmResult.java | 43 ++++++++
.../maven/scm/provider/AbstractScmProvider.java | 12 +++
.../org/apache/maven/scm/provider/ScmProvider.java | 13 +++
maven-scm-plugin/pom.xml | 5 +
.../org/apache/maven/scm/plugin/UntagMojo.java | 76 ++++++++++++++
.../org/apache/maven/scm/plugin/TagMojoTest.java | 93 +++++++-----------
.../src/test/resources/git/.gitattributes | 3 +
maven-scm-plugin/src/test/resources/git/HEAD | 1 +
maven-scm-plugin/src/test/resources/git/config | 5 +
.../src/test/resources/git/description | 1 +
.../src/test/resources/git/hooks/empty.txt | 0
.../src/test/resources/git/info/exclude | 6 ++
maven-scm-plugin/src/test/resources/git/logs/HEAD | 3 +
.../src/test/resources/git/logs/refs/heads/master | 3 +
.../resources/git/logs/refs/remotes/origin/master | 1 +
.../17/e953589369a48dcb0a0cbad084a76ef852cd11 | Bin 0 -> 37 bytes
.../1d/308c3b92eb0df9c0dc76436d50edfd0ca41d18 | Bin 0 -> 199 bytes
.../3b/459fa9451a94fc1acd10e2e29ab73d93eb816d | Bin 0 -> 75 bytes
.../3b/d305c57c635aead10cf59f7c1dc51af03edaf7 | Bin 0 -> 116 bytes
.../3c/f7bb86c15554148bf5b0b12bfd639e54a77e58 | Bin 0 -> 46 bytes
.../61/4a3fd04313593d67f4154855a06941046326b3 | Bin 0 -> 23 bytes
.../61/a0d22b023d6e31894d736cca8c1a47b6edd822 | Bin 0 -> 45 bytes
.../92/09a983605d6e43e5cf841a1ea18a1914bb7407 | Bin 0 -> 54 bytes
.../92/f139dfec4d1dfb79c3cd2f94e83bf13129668b | 1 +
.../94/d3d586e355f318d67e3da6bb16a91be7aad1a7 | Bin 0 -> 28 bytes
.../9e/131cfc732b0d9f42b9b712a528d0632d9bcca7 | Bin 0 -> 43 bytes
.../b5/3306f849b69ef0459ddf5cccff06b5fbb08c23 | Bin 0 -> 36 bytes
.../ba/a229a9193371fad604444f64c4f26f8ff702f3 | 1 +
.../ba/cd4ee105073117b30e5dcdba5150373b6b53c6 | Bin 0 -> 60 bytes
.../c3/8b0351660113545db270ba6918cc22a9eb17ce | Bin 0 -> 46 bytes
.../c5/1dcd33e7b71897603c203b5e0afc1d75f70051 | Bin 0 -> 147 bytes
.../dc/4204852765c12f398ef4a5fbcabf23cf17a183 | Bin 0 -> 116 bytes
.../f7/1429f9ff9214a546b438c611ae942c9cf5a49e | Bin 0 -> 46 bytes
.../fd/39fa3de0f63bc5c78eca219e74e0a8531bd3e6 | Bin 0 -> 24 bytes
.../fe/a16119a5b4ec0562d4f65b4237314250773bf8 | Bin 0 -> 27 bytes
.../src/test/resources/git/refs/heads/master | 1 +
.../test/resources/git/refs/remotes/origin/HEAD | 1 +
.../test/resources/git/refs/remotes/origin/master | 1 +
.../src/test/resources/mojos/tag/checkout.xml | 4 +-
.../src/test/resources/mojos/tag/tag.xml | 3 +-
.../{tag/checkout.xml => untag/checkout-tag.xml} | 4 +-
.../test/resources/mojos/{tag => untag}/tag.xml | 3 +-
.../scm/provider/git/AbstractGitScmProvider.java | 12 +++
.../maven/scm/provider/git/TestGitScmProvider.java | 5 +
.../scm/provider/git/gitexe/GitExeScmProvider.java | 7 ++
.../git/gitexe/command/untag/GitUntagCommand.java | 109 +++++++++++++++++++++
.../command/untag/GitExeUntagCommandTckTest.java | 34 +++++++
.../git/command/untag/GitUntagCommandTckTest.java | 50 ++++++++++
.../scm/provider/git/jgit/JGitScmProvider.java | 9 ++
.../git/jgit/command/untag/JGitUntagCommand.java | 108 ++++++++++++++++++++
.../command/untag/JGitUntagCommandTckTest.java | 52 ++++++++++
.../apache/maven/scm/provider/ScmProviderStub.java | 20 ++++
.../scm/tck/command/untag/UntagCommandTckTest.java | 65 ++++++++++++
55 files changed, 741 insertions(+), 69 deletions(-)
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/command/tag/AbstractTagCommand.java b/maven-scm-api/src/main/java/org/apache/maven/scm/command/tag/AbstractTagCommand.java
index 41493d2..c0b4d56 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/command/tag/AbstractTagCommand.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/command/tag/AbstractTagCommand.java
@@ -37,7 +37,7 @@ public abstract class AbstractTagCommand
extends AbstractCommand
{
/**
- * @deprecated use method {@link #executeTagCommand(ScmProviderRepository, ScmFileSet, String, ScmTagParameters)}
+ * @deprecated use method {@link #executeTagCommand(ScmProviderRepository, ScmFileSet, String, ScmTagParameters)}
* @param repository
* @param fileSet
* @param tagName
@@ -54,8 +54,8 @@ public abstract class AbstractTagCommand
protected abstract ScmResult executeTagCommand( ScmProviderRepository repository, ScmFileSet fileSet,
String tagName, ScmTagParameters scmTagParameters )
- throws ScmException;
-
+ throws ScmException;
+
/** {@inheritDoc} */
public ScmResult executeCommand( ScmProviderRepository repository, ScmFileSet fileSet,
CommandParameters parameters )
@@ -81,5 +81,5 @@ public abstract class AbstractTagCommand
return executeTagCommand( repository, fileSet, tagName, scmTagParameters );
}
-
+
}
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
new file mode 100644
index 0000000..53296c5
--- /dev/null
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/command/untag/AbstractUntagCommand.java
@@ -0,0 +1,47 @@
+package org.apache.maven.scm.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.CommandParameter;
+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.command.AbstractCommand;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+
+public abstract class AbstractUntagCommand
+ extends AbstractCommand
+{
+ protected abstract ScmResult executeUntagCommand( ScmProviderRepository repository,
+ ScmFileSet fileSet, String tagName )
+ throws ScmException;
+
+ /** {@inheritDoc} */
+ public ScmResult executeCommand( ScmProviderRepository repository, ScmFileSet fileSet,
+ CommandParameters parameters )
+ throws ScmException
+ {
+ String tagName = parameters.getString( CommandParameter.TAG_NAME );
+
+ return executeUntagCommand( repository, fileSet, tagName );
+ }
+
+}
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/command/untag/UntagScmResult.java b/maven-scm-api/src/main/java/org/apache/maven/scm/command/untag/UntagScmResult.java
new file mode 100644
index 0000000..565628a
--- /dev/null
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/command/untag/UntagScmResult.java
@@ -0,0 +1,43 @@
+package org.apache.maven.scm.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.ScmResult;
+
+public class UntagScmResult
+ extends ScmResult
+{
+ private static final long serialVersionUID = -5068975000282095635L;
+
+ public UntagScmResult( String commandLine, String providerMessage, String commandOutput, boolean success )
+ {
+ super( commandLine, providerMessage, commandOutput, success );
+ }
+
+ public UntagScmResult( String commandLine )
+ {
+ super( commandLine, null, null, true );
+ }
+
+ public UntagScmResult( ScmResult result )
+ {
+ super( result );
+ }
+}
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
index dfcc88d..dcacd11 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
@@ -49,6 +49,7 @@ 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.unedit.UnEditScmResult;
+import org.apache.maven.scm.command.untag.UntagScmResult;
import org.apache.maven.scm.command.update.UpdateScmResult;
import org.apache.maven.scm.log.ScmLogDispatcher;
import org.apache.maven.scm.log.ScmLogger;
@@ -901,6 +902,17 @@ public abstract class AbstractScmProvider
/**
* {@inheritDoc}
+ */
+ public UntagScmResult untag( ScmRepository repository, ScmFileSet fileSet,
+ CommandParameters parameters )
+ throws ScmException
+ {
+ getLogger().warn( "Provider " + this.getScmType() + " does not support untag operation." );
+ return new UntagScmResult( "", null, null, true );
+ }
+
+ /**
+ * {@inheritDoc}
*
* @deprecated
*/
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java
index a2d005f..168c846 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java
@@ -45,6 +45,7 @@ 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.unedit.UnEditScmResult;
+import org.apache.maven.scm.command.untag.UntagScmResult;
import org.apache.maven.scm.command.update.UpdateScmResult;
import org.apache.maven.scm.log.ScmLogger;
import org.apache.maven.scm.repository.ScmRepository;
@@ -642,6 +643,18 @@ public interface ScmProvider
throws ScmException;
/**
+ * Deletes a tag.
+ *
+ * @param repository the source control system
+ * @param fileSet a fileset with the relevant working directory as basedir
+ * @param parameters
+ * @return
+ * @throws ScmException if any
+ */
+ UntagScmResult untag( ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+ throws ScmException;
+
+ /**
* Tag (or label in some systems) will tag the source file with a certain tag
*
* @param repository the source control system
diff --git a/maven-scm-plugin/pom.xml b/maven-scm-plugin/pom.xml
index 9df467a..f865c36 100644
--- a/maven-scm-plugin/pom.xml
+++ b/maven-scm-plugin/pom.xml
@@ -128,6 +128,11 @@
<artifactId>maven-scm-provider-svntest</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.maven.scm</groupId>
+ <artifactId>maven-scm-provider-gittest</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
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
new file mode 100644
index 0000000..3368b53
--- /dev/null
+++ b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/UntagMojo.java
@@ -0,0 +1,76 @@
+package org.apache.maven.scm.plugin;
+
+/*
+ * 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.IOException;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.scm.CommandParameter;
+import org.apache.maven.scm.CommandParameters;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.command.untag.UntagScmResult;
+import org.apache.maven.scm.provider.ScmProvider;
+import org.apache.maven.scm.repository.ScmRepository;
+
+/**
+ * Untag the project.
+ */
+@Mojo( name = "untag", aggregator = true )
+public class UntagMojo
+ extends AbstractScmMojo
+{
+ /**
+ * The tag name.
+ */
+ @Parameter( property = "tag", required = true )
+ private String tag;
+
+ /** {@inheritDoc} */
+ public void execute()
+ throws MojoExecutionException
+ {
+ super.execute();
+
+ try
+ {
+ ScmRepository repository = getScmRepository();
+ ScmProvider provider = getScmManager().getProviderByRepository( repository );
+
+ String finalTag = provider.sanitizeTagName( tag );
+ getLog().info( "Final Tag Name: '" + finalTag + "'" );
+
+ CommandParameters parameters = new CommandParameters();
+ parameters.setString( CommandParameter.TAG_NAME, finalTag );
+
+ UntagScmResult result = provider.untag( repository, getFileSet(), parameters );
+
+ checkResult( result );
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "Cannot run untag command", e );
+ }
+ catch ( ScmException e )
+ {
+ throw new MojoExecutionException( "Cannot run untag command", e );
+ }
+ }
+}
diff --git a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/TagMojoTest.java b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/TagMojoTest.java
index ca5495b..131f9b8 100644
--- a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/TagMojoTest.java
+++ b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/TagMojoTest.java
@@ -19,25 +19,25 @@ package org.apache.maven.scm.plugin;
* under the License.
*/
+import java.io.File;
import org.apache.maven.plugin.testing.AbstractMojoTestCase;
-import org.apache.maven.scm.ScmTestCase;
-import org.apache.maven.scm.provider.svn.SvnScmTestUtils;
+import org.apache.maven.scm.provider.git.GitScmTestUtils;
import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.StringUtils;
-import java.io.File;
-
/**
* @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
*
*/
-public class TagMojoTest
+public class UnTagMojoTest
extends AbstractMojoTestCase
{
File checkoutDir;
File repository;
+ File assertionDir;
+
protected void setUp()
throws Exception
{
@@ -51,17 +51,15 @@ public class TagMojoTest
FileUtils.forceDelete( repository );
- if ( !ScmTestCase.isSystemCmd( SvnScmTestUtils.SVNADMIN_COMMAND_LINE ) )
- {
- ScmTestCase.printSystemCmdUnavail( SvnScmTestUtils.SVNADMIN_COMMAND_LINE, "setUp" );
- return;
- }
+ assertionDir = getTestFile( "target/assert" );
- SvnScmTestUtils.initializeRepository( repository );
+ FileUtils.forceDelete( assertionDir );
+
+ GitScmTestUtils.initRepo("src/test/resources/git", checkoutDir, assertionDir);
CheckoutMojo checkoutMojo = (CheckoutMojo) lookupMojo( "checkout", getTestFile(
- "src/test/resources/mojos/checkout/checkoutWithConnectionUrl.xml" ) );
- checkoutMojo.setWorkingDirectory( new File( getBasedir() ) );
+ "src/test/resources/mojos/untag/checkout.xml" ) );
+ checkoutMojo.setWorkingDirectory( checkoutDir );
String connectionUrl = checkoutMojo.getConnectionUrl();
connectionUrl = StringUtils.replace( connectionUrl, "${basedir}", getBasedir() );
@@ -73,70 +71,49 @@ public class TagMojoTest
checkoutMojo.execute();
}
- public void testTag()
+ public void testUnTag()
throws Exception
{
- if ( !ScmTestCase.isSystemCmd( SvnScmTestUtils.SVNADMIN_COMMAND_LINE ) )
- {
- ScmTestCase.printSystemCmdUnavail( SvnScmTestUtils.SVNADMIN_COMMAND_LINE, getName() );
- return;
- }
- TagMojo mojo = (TagMojo) lookupMojo( "tag", getTestFile( "src/test/resources/mojos/tag/tag.xml" ) );
- mojo.setWorkingDirectory( checkoutDir );
-
- String connectionUrl = mojo.getConnectionUrl();
- connectionUrl = StringUtils.replace( connectionUrl, "${basedir}", getBasedir() );
- connectionUrl = StringUtils.replace( connectionUrl, "\\", "/" );
- mojo.setConnectionUrl( connectionUrl );
-
- mojo.execute();
-
- if ( !ScmTestCase.isSystemCmd( SvnScmTestUtils.SVN_COMMAND_LINE ) )
- {
- ScmTestCase.printSystemCmdUnavail( SvnScmTestUtils.SVN_COMMAND_LINE, getName() );
- return;
- }
+ TagMojo tagMojo = (TagMojo) lookupMojo( "tag", getTestFile( "src/test/resources/mojos/untag/tag.xml" ) );
+ tagMojo.setWorkingDirectory( checkoutDir );
+ tagMojo.setConnectionUrl( getConnectionLocalAddress( tagMojo ) );
+ tagMojo.execute();
CheckoutMojo checkoutMojo =
- (CheckoutMojo) lookupMojo( "checkout", getTestFile( "src/test/resources/mojos/tag/checkout.xml" ) );
+ (CheckoutMojo) lookupMojo( "checkout", getTestFile( "src/test/resources/mojos/untag/checkout-tag.xml" ) );
checkoutMojo.setWorkingDirectory( new File( getBasedir() ) );
-
- connectionUrl = checkoutMojo.getConnectionUrl();
- connectionUrl = StringUtils.replace( connectionUrl, "${basedir}", getBasedir() );
- connectionUrl = StringUtils.replace( connectionUrl, "\\", "/" );
- checkoutMojo.setConnectionUrl( connectionUrl );
+ checkoutMojo.setConnectionUrl( getConnectionLocalAddress( checkoutMojo ) );
File tagCheckoutDir = getTestFile( "target/tags/mytag" );
+
if ( tagCheckoutDir.exists() )
{
FileUtils.deleteDirectory( tagCheckoutDir );
}
- checkoutMojo.setCheckoutDirectory( tagCheckoutDir );
- assertFalse( new File( tagCheckoutDir, "pom.xml" ).exists() );
+ checkoutMojo.setCheckoutDirectory( tagCheckoutDir );
checkoutMojo.execute();
- assertTrue( new File( tagCheckoutDir, "pom.xml" ).exists() );
- }
-
- public void testTagWithTimestamp()
- throws Exception
- {
- if ( !ScmTestCase.isSystemCmd( SvnScmTestUtils.SVN_COMMAND_LINE ) )
- {
- ScmTestCase.printSystemCmdUnavail( SvnScmTestUtils.SVN_COMMAND_LINE, getName() );
- return;
- }
- TagMojo mojo =
- (TagMojo) lookupMojo( "tag", getTestFile( "src/test/resources/mojos/tag/tagWithTimestamp.xml" ) );
+ UntagMojo mojo = (UntagMojo) lookupMojo( "untag", getTestFile( "src/test/resources/mojos/untag/untag.xml" ) );
mojo.setWorkingDirectory( checkoutDir );
+ mojo.setConnectionUrl( getConnectionLocalAddress( mojo ) );
+
+ mojo.execute();
+
+ FileUtils.deleteDirectory( tagCheckoutDir );
+ try {
+ checkoutMojo.execute();
+ fail("checkoutMojo should have failed to check out deleted tag");
+ } catch (Exception expected) {}
+ }
+
+ private String getConnectionLocalAddress(AbstractScmMojo mojo)
+ {
String connectionUrl = mojo.getConnectionUrl();
connectionUrl = StringUtils.replace( connectionUrl, "${basedir}", getBasedir() );
connectionUrl = StringUtils.replace( connectionUrl, "\\", "/" );
- mojo.setConnectionUrl( connectionUrl );
-
- mojo.execute();
+ return connectionUrl;
}
}
diff --git a/maven-scm-plugin/src/test/resources/git/.gitattributes b/maven-scm-plugin/src/test/resources/git/.gitattributes
new file mode 100644
index 0000000..5e0feff
--- /dev/null
+++ b/maven-scm-plugin/src/test/resources/git/.gitattributes
@@ -0,0 +1,3 @@
+objects/** binary
+* text eol=lf
+
diff --git a/maven-scm-plugin/src/test/resources/git/HEAD b/maven-scm-plugin/src/test/resources/git/HEAD
new file mode 100644
index 0000000..cb089cd
--- /dev/null
+++ b/maven-scm-plugin/src/test/resources/git/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/master
diff --git a/maven-scm-plugin/src/test/resources/git/config b/maven-scm-plugin/src/test/resources/git/config
new file mode 100644
index 0000000..c53d818
--- /dev/null
+++ b/maven-scm-plugin/src/test/resources/git/config
@@ -0,0 +1,5 @@
+[core]
+ repositoryformatversion = 0
+ filemode = true
+ bare = true
+ ignorecase = true
diff --git a/maven-scm-plugin/src/test/resources/git/description b/maven-scm-plugin/src/test/resources/git/description
new file mode 100644
index 0000000..c6f25e8
--- /dev/null
+++ b/maven-scm-plugin/src/test/resources/git/description
@@ -0,0 +1 @@
+Unnamed repository; edit this file to name it for gitweb.
diff --git a/maven-scm-plugin/src/test/resources/git/hooks/empty.txt b/maven-scm-plugin/src/test/resources/git/hooks/empty.txt
new file mode 100644
index 0000000..e69de29
diff --git a/maven-scm-plugin/src/test/resources/git/info/exclude b/maven-scm-plugin/src/test/resources/git/info/exclude
new file mode 100644
index 0000000..2c87b72
--- /dev/null
+++ b/maven-scm-plugin/src/test/resources/git/info/exclude
@@ -0,0 +1,6 @@
+# git-ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
diff --git a/maven-scm-plugin/src/test/resources/git/logs/HEAD b/maven-scm-plugin/src/test/resources/git/logs/HEAD
new file mode 100644
index 0000000..3cf80ca
--- /dev/null
+++ b/maven-scm-plugin/src/test/resources/git/logs/HEAD
@@ -0,0 +1,3 @@
+0000000000000000000000000000000000000000 c51dcd33e7b71897603c203b5e0afc1d75f70051 Mark Struberg <st...@yahoo.de> 1196106917 +0100
+c51dcd33e7b71897603c203b5e0afc1d75f70051 baa229a9193371fad604444f64c4f26f8ff702f3 Mark Struberg <st...@yahoo.de> 1197041894 +0100 push
+baa229a9193371fad604444f64c4f26f8ff702f3 1d308c3b92eb0df9c0dc76436d50edfd0ca41d18 Mark Struberg <st...@yahoo.de> 1197042012 +0100 push
diff --git a/maven-scm-plugin/src/test/resources/git/logs/refs/heads/master b/maven-scm-plugin/src/test/resources/git/logs/refs/heads/master
new file mode 100644
index 0000000..3cf80ca
--- /dev/null
+++ b/maven-scm-plugin/src/test/resources/git/logs/refs/heads/master
@@ -0,0 +1,3 @@
+0000000000000000000000000000000000000000 c51dcd33e7b71897603c203b5e0afc1d75f70051 Mark Struberg <st...@yahoo.de> 1196106917 +0100
+c51dcd33e7b71897603c203b5e0afc1d75f70051 baa229a9193371fad604444f64c4f26f8ff702f3 Mark Struberg <st...@yahoo.de> 1197041894 +0100 push
+baa229a9193371fad604444f64c4f26f8ff702f3 1d308c3b92eb0df9c0dc76436d50edfd0ca41d18 Mark Struberg <st...@yahoo.de> 1197042012 +0100 push
diff --git a/maven-scm-plugin/src/test/resources/git/logs/refs/remotes/origin/master b/maven-scm-plugin/src/test/resources/git/logs/refs/remotes/origin/master
new file mode 100644
index 0000000..6cb21b1
--- /dev/null
+++ b/maven-scm-plugin/src/test/resources/git/logs/refs/remotes/origin/master
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000 c51dcd33e7b71897603c203b5e0afc1d75f70051 Mark Struberg <st...@yahoo.de> 1196106917 +0100 clone: from /home/msx/tmp/maven-git/repository/.git
diff --git a/maven-scm-plugin/src/test/resources/git/objects/17/e953589369a48dcb0a0cbad084a76ef852cd11 b/maven-scm-plugin/src/test/resources/git/objects/17/e953589369a48dcb0a0cbad084a76ef852cd11
new file mode 100644
index 0000000..4c7bbd6
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/17/e953589369a48dcb0a0cbad084a76ef852cd11 differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/1d/308c3b92eb0df9c0dc76436d50edfd0ca41d18 b/maven-scm-plugin/src/test/resources/git/objects/1d/308c3b92eb0df9c0dc76436d50edfd0ca41d18
new file mode 100644
index 0000000..7d4c247
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/1d/308c3b92eb0df9c0dc76436d50edfd0ca41d18 differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/3b/459fa9451a94fc1acd10e2e29ab73d93eb816d b/maven-scm-plugin/src/test/resources/git/objects/3b/459fa9451a94fc1acd10e2e29ab73d93eb816d
new file mode 100644
index 0000000..6b6bfad
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/3b/459fa9451a94fc1acd10e2e29ab73d93eb816d differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/3b/d305c57c635aead10cf59f7c1dc51af03edaf7 b/maven-scm-plugin/src/test/resources/git/objects/3b/d305c57c635aead10cf59f7c1dc51af03edaf7
new file mode 100644
index 0000000..0a079e7
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/3b/d305c57c635aead10cf59f7c1dc51af03edaf7 differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/3c/f7bb86c15554148bf5b0b12bfd639e54a77e58 b/maven-scm-plugin/src/test/resources/git/objects/3c/f7bb86c15554148bf5b0b12bfd639e54a77e58
new file mode 100644
index 0000000..c8859bd
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/3c/f7bb86c15554148bf5b0b12bfd639e54a77e58 differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/61/4a3fd04313593d67f4154855a06941046326b3 b/maven-scm-plugin/src/test/resources/git/objects/61/4a3fd04313593d67f4154855a06941046326b3
new file mode 100644
index 0000000..bca48ac
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/61/4a3fd04313593d67f4154855a06941046326b3 differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/61/a0d22b023d6e31894d736cca8c1a47b6edd822 b/maven-scm-plugin/src/test/resources/git/objects/61/a0d22b023d6e31894d736cca8c1a47b6edd822
new file mode 100644
index 0000000..26470db
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/61/a0d22b023d6e31894d736cca8c1a47b6edd822 differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/92/09a983605d6e43e5cf841a1ea18a1914bb7407 b/maven-scm-plugin/src/test/resources/git/objects/92/09a983605d6e43e5cf841a1ea18a1914bb7407
new file mode 100644
index 0000000..9493985
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/92/09a983605d6e43e5cf841a1ea18a1914bb7407 differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/92/f139dfec4d1dfb79c3cd2f94e83bf13129668b b/maven-scm-plugin/src/test/resources/git/objects/92/f139dfec4d1dfb79c3cd2f94e83bf13129668b
new file mode 100644
index 0000000..a352d5a
--- /dev/null
+++ b/maven-scm-plugin/src/test/resources/git/objects/92/f139dfec4d1dfb79c3cd2f94e83bf13129668b
@@ -0,0 +1 @@
+x��1�0@Q��;��� !.�� \ǡ�A��=�ly�R��@k����1H�������p�Q(I ��5q��W�j��;\����_�:�y�u����H=}[$D'ߥ�_ؕ�X���Y����<m
\ No newline at end of file
diff --git a/maven-scm-plugin/src/test/resources/git/objects/94/d3d586e355f318d67e3da6bb16a91be7aad1a7 b/maven-scm-plugin/src/test/resources/git/objects/94/d3d586e355f318d67e3da6bb16a91be7aad1a7
new file mode 100644
index 0000000..ea35629
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/94/d3d586e355f318d67e3da6bb16a91be7aad1a7 differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/9e/131cfc732b0d9f42b9b712a528d0632d9bcca7 b/maven-scm-plugin/src/test/resources/git/objects/9e/131cfc732b0d9f42b9b712a528d0632d9bcca7
new file mode 100644
index 0000000..0ba67da
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/9e/131cfc732b0d9f42b9b712a528d0632d9bcca7 differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/b5/3306f849b69ef0459ddf5cccff06b5fbb08c23 b/maven-scm-plugin/src/test/resources/git/objects/b5/3306f849b69ef0459ddf5cccff06b5fbb08c23
new file mode 100644
index 0000000..314330e
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/b5/3306f849b69ef0459ddf5cccff06b5fbb08c23 differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/ba/a229a9193371fad604444f64c4f26f8ff702f3 b/maven-scm-plugin/src/test/resources/git/objects/ba/a229a9193371fad604444f64c4f26f8ff702f3
new file mode 100644
index 0000000..e94938a
--- /dev/null
+++ b/maven-scm-plugin/src/test/resources/git/objects/ba/a229a9193371fad604444f64c4f26f8ff702f3
@@ -0,0 +1 @@
+x��MN1@a�9����O���XqDZ��ʤ nB����<�~��|��9T�I�K��������ENV��� F��w��IԤ���f*K>b��&E6���e�D������x��9�U����:}����/@�d�TJ���_��͎[��~�}����Ƕ���}���jP�
\ No newline at end of file
diff --git a/maven-scm-plugin/src/test/resources/git/objects/ba/cd4ee105073117b30e5dcdba5150373b6b53c6 b/maven-scm-plugin/src/test/resources/git/objects/ba/cd4ee105073117b30e5dcdba5150373b6b53c6
new file mode 100644
index 0000000..fe99cd8
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/ba/cd4ee105073117b30e5dcdba5150373b6b53c6 differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/c3/8b0351660113545db270ba6918cc22a9eb17ce b/maven-scm-plugin/src/test/resources/git/objects/c3/8b0351660113545db270ba6918cc22a9eb17ce
new file mode 100644
index 0000000..bb5b1d5
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/c3/8b0351660113545db270ba6918cc22a9eb17ce differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/c5/1dcd33e7b71897603c203b5e0afc1d75f70051 b/maven-scm-plugin/src/test/resources/git/objects/c5/1dcd33e7b71897603c203b5e0afc1d75f70051
new file mode 100644
index 0000000..ec76cb0
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/c5/1dcd33e7b71897603c203b5e0afc1d75f70051 differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/dc/4204852765c12f398ef4a5fbcabf23cf17a183 b/maven-scm-plugin/src/test/resources/git/objects/dc/4204852765c12f398ef4a5fbcabf23cf17a183
new file mode 100644
index 0000000..2234dd6
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/dc/4204852765c12f398ef4a5fbcabf23cf17a183 differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/f7/1429f9ff9214a546b438c611ae942c9cf5a49e b/maven-scm-plugin/src/test/resources/git/objects/f7/1429f9ff9214a546b438c611ae942c9cf5a49e
new file mode 100644
index 0000000..b543850
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/f7/1429f9ff9214a546b438c611ae942c9cf5a49e differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/fd/39fa3de0f63bc5c78eca219e74e0a8531bd3e6 b/maven-scm-plugin/src/test/resources/git/objects/fd/39fa3de0f63bc5c78eca219e74e0a8531bd3e6
new file mode 100644
index 0000000..1497fff
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/fd/39fa3de0f63bc5c78eca219e74e0a8531bd3e6 differ
diff --git a/maven-scm-plugin/src/test/resources/git/objects/fe/a16119a5b4ec0562d4f65b4237314250773bf8 b/maven-scm-plugin/src/test/resources/git/objects/fe/a16119a5b4ec0562d4f65b4237314250773bf8
new file mode 100644
index 0000000..6c36970
Binary files /dev/null and b/maven-scm-plugin/src/test/resources/git/objects/fe/a16119a5b4ec0562d4f65b4237314250773bf8 differ
diff --git a/maven-scm-plugin/src/test/resources/git/refs/heads/master b/maven-scm-plugin/src/test/resources/git/refs/heads/master
new file mode 100644
index 0000000..d262065
--- /dev/null
+++ b/maven-scm-plugin/src/test/resources/git/refs/heads/master
@@ -0,0 +1 @@
+92f139dfec4d1dfb79c3cd2f94e83bf13129668b
diff --git a/maven-scm-plugin/src/test/resources/git/refs/remotes/origin/HEAD b/maven-scm-plugin/src/test/resources/git/refs/remotes/origin/HEAD
new file mode 100644
index 0000000..6efe28f
--- /dev/null
+++ b/maven-scm-plugin/src/test/resources/git/refs/remotes/origin/HEAD
@@ -0,0 +1 @@
+ref: refs/remotes/origin/master
diff --git a/maven-scm-plugin/src/test/resources/git/refs/remotes/origin/master b/maven-scm-plugin/src/test/resources/git/refs/remotes/origin/master
new file mode 100644
index 0000000..b1c9092
--- /dev/null
+++ b/maven-scm-plugin/src/test/resources/git/refs/remotes/origin/master
@@ -0,0 +1 @@
+c51dcd33e7b71897603c203b5e0afc1d75f70051
diff --git a/maven-scm-plugin/src/test/resources/mojos/tag/checkout.xml b/maven-scm-plugin/src/test/resources/mojos/tag/checkout.xml
index b8b8022..60ca181 100644
--- a/maven-scm-plugin/src/test/resources/mojos/tag/checkout.xml
+++ b/maven-scm-plugin/src/test/resources/mojos/tag/checkout.xml
@@ -26,9 +26,7 @@
<settings implementation="org.apache.maven.settings.Settings"/>
<checkoutDirectory>target/tags/mytag</checkoutDirectory>
<connectionType>connection</connectionType>
- <connectionUrl>scm:svn:file:///${basedir}/target/repository/trunk</connectionUrl>
- <scmVersionType>tag</scmVersionType>
- <scmVersion>mytag</scmVersion>
+ <connectionUrl>scm:git:file:///${basedir}/src/test/resources/git</connectionUrl>
</configuration>
</plugin>
</plugins>
diff --git a/maven-scm-plugin/src/test/resources/mojos/tag/tag.xml b/maven-scm-plugin/src/test/resources/mojos/tag/tag.xml
index dafa0f3..e23c55b 100644
--- a/maven-scm-plugin/src/test/resources/mojos/tag/tag.xml
+++ b/maven-scm-plugin/src/test/resources/mojos/tag/tag.xml
@@ -24,9 +24,10 @@
<artifactId>maven-scm-plugin</artifactId>
<configuration>
<settings implementation="org.apache.maven.settings.Settings"/>
- <connectionUrl>scm:svn:file:///${basedir}/target/repository/trunk</connectionUrl>
+ <connectionUrl>scm:git:file:///${basedir}/src/test/resources/git</connectionUrl>
<connectionType>connection</connectionType>
<tag>mytag</tag>
+ <pushChanges>true</pushChanges>
</configuration>
</plugin>
</plugins>
diff --git a/maven-scm-plugin/src/test/resources/mojos/tag/checkout.xml b/maven-scm-plugin/src/test/resources/mojos/untag/checkout-tag.xml
similarity index 92%
copy from maven-scm-plugin/src/test/resources/mojos/tag/checkout.xml
copy to maven-scm-plugin/src/test/resources/mojos/untag/checkout-tag.xml
index b8b8022..cbfad7b 100644
--- a/maven-scm-plugin/src/test/resources/mojos/tag/checkout.xml
+++ b/maven-scm-plugin/src/test/resources/mojos/untag/checkout-tag.xml
@@ -26,9 +26,9 @@
<settings implementation="org.apache.maven.settings.Settings"/>
<checkoutDirectory>target/tags/mytag</checkoutDirectory>
<connectionType>connection</connectionType>
- <connectionUrl>scm:svn:file:///${basedir}/target/repository/trunk</connectionUrl>
- <scmVersionType>tag</scmVersionType>
<scmVersion>mytag</scmVersion>
+ <scmVersionType>tag</scmVersionType>
+ <connectionUrl>scm:git:file:///${basedir}/src/test/resources/git</connectionUrl>
</configuration>
</plugin>
</plugins>
diff --git a/maven-scm-plugin/src/test/resources/mojos/tag/tag.xml b/maven-scm-plugin/src/test/resources/mojos/untag/tag.xml
similarity index 89%
copy from maven-scm-plugin/src/test/resources/mojos/tag/tag.xml
copy to maven-scm-plugin/src/test/resources/mojos/untag/tag.xml
index dafa0f3..e23c55b 100644
--- a/maven-scm-plugin/src/test/resources/mojos/tag/tag.xml
+++ b/maven-scm-plugin/src/test/resources/mojos/untag/tag.xml
@@ -24,9 +24,10 @@
<artifactId>maven-scm-plugin</artifactId>
<configuration>
<settings implementation="org.apache.maven.settings.Settings"/>
- <connectionUrl>scm:svn:file:///${basedir}/target/repository/trunk</connectionUrl>
+ <connectionUrl>scm:git:file:///${basedir}/src/test/resources/git</connectionUrl>
<connectionType>connection</connectionType>
<tag>mytag</tag>
+ <pushChanges>true</pushChanges>
</configuration>
</plugin>
</plugins>
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java
index dbeadac..73a879c 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java
@@ -40,11 +40,13 @@ import org.apache.maven.scm.command.remoteinfo.RemoteInfoScmResult;
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.git.command.GitCommand;
import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
+import org.apache.maven.scm.repository.ScmRepository;
import org.apache.maven.scm.repository.ScmRepositoryException;
import org.apache.maven.scm.repository.UnknownRepositoryStructure;
@@ -272,6 +274,16 @@ public abstract class AbstractGitScmProvider
return (TagScmResult) executeCommand( getTagCommand(), repository, fileSet, parameters );
}
+ protected abstract GitCommand getUntagCommand();
+
+ /** {@inheritDoc} */
+ public UntagScmResult untag( ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+ throws ScmException
+ {
+ return (UntagScmResult) executeCommand( getUntagCommand(),
+ repository.getProviderRepository(), fileSet, parameters );
+ }
+
protected abstract GitCommand getUpdateCommand();
/** {@inheritDoc} */
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/TestGitScmProvider.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/TestGitScmProvider.java
index 3f07e9a..d1f231a 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/TestGitScmProvider.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/TestGitScmProvider.java
@@ -76,6 +76,11 @@ public class TestGitScmProvider
return null;
}
+ protected GitCommand getUntagCommand()
+ {
+ return null;
+ }
+
protected GitCommand getUpdateCommand()
{
return null;
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/GitExeScmProvider.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/GitExeScmProvider.java
index 2096cad..9cb4334 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/GitExeScmProvider.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/GitExeScmProvider.java
@@ -38,6 +38,7 @@ import org.apache.maven.scm.provider.git.gitexe.command.remoteinfo.GitRemoteInfo
import org.apache.maven.scm.provider.git.gitexe.command.remove.GitRemoveCommand;
import org.apache.maven.scm.provider.git.gitexe.command.status.GitStatusCommand;
import org.apache.maven.scm.provider.git.gitexe.command.tag.GitTagCommand;
+import org.apache.maven.scm.provider.git.gitexe.command.untag.GitUntagCommand;
import org.apache.maven.scm.provider.git.gitexe.command.update.GitUpdateCommand;
import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
import org.apache.maven.scm.repository.ScmRepositoryException;
@@ -111,6 +112,12 @@ public class GitExeScmProvider
}
/** {@inheritDoc} */
+ protected GitCommand getUntagCommand()
+ {
+ return new GitUntagCommand();
+ }
+
+ /** {@inheritDoc} */
protected GitCommand getUpdateCommand()
{
return new GitUpdateCommand();
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
new file mode 100644
index 0000000..1574665
--- /dev/null
+++ 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
@@ -0,0 +1,109 @@
+package org.apache.maven.scm.provider.git.gitexe.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.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+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.git.command.GitCommand;
+import org.apache.maven.scm.provider.git.gitexe.command.GitCommandLineUtils;
+import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+public class GitUntagCommand
+ extends AbstractUntagCommand
+ implements GitCommand
+{
+
+ /** {@inheritDoc} */
+ public ScmResult executeUntagCommand( ScmProviderRepository repo, ScmFileSet fileSet, String tag )
+ throws ScmException
+ {
+ if ( tag == null || StringUtils.isEmpty( tag.trim() ) )
+ {
+ throw new ScmException( "tag name must be specified" );
+ }
+
+ GitScmProviderRepository repository = (GitScmProviderRepository) repo;
+
+ CommandLineUtils.StringStreamConsumer stdout = new CommandLineUtils.StringStreamConsumer();
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+ int exitCode;
+
+ Commandline clTag = createCommandLine( repository, fileSet.getBasedir(), tag );
+
+ exitCode = GitCommandLineUtils.execute( clTag, stdout, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new UntagScmResult( clTag.toString(), "The git-tag command failed.", stderr.getOutput(), false );
+ }
+
+ if ( repo.isPushChanges() )
+ {
+ // and now push the tag to the configured upstream repository
+ Commandline clPush = createPushCommandLine( repository, fileSet, tag );
+
+ exitCode = GitCommandLineUtils.execute( clPush, stdout, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new UntagScmResult( clPush.toString(), "The git-push command failed.", stderr.getOutput(),
+ false );
+ }
+ }
+
+ return new UntagScmResult( clTag.toString() );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public static Commandline createCommandLine( GitScmProviderRepository repository, File workingDirectory,
+ String tag )
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "tag" );
+
+ cl.createArg().setValue( "-d" );
+ cl.createArg().setValue( tag );
+
+ return cl;
+ }
+
+ public static Commandline createPushCommandLine( GitScmProviderRepository repository, ScmFileSet fileSet,
+ String tag )
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( fileSet.getBasedir(), "push" );
+
+ cl.createArg().setValue( "--delete" );
+ cl.createArg().setValue( repository.getPushUrl() );
+ cl.createArg().setValue( "refs/tags/" + tag );
+
+ return cl;
+ }
+
+}
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/untag/GitExeUntagCommandTckTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/untag/GitExeUntagCommandTckTest.java
new file mode 100644
index 0000000..0a19847
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/untag/GitExeUntagCommandTckTest.java
@@ -0,0 +1,34 @@
+package org.apache.maven.scm.provider.git.gitexe.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.git.GitScmTestUtils;
+import org.apache.maven.scm.provider.git.command.untag.GitUntagCommandTckTest;
+
+public class GitExeUntagCommandTckTest
+ extends GitUntagCommandTckTest
+{
+ /** {@inheritDoc} */
+ public String getScmUrl()
+ throws Exception
+ {
+ return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "git" );
+ }
+}
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/untag/GitUntagCommandTckTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/untag/GitUntagCommandTckTest.java
new file mode 100644
index 0000000..8a258f0
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/untag/GitUntagCommandTckTest.java
@@ -0,0 +1,50 @@
+package org.apache.maven.scm.provider.git.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.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.provider.git.GitScmTestUtils;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.maven.scm.tck.command.untag.UntagCommandTckTest;
+
+public abstract class GitUntagCommandTckTest
+ extends UntagCommandTckTest
+{
+ /** {@inheritDoc} */
+ public void initRepo()
+ throws Exception
+ {
+ GitScmTestUtils.initRepo( "src/test/resources/repository/", getRepositoryRoot(), getWorkingDirectory() );
+ }
+
+ @Override
+ protected CheckOutScmResult checkOut( File workingDirectory, ScmRepository repository ) throws Exception
+ {
+ try
+ {
+ return super.checkOut( workingDirectory, repository );
+ }
+ finally
+ {
+ GitScmTestUtils.setDefaultUser( workingDirectory );
+ }
+ }
+}
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/JGitScmProvider.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/JGitScmProvider.java
index b155dea..0c6d351 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/JGitScmProvider.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/JGitScmProvider.java
@@ -39,6 +39,7 @@ import org.apache.maven.scm.provider.git.jgit.command.list.JGitListCommand;
import org.apache.maven.scm.provider.git.jgit.command.remoteinfo.JGitRemoteInfoCommand;
import org.apache.maven.scm.provider.git.jgit.command.status.JGitStatusCommand;
import org.apache.maven.scm.provider.git.jgit.command.tag.JGitTagCommand;
+import org.apache.maven.scm.provider.git.jgit.command.untag.JGitUntagCommand;
import org.apache.maven.scm.repository.ScmRepositoryException;
/**
@@ -133,6 +134,14 @@ public class JGitScmProvider
/**
* {@inheritDoc}
*/
+ protected GitCommand getUntagCommand()
+ {
+ return new JGitUntagCommand();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
protected GitCommand getUpdateCommand()
{
throw new UnsupportedOperationException( "getUpdateCommand" );
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
new file mode 100644
index 0000000..65fe0de
--- /dev/null
+++ 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
@@ -0,0 +1,108 @@
+package org.apache.maven.scm.provider.git.jgit.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.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.command.untag.AbstractUntagCommand;
+import org.apache.maven.scm.command.untag.UntagScmResult;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.git.command.GitCommand;
+import org.apache.maven.scm.provider.git.jgit.command.JGitTransportConfigCallback;
+import org.apache.maven.scm.provider.git.jgit.command.JGitUtils;
+import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
+import org.codehaus.plexus.util.StringUtils;
+import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.api.PushCommand;
+import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.transport.CredentialsProvider;
+import org.eclipse.jgit.transport.PushResult;
+import org.eclipse.jgit.transport.RefSpec;
+import org.eclipse.jgit.transport.RemoteRefUpdate;
+
+public class JGitUntagCommand extends AbstractUntagCommand implements GitCommand
+{
+
+ @Override
+ protected ScmResult executeUntagCommand( ScmProviderRepository repository, ScmFileSet fileSet,
+ String tagName ) throws ScmException
+ {
+ if ( tagName == null || StringUtils.isEmpty( tagName.trim() ) )
+ {
+ throw new ScmException( "tag name must be specified" );
+ }
+ String escapedTagName = tagName.trim().replace( ' ', '_' );
+
+ Git git = null;
+ try
+ {
+ git = JGitUtils.openRepo( fileSet.getBasedir() );
+
+ // delete the tag
+ if ( git.tagDelete().setTags( escapedTagName ).call().isEmpty() )
+ {
+ return new UntagScmResult( "JGit tagDelete", "Failed to delete tag", "", false );
+ }
+
+ if ( repository.isPushChanges() )
+ {
+ // From https://stackoverflow.com/questions/11892766/how-to-remove-remote-branch-with-jgit
+ RefSpec refSpec = new RefSpec()
+ .setSource( null )
+ .setDestination( Constants.R_TAGS + escapedTagName );
+
+ getLogger().info( "push delete tag [" + escapedTagName + "] to remote..." );
+ ScmLogger logger = getLogger();
+ CredentialsProvider credentials = JGitUtils.prepareSession( logger, git, (GitScmProviderRepository) repository );
+ PushCommand command = git.push()
+ .setRefSpecs( refSpec )
+ .setCredentialsProvider( credentials )
+ .setTransportConfigCallback(
+ new JGitTransportConfigCallback( (GitScmProviderRepository) repository, logger ) );
+
+ Iterable<PushResult> pushResultList = command.call();
+ if ( logger.isInfoEnabled() )
+ {
+ for ( PushResult pushResult : pushResultList )
+ {
+ Collection<RemoteRefUpdate> ru = pushResult.getRemoteUpdates();
+ for ( RemoteRefUpdate remoteRefUpdate : ru )
+ {
+ logger.info( remoteRefUpdate.getStatus() + " - " + remoteRefUpdate );
+ }
+ }
+ }
+ }
+
+ return new UntagScmResult( "JGit tagDelete" );
+ }
+ catch ( Exception e )
+ {
+ throw new ScmException( "JGit tagDelete failure!", e );
+ }
+ finally
+ {
+ JGitUtils.closeRepo( git );
+ }
+ }
+}
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/untag/JGitUntagCommandTckTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/untag/JGitUntagCommandTckTest.java
new file mode 100644
index 0000000..268ef41
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/untag/JGitUntagCommandTckTest.java
@@ -0,0 +1,52 @@
+package org.apache.maven.scm.provider.git.jgit.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.provider.git.GitScmTestUtils;
+import org.apache.maven.scm.provider.git.command.untag.GitUntagCommandTckTest;
+import org.eclipse.jgit.util.FileUtils;
+
+/**
+ * This test tests the untag command.
+ */
+public class JGitUntagCommandTckTest
+ extends GitUntagCommandTckTest
+{
+ /**
+ * {@inheritDoc}
+ */
+ public String getScmUrl()
+ throws Exception
+ {
+ return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "jgit" );
+ }
+
+ @Override
+ protected void deleteDirectory( File directory )
+ throws IOException
+ {
+ if ( directory.exists() )
+ {
+ FileUtils.delete( directory, FileUtils.RECURSIVE | FileUtils.RETRY );
+ }
+ }
+}
diff --git a/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java b/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java
index 9edf2c2..2b6c284 100644
--- a/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java
+++ b/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java
@@ -46,6 +46,7 @@ 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.unedit.UnEditScmResult;
+import org.apache.maven.scm.command.untag.UntagScmResult;
import org.apache.maven.scm.command.update.UpdateScmResult;
import org.apache.maven.scm.log.ScmLogger;
import org.apache.maven.scm.repository.ScmRepository;
@@ -113,6 +114,8 @@ public class ScmProviderStub
private MkdirScmResult mkdirScmResult;
+ private UntagScmResult untagScmResult;
+
/**
* Create a new ScmProviderStub with bogus (not null) attributes
*/
@@ -131,6 +134,7 @@ public class ScmProviderStub
setStatusScmResult( new StatusScmResult( "", "", "", true ) );
setTagScmResult( new TagScmResult( "", "", "", true ) );
setUnEditScmResult( new UnEditScmResult( "", "", "", true ) );
+ setUntagScmResult( new UntagScmResult( "", "", "", true ) );
setUpdateScmResult( new UpdateScmResult( "", "", "", true ) );
setBlameScmResult( new BlameScmResult( "", "", "", true ) );
setMkdirScmResult( new MkdirScmResult( "", "", "", true ) );
@@ -258,6 +262,16 @@ public class ScmProviderStub
return tagScmResult;
}
+ public void setUntagScmResult( UntagScmResult untagScmResult )
+ {
+ this.untagScmResult = untagScmResult;
+ }
+
+ public UntagScmResult getUntagScmResult()
+ {
+ return untagScmResult;
+ }
+
public void setRemoveScmResult( RemoveScmResult removeScmResult )
{
this.removeScmResult = removeScmResult;
@@ -745,6 +759,12 @@ public class ScmProviderStub
return getTagScmResult();
}
+ public UntagScmResult untag( ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+ throws ScmException
+ {
+ return getUntagScmResult();
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/untag/UntagCommandTckTest.java b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/untag/UntagCommandTckTest.java
new file mode 100644
index 0000000..b865812
--- /dev/null
+++ b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/untag/UntagCommandTckTest.java
@@ -0,0 +1,65 @@
+package org.apache.maven.scm.tck.command.untag;
+
+import org.apache.maven.scm.CommandParameter;
+import org.apache.maven.scm.CommandParameters;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmTag;
+import org.apache.maven.scm.ScmTckTestCase;
+import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.command.tag.TagScmResult;
+import org.apache.maven.scm.command.untag.UntagScmResult;
+import org.apache.maven.scm.provider.ScmProvider;
+import org.apache.maven.scm.repository.ScmRepository;
+
+/**
+ * This test tests the untag command.
+ */
+public abstract class UntagCommandTckTest
+ extends ScmTckTestCase
+{
+
+ protected String getTagName()
+ {
+ return "test-untag";
+ }
+
+ public void testUntagCommandTest()
+ throws Exception
+ {
+ String tag = getTagName();
+ ScmProvider scmProvider = getScmManager().getProviderByUrl( getScmUrl() );
+ ScmRepository scmRepository = getScmRepository();
+ ScmFileSet files = new ScmFileSet( getWorkingCopy() );
+ @SuppressWarnings("deprecation") TagScmResult tagResult =
+ scmProvider.tag( scmRepository, files, tag );
+
+ assertResultIsSuccess( tagResult );
+ CommandParameters params = new CommandParameters();
+ params.setString( CommandParameter.TAG_NAME, tag );
+
+ UntagScmResult untagResult = scmProvider.untag( scmRepository, files, params );
+
+ assertResultIsSuccess( untagResult );
+
+ try
+ {
+ untagResult = scmProvider.untag( scmRepository, files, params );
+ assertFalse( untagResult.isSuccess() ); // already been deleted
+ }
+ catch ( ScmException ignored )
+ {
+ }
+
+ try
+ {
+ CheckOutScmResult checkoutResult =
+ getScmManager().checkOut( scmRepository, new ScmFileSet( getAssertionCopy() ), new ScmTag( tag ) );
+ assertFalse( checkoutResult.isSuccess() ); // can't check out a deleted tags
+ }
+ catch ( ScmException ignored )
+ {
+ }
+ }
+
+}