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/09/30 10:51:45 UTC

svn commit: r1002966 - in /maven/release/trunk/maven-release-manager/src: main/java/org/apache/maven/shared/release/util/ReleaseUtil.java test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java

Author: brett
Date: Thu Sep 30 08:51:45 2010
New Revision: 1002966

URL: http://svn.apache.org/viewvc?rev=1002966&view=rev
Log:
[MRELEASE-536] CommonBasedir Calculation fails on windows. Adjusted case sensitivity in getBaseWorkingDirectoryParentCount as well

Modified:
    maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java
    maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java

Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java?rev=1002966&r1=1002965&r2=1002966&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java Thu Sep 30 08:51:45 2010
@@ -202,7 +202,7 @@ public class ReleaseUtil
                 // Not a comprehensive solution to case-insensitive filenames, but only seem to be getting bitten by
                 // C: vs c: as the rest of the path is being returned consistently. Overall this class should rely more
                 // on the Java IO classes instead of string parsing to avoid these issues.
-                dir = dir.toLowerCase();
+                dir = dir.toLowerCase( Locale.ENGLISH );
             }
 
             // always end in / so that we know what is a path and what is a partial directory name in the next call
@@ -232,14 +232,23 @@ public class ReleaseUtil
     public static int getBaseWorkingDirectoryParentCount( String basedir, String workingDirectory )
     {
         int num = 0;
-        if ( !workingDirectory.equals( basedir ) && workingDirectory.startsWith( basedir ) )
+
+        // we can safely assume case-insensitivity as we are just backtracking, not comparing. This helps with issues
+        // on Windows with C: vs c:
+        workingDirectory = workingDirectory.toLowerCase( Locale.ENGLISH );
+        basedir = basedir.toLowerCase( Locale.ENGLISH );
+
+        File workingDirectoryFile = new File( workingDirectory );
+        File basedirFile = new File( basedir );
+
+        if ( !workingDirectoryFile.equals( basedirFile ) && workingDirectory.startsWith( basedir ) )
         {
             do
             {
-                workingDirectory = new File( workingDirectory ).getParent();
+                workingDirectoryFile = workingDirectoryFile.getParentFile();
                 num++;
             }
-            while ( workingDirectory.length() > basedir.length() );
+            while ( !workingDirectoryFile.equals( basedirFile ) );
         }
         return num;
     }

Modified: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java?rev=1002966&r1=1002965&r2=1002966&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java (original)
+++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java Thu Sep 30 08:51:45 2010
@@ -188,6 +188,41 @@ public class ReleaseUtilTest
         assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk/", actual );
     }
 
+    public void testGetBaseWorkingDirectoryParentCountSameDirectory()
+    {
+        String workingDirectory = "/working/directory/maven/release";
+        String basedir = "/working/directory/maven/release";
+        assertEquals( 0, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
+    }
+
+    public void testGetBaseWorkingDirectoryParentCountSubdirectory()
+    {
+        String workingDirectory = "/working/directory/maven/release";
+        String basedir = "/working/directory/maven/release/maven-release-manager";
+        assertEquals( 0, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
+    }
+
+    public void testGetBaseWorkingDirectoryParentCountParentDirectory()
+    {
+        String workingDirectory = "/working/directory/maven/release/maven-release-manager";
+        String basedir = "/working/directory/maven/release";
+        assertEquals( 1, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
+    }
+
+    public void testGetBaseWorkingDirectoryParentCountParentDirectoryMultiple()
+    {
+        String workingDirectory = "/working/directory/maven/release/maven-release-manager";
+        String basedir = "/working/directory";
+        assertEquals( 3, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
+    }
+
+    public void testGetBaseWorkingDirectoryParentCountDifferentCase()
+    {
+        String workingDirectory = "/Working/Directory/maven/release/maven-release-manager";
+        String basedir = "/working/directory";
+        assertEquals( 3, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
+    }
+
     private static MavenProject createProject( final String basedir )
     {
         return new MavenProject()