You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2012/04/12 21:55:06 UTC

svn commit: r1325475 - in /maven/release/trunk/maven-release-manager/src: main/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhase.java test/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhaseTest.java

Author: rfscholte
Date: Thu Apr 12 19:55:06 2012
New Revision: 1325475

URL: http://svn.apache.org/viewvc?rev=1325475&view=rev
Log:
Fix MRELEASE-645: Allow File/Directory Patterns for the checkModificationExcludes Option

Modified:
    maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhase.java
    maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhaseTest.java

Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhase.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhase.java?rev=1325475&r1=1325474&r2=1325475&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhase.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhase.java Thu Apr 12 19:55:06 2012
@@ -36,6 +36,7 @@ import org.apache.maven.shared.release.e
 import org.apache.maven.shared.release.scm.ReleaseScmCommandException;
 import org.apache.maven.shared.release.scm.ReleaseScmRepositoryException;
 import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
+import org.codehaus.plexus.util.SelectorUtils;
 import org.codehaus.plexus.util.StringUtils;
 
 import java.io.File;
@@ -47,7 +48,7 @@ import java.util.Set;
 
 /**
  * See if there are any local modifications to the files before proceeding with SCM operations and the release.
- *
+ * 
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  * @plexus.component role="org.apache.maven.shared.release.phase.ReleasePhase" role-hint="scm-check-modifications"
  */
@@ -56,18 +57,20 @@ public class ScmCheckModificationsPhase
 {
     /**
      * Tool that gets a configured SCM repository from release configuration.
-     *
+     * 
      * @plexus.requirement
      */
     private ScmRepositoryConfigurator scmRepositoryConfigurator;
 
     /**
-     * The files to exclude from the status check.
-     *
+     * The filepatterns to exclude from the status check.
+     * 
      * @todo proper construction of filenames, especially release properties
      */
-    private Set<String> excludedFiles = new HashSet<String>( Arrays.asList( new String[] { "pom.xml.backup",
-        "pom.xml.tag", "pom.xml.next", "pom.xml.branch", "release.properties", "pom.xml.releaseBackup" } ) );
+    private Set<String> exclusionPatterns = new HashSet<String>( Arrays.asList( new String[] {
+        "**" + File.separator + "pom.xml.backup", "**" + File.separator + "pom.xml.tag",
+        "**" + File.separator + "pom.xml.next", "**" + File.separator + "pom.xml.branch",
+        "**" + File.separator + "release.properties", "**" + File.separator + "pom.xml.releaseBackup" } ) );
 
     public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
                                   List<MavenProject> reactorProjects )
@@ -79,14 +82,15 @@ public class ScmCheckModificationsPhase
 
         if ( additionalExcludes != null )
         {
-            for ( int i1 = 0, additionalExcludesSize = additionalExcludes.size(); i1 < additionalExcludesSize; i1++ )
+            // SelectorUtils expects OS-specific paths and patterns
+            for( String additionalExclude : additionalExcludes )
             {
-                excludedFiles.add( additionalExcludes.get( i1 ) );
+                exclusionPatterns.add( additionalExclude.replace( "\\", File.separator ).replace( "/", File.separator ) );
             }
         }
 
         logInfo( relResult, "Verifying that there are no local modifications..." );
-        logInfo( relResult, "  ignoring changes on: " + StringUtils.join( excludedFiles.toArray(), ", " ) );
+        logInfo( relResult, "  ignoring changes on: " + StringUtils.join( exclusionPatterns.toArray(), ", " ) );
 
         ScmRepository repository;
         ScmProvider provider;
@@ -99,8 +103,8 @@ public class ScmCheckModificationsPhase
         }
         catch ( ScmRepositoryException e )
         {
-            throw new ReleaseScmRepositoryException(
-                e.getMessage() + " for URL: " + releaseDescriptor.getScmSourceUrl(), e.getValidationMessages() );
+            throw new ReleaseScmRepositoryException( e.getMessage() + " for URL: "
+                + releaseDescriptor.getScmSourceUrl(), e.getValidationMessages() );
         }
         catch ( NoSuchScmProviderException e )
         {
@@ -131,12 +135,16 @@ public class ScmCheckModificationsPhase
         {
             ScmFile f = i.next();
 
-            String fileName = f.getPath().replace( '\\', '/' );
-            fileName = fileName.substring( fileName.lastIndexOf( '/' ) + 1, fileName.length() );
+            // SelectorUtils expects File.separator, don't standardize!
+            String fileName = f.getPath().replace( "\\", File.separator ).replace( "/", File.separator );
 
-            if ( excludedFiles.contains( fileName ) )
+            for( String exclusionPattern : exclusionPatterns )
             {
-                i.remove();
+                if ( SelectorUtils.matchPath( exclusionPattern, fileName ) )
+                {
+                    logDebug( relResult, "Ignoring changed file: " + fileName );
+                    i.remove();
+                }
             }
         }
 
@@ -150,8 +158,8 @@ public class ScmCheckModificationsPhase
                 message.append( "\n" );
             }
 
-            throw new ReleaseFailureException(
-                "Cannot prepare the release because you have local modifications : \n" + message );
+            throw new ReleaseFailureException( "Cannot prepare the release because you have local modifications : \n"
+                + message );
         }
 
         relResult.setResultCode( ReleaseResult.SUCCESS );
@@ -166,4 +174,4 @@ public class ScmCheckModificationsPhase
         // It makes no modifications, so simulate is the same as execute
         return execute( releaseDescriptor, releaseEnvironment, reactorProjects );
     }
-}
+}
\ No newline at end of file

Modified: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhaseTest.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhaseTest.java?rev=1325475&r1=1325474&r2=1325475&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhaseTest.java (original)
+++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhaseTest.java Thu Apr 12 19:55:06 2012
@@ -47,6 +47,7 @@ import org.apache.maven.scm.repository.S
 import org.apache.maven.scm.repository.ScmRepositoryException;
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseFailureException;
+import org.apache.maven.shared.release.ReleaseResult;
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
 import org.apache.maven.shared.release.scm.DefaultScmRepositoryConfigurator;
@@ -265,6 +266,22 @@ public class ScmCheckModificationsPhaseT
         // successful execution is verification enough
         assertTrue( true );
     }
+    
+    // MRELEASE-645: Allow File/Directory Patterns for the checkModificationExcludes Option
+    public void testModificationsToCustomExcludedFilesOnly()
+        throws Exception
+    {
+        ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
+        
+        releaseDescriptor.setCheckModificationExcludes( Collections.singletonList( "**/keep.me" ) );
+    
+        setChangedFiles( releaseDescriptor, Arrays.asList( new String[] { "release.properties", "pom.xml.backup",
+            "pom.xml.tag", "pom.xml.next", "keep.me", "src/app/keep.me", "config\\keep.me" } ) );
+    
+        assertEquals( ReleaseResult.SUCCESS, phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), null ).getResultCode() );
+    
+        assertEquals( ReleaseResult.SUCCESS, phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), null ).getResultCode() );
+    }
 
     public void testModificationsToPoms()
         throws Exception