You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2011/03/18 23:22:17 UTC

svn commit: r1083092 - in /maven/release/trunk/maven-release-manager/src: main/java/org/apache/maven/shared/release/phase/ main/java/org/apache/maven/shared/release/util/ test/java/org/apache/maven/shared/release/util/

Author: olamy
Date: Fri Mar 18 22:22:17 2011
New Revision: 1083092

URL: http://svn.apache.org/viewvc?rev=1083092&view=rev
Log:
[MRELEASE-622] Creating label fails for ClearCase with message 'Unable to determine VOB for pathname ".".'
Submitted by Anders Hammar.

Modified:
    maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
    maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScm.java
    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/phase/AbstractRewritePomsPhase.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java?rev=1083092&r1=1083091&r2=1083092&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java Fri Mar 18 22:22:17 2011
@@ -309,8 +309,17 @@ public abstract class AbstractRewritePom
             }
         }
 
+        String commonBasedir;
+        try
+        {
+        	commonBasedir = ReleaseUtil.getCommonBasedir( reactorProjects );
+        }
+        catch ( IOException e )
+        {
+        	throw new ReleaseExecutionException("Exception occurred while calculating common basedir: " + e.getMessage(), e);
+        }
         transformScm( project, rootElement, namespace, releaseDescriptor, projectId, scmRepository, result,
-                      ReleaseUtil.getCommonBasedir( reactorProjects ) );
+                      commonBasedir );
     }
 
     /**

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=1083092&r1=1083091&r2=1083092&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 Fri Mar 18 22:22:17 2011
@@ -154,7 +154,16 @@ public class CheckoutProjectFromScm
         String scmRelativePathProjectDirectory = scmResult.getRelativePathProjectDirectory();
         if ( StringUtils.isEmpty( scmRelativePathProjectDirectory ) )
         {
-            String basedir = ReleaseUtil.getCommonBasedir( reactorProjects );
+            String basedir;
+            try
+            {
+                basedir = ReleaseUtil.getCommonBasedir( reactorProjects );
+            }
+            catch ( IOException e )
+            {
+            	throw new ReleaseExecutionException("Exception occurred while calculating common basedir: " + e.getMessage(), e);
+            }
+
             String rootProjectBasedir = rootProject.getBasedir().getAbsolutePath();
             if ( rootProjectBasedir.length() > basedir.length() )
             {

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=1083092&r1=1083091&r2=1083092&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 Fri Mar 18 22:22:17 2011
@@ -44,7 +44,7 @@ public class ReleaseUtil
 
     public static final String POMv4 = "pom.xml";
 
-    private static final char FS = File.separatorChar;
+    private static final String FS = File.separator;
 
     /**
      * The line separator to use.
@@ -53,6 +53,7 @@ public class ReleaseUtil
 
     private ReleaseUtil()
     {
+        // noop
     }
 
     public static MavenProject getRootProject( List<MavenProject> reactorProjects )
@@ -164,7 +165,15 @@ public class ReleaseUtil
                                                                            List<MavenProject> reactorProjects )
         throws ReleaseExecutionException
     {
-        String basedir = getCommonBasedir( reactorProjects );
+        String basedir;
+        try
+        {
+            basedir = getCommonBasedir( reactorProjects );
+        }
+        catch ( IOException e )
+        {
+        	throw new ReleaseExecutionException("Exception occurred while calculating common basedir: " + e.getMessage(), e);
+        }
 
         int parentLevels =
             getBaseWorkingDirectoryParentCount( basedir,
@@ -180,11 +189,13 @@ public class ReleaseUtil
     }
 
     public static String getCommonBasedir( List<MavenProject> reactorProjects )
+        throws IOException
     {
         return getCommonBasedir( reactorProjects, FS );
     }
 
-    public static String getCommonBasedir( List<MavenProject> reactorProjects, char separator )
+    public static String getCommonBasedir( List<MavenProject> reactorProjects, String separator )
+        throws IOException
     {
         String[] baseDirs = new String[reactorProjects.size()];
         int idx = 0;
@@ -192,39 +203,28 @@ public class ReleaseUtil
         {
             MavenProject p = i.next();
 
-            // we can only normalize paths with /
-            String dir = FileUtils.normalize( p.getBasedir().getPath().replace( '\\', '/' ) );
-            if ( separator == '\\' )
-            {
-                // windows has case insensitive filesystem
-                // normalize to lowercase for comparison
-
-                // 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( Locale.ENGLISH );
-            }
+            String dir = p.getBasedir().getCanonicalPath();
 
-            // always end in / so that we know what is a path and what is a partial directory name in the next call
-            if ( !dir.endsWith( "/" ) )
+            // always end with separator so that we know what is a path and what is a partial directory name in the
+            // next call
+            if ( !dir.endsWith( separator ) )
             {
-                dir = dir + "/";
+                dir = dir + separator;
             }
             baseDirs[idx++] = dir;
         }
 
         String basedir = StringUtils.getCommonPrefix( baseDirs );
 
-        if ( !basedir.endsWith( "/" ) )
+        if ( !basedir.endsWith( separator ) )
         {
-            basedir = basedir.substring( 0, basedir.lastIndexOf( "/" ) );
+            basedir = basedir.substring( 0, basedir.lastIndexOf( separator ) );
         }
 
-        if ( basedir.endsWith( "/" ) && basedir.length() > 1 )
+        if ( basedir.endsWith( separator ) && basedir.length() > 1 )
         {
             basedir = basedir.substring( 0, basedir.length() - 1 );
         }
-        basedir = basedir.replace( '/', separator );
 
         return basedir;
     }

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=1083092&r1=1083091&r2=1083092&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 Fri Mar 18 22:22:17 2011
@@ -41,17 +41,17 @@ public class ReleaseUtilTest
         assertNull( ReleaseUtil.getStandardPom( null ) );
     }
 
-    public void testGetCommonBasedirSingleProject()
+    public void testGetCommonBasedirSingleProject() throws Exception
     {
         assertEquals( "/working/directory/flat-multi-module/project", ReleaseUtil.getCommonBasedir(
-            Collections.singletonList( createProject( "/working/directory/flat-multi-module/project" ) ), '/' ) );
+            Collections.singletonList( createProject( "/working/directory/flat-multi-module/project" ) ), "/" ) );
     }
 
-    public void testGetCommonBasedirSingleProjectWindows()
+    public void testGetCommonBasedirSingleProjectWindows() throws Exception
     {
-        assertEquals( "c:\\working\\directory\\flat-multi-module\\project", ReleaseUtil.getCommonBasedir(
-            Collections.singletonList( createProject( "c:\\working\\directory\\flat-multi-module\\project" ) ),
-            '\\' ) );
+        assertEquals( "C:\\working\\directory\\flat-multi-module\\project", ReleaseUtil.getCommonBasedir(
+            Collections.singletonList( createProject( "C:\\working\\directory\\flat-multi-module\\project" ) ),
+            "\\" ) );
     }
 
     public void testGetCommonBasedirOfFlatMultiModule()
@@ -60,24 +60,25 @@ public class ReleaseUtilTest
         assertEquals( "/working/directory/flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
             new MavenProject[]{createProject( "/working/directory/flat-multi-module/root-project" ),
                 createProject( "/working/directory/flat-multi-module/core" ),
-                createProject( "/working/directory/flat-multi-module/webapp" )} ), '/' ) );
+                createProject( "/working/directory/flat-multi-module/webapp" )} ), "/" ) );
     }
 
     public void testGetCommonBasedirOfFlatMultiModuleWindows()
         throws Exception
     {
-        assertEquals( "c:\\working\\directory\\flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
-            new MavenProject[]{createProject( "c:\\working\\directory\\flat-multi-module\\root-project" ),
-                createProject( "c:\\working\\directory\\flat-multi-module\\core" ),
-                createProject( "c:\\working\\directory\\flat-multi-module\\webapp" )} ), '\\' ) );
+        assertEquals( "C:\\working\\directory\\flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
+            new MavenProject[]{createProject( "C:\\working\\directory\\flat-multi-module\\root-project" ),
+                createProject( "C:\\working\\directory\\flat-multi-module\\core" ),
+                createProject( "C:\\working\\directory\\flat-multi-module\\webapp" )} ), "\\" ) );
     }
 
     public void testGetCommonBasedirUppercaseLowerCaseWindows()
         throws Exception
     {
-        assertEquals( "c:\\working\\root", ReleaseUtil.getCommonBasedir( Arrays.asList(
-            new MavenProject[]{createProject( "c:\\working\\root" ), createProject( "C:\\WoRkInG\\root\\project1" ),
-                createProject( "c:\\working\\root\\project2" )} ), '\\' ) );
+        assertEquals( "C:\\WORKING\\root", ReleaseUtil.getCommonBasedir( Arrays.asList(
+            new MavenProject[]{createProject( "c:\\WORKING\\root", "C:\\WORKING\\root" ),
+                createProject( "c:\\working\\root\\project1", "C:\\WORKING\\root\\project1" ),
+                createProject( "C:\\WORKING\\root\\project2", "C:\\WORKING\\root\\project2" )} ), "\\" ) );
     }
 
     public void testGetCommonBasedirOfFlatMultiModuleSimilarArtifactIds()
@@ -86,7 +87,7 @@ public class ReleaseUtilTest
         assertEquals( "/working/directory/flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
             new MavenProject[]{createProject( "/working/directory/flat-multi-module/release-parent" ),
                 createProject( "/working/directory/flat-multi-module/release-module1" ),
-                createProject( "/working/directory/flat-multi-module/release-module2" )} ), '/' ) );
+                createProject( "/working/directory/flat-multi-module/release-module2" )} ), "/" ) );
     }
 
     public void testGetCommonBasedirOfFlatMultiModuleSimilarArtifactIdsWindows()
@@ -95,7 +96,7 @@ public class ReleaseUtilTest
         assertEquals( "c:\\working\\directory\\flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
             new MavenProject[]{createProject( "c:\\working\\directory\\flat-multi-module\\release-parent" ),
                 createProject( "c:\\working\\directory\\flat-multi-module\\release-module1" ),
-                createProject( "c:\\working\\directory\\flat-multi-module\\release-module2" )} ), '\\' ) );
+                createProject( "c:\\working\\directory\\flat-multi-module\\release-module2" )} ), "\\" ) );
     }
 
     public void testGetCommonBasedirOfRegularMultiModule()
@@ -104,7 +105,7 @@ public class ReleaseUtilTest
         assertEquals( "/working/directory/flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
             new MavenProject[]{createProject( "/working/directory/flat-multi-module" ),
                 createProject( "/working/directory/flat-multi-module/core" ),
-                createProject( "/working/directory/flat-multi-module/webapp" )} ), '/' ) );
+                createProject( "/working/directory/flat-multi-module/webapp" )} ), "/" ) );
     }
 
     public void testGetCommonBasedirOfRegularMultiModuleParentNotBeeingFirstInReactor()
@@ -114,7 +115,7 @@ public class ReleaseUtilTest
             new MavenProject[]{
                 createProject( "/working/directory/flat-multi-module/core" ),
                 createProject( "/working/directory/flat-multi-module" ),
-                createProject( "/working/directory/flat-multi-module/webapp" )} ), '/' ) );
+                createProject( "/working/directory/flat-multi-module/webapp" )} ), "/" ) );
     }
 
     public void testGetCommonBasedirOfRegularMultiModuleWindowsPath()
@@ -124,7 +125,7 @@ public class ReleaseUtilTest
             new MavenProject[]{
                 createProject( "c:\\working\\directory\\flat-multi-module\\core" ),
                 createProject( "c:\\working\\directory\\flat-multi-module" ),
-                createProject( "c:\\working\\directory\\flat-multi-module\\webapp" )} ), '\\' ) );
+                createProject( "c:\\working\\directory\\flat-multi-module\\webapp" )} ), "\\" ) );
     }
 
     public void testGetCommonBasedirOfFlatMultiModuleWithMultipleLevels()
@@ -135,7 +136,7 @@ public class ReleaseUtilTest
                 createProject( "/working/directory/flat-multi-module/core" ),
                 createProject( "/working/directory/flat-multi-module/common/utils" ),
                 createProject( "/working/directory/flat-multi-module/common/xml" ),
-                createProject( "/working/directory/flat-multi-module/webapp" )} ), '/' ) );
+                createProject( "/working/directory/flat-multi-module/webapp" )} ), "/" ) );
     }
 
     public void testGetCommonBasedirOfFlatMultiModuleWithDescendingHierarchy()
@@ -146,7 +147,7 @@ public class ReleaseUtilTest
                 createProject( "/working/directory/flat-multi-module/level/1/2" ),
                 createProject( "/working/directory/flat-multi-module/level/1" ),
                 createProject( "/working/directory/flat-multi-module/level" ),
-                createProject( "/working/directory/flat-multi-module/other" )} ), '/' ) );
+                createProject( "/working/directory/flat-multi-module/other" )} ), "/" ) );
     }
 
     public void testGetBaseScmUrlSingleLevel()
@@ -223,13 +224,24 @@ public class ReleaseUtilTest
         assertEquals( 3, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
     }
 
-    private static MavenProject createProject( final String basedir )
+    private static MavenProject createProject( String basedir )
+    {
+    	return createProject( basedir, basedir );
+    }
+    
+    private static MavenProject createProject( final String basedirPath, final String basedirCanonicalPath )
     {
         return new MavenProject()
         {
             public File getBasedir()
             {
-                return new File( basedir );
+                return new File( basedirPath )
+                {
+                	public String getCanonicalPath()
+                	{
+                		return basedirCanonicalPath;
+                	}
+                };
             }
         };
     }