You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2010/01/27 17:30:17 UTC

svn commit: r903713 - in /maven/release/trunk/maven-release-manager/src: main/java/org/apache/maven/shared/release/phase/ test/java/org/apache/maven/shared/release/ test/java/org/apache/maven/shared/release/phase/ test/resources/org/apache/maven/shared...

Author: brett
Date: Wed Jan 27 16:30:16 2010
New Revision: 903713

URL: http://svn.apache.org/viewvc?rev=903713&view=rev
Log:
[MRELEASE-261] ensure that release:perform runs from the correct directory in a flat multi-module project

Added:
    maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScmTest.java
      - copied, changed from r903017, maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RunPerformGoalsPhaseTest.java
    maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagEquals.java
      - copied, changed from r903017, maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmFileSetEquals.java
    maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/CheckoutProjectFromScmTest.xml
      - copied unchanged from r903058, maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmTagPhaseTest.xml
Modified:
    maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScm.java
    maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java

Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScm.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScm.java?rev=903713&r1=903712&r2=903713&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScm.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScm.java Wed Jan 27 16:30:16 2010
@@ -19,6 +19,11 @@
  * under the License.
  */
 
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.maven.project.MavenProject;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmTag;
@@ -39,10 +44,6 @@
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.StringUtils;
 
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
 /**
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
  * @version $Id$
@@ -58,7 +59,8 @@
      */
     private ScmRepositoryConfigurator scmRepositoryConfigurator;
 
-    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+                                  List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         ReleaseResult result = new ReleaseResult();
@@ -72,17 +74,20 @@
         {
             // in the release phase we have to change the checkout URL
             // to do a local checkout instead of going over the network.
-            
+
             // the first step is a bit tricky, we need to know which provider! like e.g. "scm:jgit:http://"
             // the offset of 4 is because 'scm:' has 4 characters...
-            String providerPart = releaseDescriptor.getScmSourceUrl().substring( 0, releaseDescriptor.getScmSourceUrl().indexOf( ':', 4 ) );
+            String providerPart = releaseDescriptor.getScmSourceUrl().substring( 0,
+                                                                                 releaseDescriptor.getScmSourceUrl().indexOf(
+                                                                                     ':', 4 ) );
             releaseDescriptor.setScmSourceUrl( providerPart + ":file://" + releaseDescriptor.getWorkingDirectory() );
             getLogger().info( "Performing a LOCAL checkout from " + releaseDescriptor.getScmSourceUrl() );
         }
-        
+
         try
         {
-            repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, releaseEnvironment.getSettings() );
+            repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor,
+                                                                            releaseEnvironment.getSettings() );
 
             provider = scmRepositoryConfigurator.getRepositoryProvider( repository );
         }
@@ -101,12 +106,12 @@
             throw new ReleaseExecutionException( "Unable to configure SCM repository: " + e.getMessage(), e );
         }
 
+        MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects );
         // TODO: sanity check that it is not . or .. or lower
         File checkoutDirectory;
         if ( StringUtils.isEmpty( releaseDescriptor.getCheckoutDirectory() ) )
         {
-            checkoutDirectory =
-                new File( ReleaseUtil.getRootProject( reactorProjects ).getFile().getParentFile(), "target/checkout" );
+            checkoutDirectory = new File( rootProject.getFile().getParentFile(), "target/checkout" );
             releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
         }
         else
@@ -146,7 +151,18 @@
             throw new ReleaseExecutionException( "An error is occurred in the checkout process: " + e.getMessage(), e );
         }
 
-        releaseDescriptor.setScmRelativePathProjectDirectory( scmResult.getRelativePathProjectDirectory());
+        String scmRelativePathProjectDirectory = scmResult.getRelativePathProjectDirectory();
+        if ( StringUtils.isEmpty( scmRelativePathProjectDirectory ) )
+        {
+            String basedir = ReleaseUtil.getCommonBasedir( reactorProjects );
+            String rootProjectBasedir = rootProject.getBasedir().getAbsolutePath();
+            if ( rootProjectBasedir.length() > basedir.length() )
+            {
+                scmRelativePathProjectDirectory = rootProjectBasedir.substring( basedir.length() + 1 );
+            }
+        }
+        releaseDescriptor.setScmRelativePathProjectDirectory( scmRelativePathProjectDirectory );
+
         if ( !scmResult.isSuccess() )
         {
             result.setResultCode( ReleaseResult.ERROR );
@@ -160,7 +176,8 @@
         return result;
     }
 
-    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+                                   List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         return simulate( releaseDescriptor, releaseEnvironment, reactorProjects );

Modified: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java?rev=903713&r1=903712&r2=903713&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java (original)
+++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java Wed Jan 27 16:30:16 2010
@@ -19,6 +19,13 @@
  * under the License.
  */
 
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.project.MavenProject;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmTag;
@@ -56,12 +63,6 @@
 import org.jmock.core.stub.ReturnStub;
 import org.jmock.core.stub.ThrowStub;
 
-import java.io.File;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.Map;
-import java.util.ArrayList;
-
 /**
  * Test the default release manager.
  *
@@ -417,11 +418,18 @@
         ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
         stub.setScmProvider( (ScmProvider) scmProviderMock.proxy() );
 
-        releaseManager.perform( releaseDescriptor, new DefaultReleaseEnvironment(), null );
+        releaseManager.perform( releaseDescriptor, new DefaultReleaseEnvironment(), createReactorProjects() );
 
         assertTrue( true );
     }
-    
+
+    private static List createReactorProjects()
+    {
+        MavenProject project = new MavenProject();
+        project.setFile( getTestFile( "target/dummy-project/pom.xml" ) );
+        return Collections.singletonList( project );
+    }
+
     public void testReleasePerformWithResult() 
         throws Exception
     {
@@ -431,11 +439,9 @@
         releaseDescriptor.setScmSourceUrl( "scm-url" );
         File checkoutDirectory = getTestFile( "target/checkout-directory" );
         releaseDescriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
-        
-        ReleaseResult result = new ReleaseResult();
-        
-        result = releaseManager.performWithResult( releaseDescriptor, new DefaultReleaseEnvironment(),
-                                                   new ArrayList(), null );
+
+        ReleaseResult result = releaseManager.performWithResult( releaseDescriptor, new DefaultReleaseEnvironment(),
+                                                                 createReactorProjects(), null );
         assert( result.getOutput().length() > 0 );
     }  
 
@@ -467,7 +473,7 @@
 
         releaseDescriptor.setUseReleaseProfile( false );
 
-        releaseManager.perform( releaseDescriptor, new DefaultReleaseEnvironment(), null );
+        releaseManager.perform( releaseDescriptor, new DefaultReleaseEnvironment(), createReactorProjects() );
 
         assertTrue( true );
     }
@@ -500,7 +506,7 @@
         ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
         stub.setScmProvider( (ScmProvider) scmProviderMock.proxy() );
 
-        releaseManager.perform( releaseDescriptor, new DefaultReleaseEnvironment(), null );
+        releaseManager.perform( releaseDescriptor, new DefaultReleaseEnvironment(), createReactorProjects() );
 
         assertTrue( true );
     }
@@ -534,7 +540,7 @@
 
         releaseDescriptor.setUseReleaseProfile( false );
 
-        releaseManager.perform( releaseDescriptor, new DefaultReleaseEnvironment(), null );
+        releaseManager.perform( releaseDescriptor, new DefaultReleaseEnvironment(), createReactorProjects() );
 
         assertTrue( true );
     }
@@ -569,7 +575,7 @@
         configStore.getReleaseConfiguration().setCompletedPhase( "end-release" );
         releaseManager.setConfigStore( configStore );
 
-        releaseManager.perform( releaseDescriptor, new DefaultReleaseEnvironment(), null );
+        releaseManager.perform( releaseDescriptor, new DefaultReleaseEnvironment(), createReactorProjects() );
 
         assertTrue( true );
     }
@@ -736,7 +742,7 @@
 
         try
         {
-            releaseManager.perform( releaseDescriptor, new DefaultReleaseEnvironment(), null );
+            releaseManager.perform( releaseDescriptor, new DefaultReleaseEnvironment(), createReactorProjects() );
 
             fail( "commit should have failed" );
         }
@@ -764,7 +770,7 @@
 
         try
         {
-            releaseManager.perform( releaseDescriptor, new DefaultReleaseEnvironment(), null );
+            releaseManager.perform( releaseDescriptor, new DefaultReleaseEnvironment(), createReactorProjects() );
 
             fail( "commit should have failed" );
         }

Copied: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScmTest.java (from r903017, maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RunPerformGoalsPhaseTest.java)
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScmTest.java?p2=maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScmTest.java&p1=maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RunPerformGoalsPhaseTest.java&r1=903017&r2=903713&rev=903713&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RunPerformGoalsPhaseTest.java (original)
+++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScmTest.java Wed Jan 27 16:30:16 2010
@@ -1,73 +1,148 @@
 package org.apache.maven.shared.release.phase;
 
-import org.apache.maven.settings.Settings;
-import org.apache.maven.shared.release.ReleaseExecutionException;
+/*
+ * 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.util.List;
+
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmTag;
+import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.provider.ScmProvider;
+import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
+import org.apache.maven.scm.repository.ScmRepository;
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
-import org.apache.maven.shared.release.exec.MavenExecutor;
-import org.apache.maven.shared.release.exec.MavenExecutorException;
-import org.codehaus.plexus.PlexusTestCase;
+import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
+import org.apache.maven.shared.release.stubs.ScmManagerStub;
 import org.jmock.Mock;
 import org.jmock.core.Constraint;
-import org.jmock.core.constraint.IsAnything;
 import org.jmock.core.constraint.IsEqual;
 import org.jmock.core.matcher.InvokeOnceMatcher;
-import org.jmock.core.stub.ThrowStub;
-
-import java.io.File;
-import java.util.List;
+import org.jmock.core.stub.ReturnStub;
 
 /**
- * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
- * @version $Id$
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  */
-public class RunPerformGoalsPhaseTest
-    extends PlexusTestCase
+public class CheckoutProjectFromScmTest
+    extends AbstractReleaseTestCase
 {
-    private RunPerformGoalsPhase phase;
+    private CheckoutProjectFromScm phase;
 
     protected void setUp()
         throws Exception
     {
         super.setUp();
 
-        phase = (RunPerformGoalsPhase) lookup( ReleasePhase.ROLE, "run-perform-goals" );
+        phase = (CheckoutProjectFromScm) lookup( ReleasePhase.ROLE, "checkout-project-from-scm" );
+    }
+
+    public void testExecuteStandard()
+        throws Exception
+    {
+        ReleaseDescriptor descriptor = new ReleaseDescriptor();
+        File checkoutDirectory = getTestFile( "target/checkout-test/standard" );
+        descriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
+        descriptor.setScmReleaseLabel( "release-label" );
+        String sourceUrl = "file://localhost/tmp/scm-repo/trunk";
+        String scmUrl = "scm:svn:" + sourceUrl;
+        descriptor.setScmSourceUrl( scmUrl );
+
+        Mock scmProviderMock = new Mock( ScmProvider.class );
+        SvnScmProviderRepository scmProviderRepository = new SvnScmProviderRepository( sourceUrl );
+        ScmRepository repository = new ScmRepository( "svn", scmProviderRepository );
+        Constraint[] arguments =
+            new Constraint[]{new IsEqual( repository ), new IsScmFileSetEquals( new ScmFileSet( checkoutDirectory ) ),
+                new IsScmTagEquals( new ScmTag( "release-label" ) )};
+        scmProviderMock.expects( new InvokeOnceMatcher() ).method( "checkOut" ).with( arguments ).will(
+            new ReturnStub( new CheckOutScmResult( "", null ) ) );
+
+        ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
+        stub.setScmProvider( (ScmProvider) scmProviderMock.proxy() );
+        stub.addScmRepositoryForUrl( scmUrl, repository );
+
+        List reactorProjects = createReactorProjects( "scm-commit", "/single-pom", false );
+        phase.execute( descriptor, new DefaultReleaseEnvironment(), reactorProjects );
+
+        assertEquals( "", descriptor.getScmRelativePathProjectDirectory() );
+    }
+
+    public void testExecuteMultiModuleWithDeepSubprojects()
+        throws Exception
+    {
+        ReleaseDescriptor descriptor = new ReleaseDescriptor();
+        File checkoutDirectory = getTestFile( "target/checkout-test/multimodule-with-deep-subprojects" );
+        descriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
+        descriptor.setScmReleaseLabel( "release-label" );
+        String sourceUrl = "file://localhost/tmp/scm-repo/trunk";
+        String scmUrl = "scm:svn:" + sourceUrl;
+        descriptor.setScmSourceUrl( scmUrl );
+
+        Mock scmProviderMock = new Mock( ScmProvider.class );
+        SvnScmProviderRepository scmProviderRepository = new SvnScmProviderRepository( sourceUrl );
+        ScmRepository repository = new ScmRepository( "svn", scmProviderRepository );
+        Constraint[] arguments =
+            new Constraint[]{new IsEqual( repository ), new IsScmFileSetEquals( new ScmFileSet( checkoutDirectory ) ),
+                new IsScmTagEquals( new ScmTag( "release-label" ) )};
+        scmProviderMock.expects( new InvokeOnceMatcher() ).method( "checkOut" ).with( arguments ).will(
+            new ReturnStub( new CheckOutScmResult( "", null ) ) );
+
+        ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
+        stub.setScmProvider( (ScmProvider) scmProviderMock.proxy() );
+        stub.addScmRepositoryForUrl( scmUrl, repository );
+
+        List reactorProjects = createReactorProjects( "scm-commit", "/multimodule-with-deep-subprojects", false );
+        phase.execute( descriptor, new DefaultReleaseEnvironment(), reactorProjects );
+
+        assertEquals( "", descriptor.getScmRelativePathProjectDirectory() );
     }
 
-    public void testExecuteException()
+    public void testExecuteFlatMultiModule()
         throws Exception
     {
-        File testFile = getTestFile( "target/checkout-directory" );
+        ReleaseDescriptor descriptor = new ReleaseDescriptor();
+        File checkoutDirectory = getTestFile( "target/checkout-test/flat-multi-module" );
+        descriptor.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
+        descriptor.setScmReleaseLabel( "release-label" );
+        String sourceUrl = "file://localhost/tmp/scm-repo/trunk/root-project";
+        String scmUrl = "scm:svn:" + sourceUrl;
+        descriptor.setScmSourceUrl( scmUrl );
+
+        Mock scmProviderMock = new Mock( ScmProvider.class );
+        SvnScmProviderRepository scmProviderRepository = new SvnScmProviderRepository( sourceUrl );
+        ScmRepository repository = new ScmRepository( "svn", scmProviderRepository );
+        Constraint[] arguments =
+            new Constraint[]{new IsEqual( repository ), new IsScmFileSetEquals( new ScmFileSet( checkoutDirectory ) ),
+                new IsScmTagEquals( new ScmTag( "release-label" ) )};
+        scmProviderMock.expects( new InvokeOnceMatcher() ).method( "checkOut" ).with( arguments ).will(
+            new ReturnStub( new CheckOutScmResult( "", null ) ) );
+
+        ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
+        stub.setScmProvider( (ScmProvider) scmProviderMock.proxy() );
+        stub.addScmRepositoryForUrl( scmUrl, repository );
+
+        List reactorProjects =
+            createReactorProjects( "rewrite-for-release/pom-with-parent-flat", "/root-project", false );
+        phase.execute( descriptor, new DefaultReleaseEnvironment(), reactorProjects );
 
-        ReleaseDescriptor config = new ReleaseDescriptor();
-        config.setPerformGoals( "goal1 goal2" );
-        config.setCheckoutDirectory( testFile.getAbsolutePath() );
-
-        Mock mock = new Mock( MavenExecutor.class );
-
-        Constraint[] constraints = new Constraint[] {
-            new IsEqual( testFile ),
-            new IsEqual( "goal1 goal2" ),
-            new IsAnything(),
-            new IsEqual( Boolean.TRUE ),
-            new IsEqual( "-DperformRelease=true -f pom.xml" ),
-            new IsAnything()
-        };
-
-        mock.expects( new InvokeOnceMatcher() ).method( "executeGoals" ).with( constraints ).will(
-            new ThrowStub( new MavenExecutorException( "...", new Exception() ) ) );
-
-        phase.setMavenExecutor( (MavenExecutor) mock.proxy() );
-
-        try
-        {
-            phase.execute( config, (Settings) null, (List) null );
-
-            fail( "Should have thrown an exception" );
-        }
-        catch ( ReleaseExecutionException e )
-        {
-            assertEquals( "Check cause", MavenExecutorException.class, e.getCause().getClass() );
-        }
+        assertEquals( "root-project", descriptor.getScmRelativePathProjectDirectory() );
     }
 
-}
+}
\ No newline at end of file

Copied: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagEquals.java (from r903017, maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmFileSetEquals.java)
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagEquals.java?p2=maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagEquals.java&p1=maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmFileSetEquals.java&r1=903017&r2=903713&rev=903713&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmFileSetEquals.java (original)
+++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagEquals.java Wed Jan 27 16:30:16 2010
@@ -19,37 +19,34 @@
  * under the License.
  */
 
-import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmTag;
 import org.jmock.core.Constraint;
 
-import java.util.Arrays;
-
 /**
- * JMock constraint to compare file sets since it has no equals method.
+ * JMock constraint to compare tags since it has no equals method.
  *
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  * @todo add an equals() method
  */
-public class IsScmFileSetEquals
+public class IsScmTagEquals
     implements Constraint
 {
-    private final ScmFileSet fileSet;
+    private final ScmTag tag;
 
-    public IsScmFileSetEquals( ScmFileSet fileSet )
+    public IsScmTagEquals( ScmTag tag )
     {
-        this.fileSet = fileSet;
+        this.tag = tag;
     }
 
     public boolean eval( Object object )
     {
-        ScmFileSet fs = (ScmFileSet) object;
+        ScmTag tag = (ScmTag) object;
 
-        return fs.getBasedir().equals( fileSet.getBasedir() ) &&
-            Arrays.asList( fs.getFiles() ).equals( Arrays.asList( fileSet.getFiles() ) );
+        return tag.getName().equals( this.tag.getName() );
     }
 
     public StringBuffer describeTo( StringBuffer stringBuffer )
     {
-        return stringBuffer.append( fileSet.toString() );
+        return stringBuffer.append( tag.toString() );
     }
-}
+}
\ No newline at end of file