You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by oc...@apache.org on 2009/05/24 07:35:41 UTC

svn commit: r778088 [1/2] - in /maven/release/trunk: maven-release-manager/ maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ maven-release-manager/src...

Author: oching
Date: Sun May 24 05:35:37 2009
New Revision: 778088

URL: http://svn.apache.org/viewvc?rev=778088&view=rev
Log:
[MRELEASE-261]/[MRELEASE-322]/[MRELEASE-225]/[MRELEASE-336]
o fix releasing of projects with flat structure
o determine base working directory and the base scm url based on the root project's working dir and scm url, and the relative path of it's modules
o added unit tests and integration tests

Added:
    maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/
    maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/root-project/
    maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/root-project/expected-pom.xml
    maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/root-project/pom.xml
    maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/subproject1/
    maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/subproject1/expected-pom.xml
    maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/subproject1/pom.xml
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/pom.xml
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/main/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/main/java/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/main/java/org/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/main/java/org/apache/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/main/java/org/apache/maven/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/main/java/org/apache/maven/plugin/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/module/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/module/a/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/module/a/App.java
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/test/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/test/java/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/test/java/org/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/test/java/org/apache/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/test/java/org/apache/maven/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/test/java/org/apache/maven/plugin/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/module/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/module/a/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/module/a/AppTest.java
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/pom.xml
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/main/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/main/java/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/main/java/org/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/main/java/org/apache/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/main/java/org/apache/maven/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/main/java/org/apache/maven/plugin/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/module/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/module/b/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/module/b/App.java
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/test/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/test/java/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/test/java/org/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/test/java/org/apache/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/test/java/org/apache/maven/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/test/java/org/apache/maven/plugin/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/module/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/module/b/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/module/b/AppTest.java
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/parent-project/
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/parent-project/pom.xml
    maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/parent-project/verify.bsh
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/pom.xml
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/main/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/main/java/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/main/java/org/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/main/java/org/apache/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/main/java/org/apache/maven/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/main/java/org/apache/maven/plugin/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/module/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/module/a/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/module/a/App.java
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/test/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/test/java/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/test/java/org/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/test/java/org/apache/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/test/java/org/apache/maven/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/test/java/org/apache/maven/plugin/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/module/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/module/a/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/module/a/AppTest.java
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/pom.xml
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/main/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/main/java/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/main/java/org/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/main/java/org/apache/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/main/java/org/apache/maven/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/main/java/org/apache/maven/plugin/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/module/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/module/b/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/module/b/App.java
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/test/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/test/java/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/test/java/org/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/test/java/org/apache/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/test/java/org/apache/maven/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/test/java/org/apache/maven/plugin/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/module/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/module/b/
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/module/b/AppTest.java
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/pom.xml
    maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/verify.bsh
    maven/release/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/stubs/FlatMultiModuleMavenProjectStub.java
    maven/release/trunk/maven-release-plugin/src/test/resources/mojos/perform/perform-with-flat-structure.xml
Modified:
    maven/release/trunk/maven-release-manager/pom.xml
    maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
    maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRunGoalsPhase.java
    maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java
    maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.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/main/mdo/release-descriptor.mdo
    maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhaseTest.java
    maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java
    maven/release/trunk/maven-release-plugin/pom.xml
    maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java
    maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PerformReleaseMojo.java
    maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/StageReleaseMojo.java
    maven/release/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PerformReleaseMojoTest.java

Modified: maven/release/trunk/maven-release-manager/pom.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/pom.xml?rev=778088&r1=778087&r2=778088&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/pom.xml (original)
+++ maven/release/trunk/maven-release-manager/pom.xml Sun May 24 05:35:37 2009
@@ -96,9 +96,20 @@
       <version>2.0.9</version>
     </dependency>
     <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.4</version>
+    </dependency>
+    <dependency>
       <groupId>commons-cli</groupId>
       <artifactId>commons-cli</artifactId>
       <version>1.0</version>
+      <exclusions>
+        <exclusion>
+          <groupId>commons-lang</groupId>
+          <artifactId>commons-lang</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
 
     <!-- scm dependencies -->
@@ -212,7 +223,7 @@
           </execution>
         </executions>
         <configuration>
-          <version>1.0.0</version>
+          <version>2.0.0</version>
           <packageWithVersion>false</packageWithVersion>
           <model>src/main/mdo/release-descriptor.mdo</model>
         </configuration>

Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java?rev=778088&r1=778087&r2=778088&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java Sun May 24 05:35:37 2009
@@ -64,7 +64,9 @@
         mergeInto.setScmPrivateKeyPassPhrase(
             mergeOverride( mergeInto.getScmPrivateKeyPassPhrase(), toBeMerged.getScmPrivateKeyPassPhrase() ) );
         mergeInto.setScmCommentPrefix(
-            mergeOverride( mergeInto.getScmCommentPrefix(), toBeMerged.getScmCommentPrefix() ) );
+            mergeOverride( mergeInto.getScmCommentPrefix(), toBeMerged.getScmCommentPrefix() ) );        
+        mergeInto.setRootProjectPath( 
+            mergeDefault( mergeInto.getRootProjectPath(), toBeMerged.getRootProjectPath() ) );
         mergeInto.setAdditionalArguments(
             mergeOverride( mergeInto.getAdditionalArguments(), toBeMerged.getAdditionalArguments() ) );
         mergeInto.setPreparationGoals(

Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRunGoalsPhase.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRunGoalsPhase.java?rev=778088&r1=778087&r2=778088&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRunGoalsPhase.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRunGoalsPhase.java Sun May 24 05:35:37 2009
@@ -79,7 +79,7 @@
                 }
 
                 mavenExecutor.executeGoals( determineWorkingDirectory( workingDirectory,
-                                                                       releaseDescriptor.getScmRelativePathProjectDirectory() ),
+                                            releaseDescriptor.getScmRelativePathProjectDirectory(), releaseDescriptor.getRootProjectPath() ),
                                             goals, releaseEnvironment, releaseDescriptor.isInteractive(),
                                             additionalArguments, result );
             }
@@ -122,17 +122,23 @@
      * @param checkoutDirectory            The checkout directory as java.io.File
      * @param relativePathProjectDirectory The relative path of the project directory within the checkout
      *                                     directory or ""
+     * @param rootProjectPath TODO
      * @return The working directory
      */
-    protected File determineWorkingDirectory( File checkoutDirectory, String relativePathProjectDirectory )
+    protected File determineWorkingDirectory( File checkoutDirectory, String relativePathProjectDirectory, String rootProjectPath )
     {
+        File workingDirectory = checkoutDirectory;
+        
         if ( StringUtils.isNotEmpty( relativePathProjectDirectory ) )
         {
-            return new File( checkoutDirectory, relativePathProjectDirectory );
+            workingDirectory = new File( checkoutDirectory, relativePathProjectDirectory );
         }
-        else
+        
+        if( StringUtils.isNotEmpty( rootProjectPath ) )
         {
-            return checkoutDirectory;
+            workingDirectory = new File( workingDirectory, rootProjectPath );
         }
+        
+        return workingDirectory;
     }
 }

Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java?rev=778088&r1=778087&r2=778088&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java Sun May 24 05:35:37 2009
@@ -26,6 +26,7 @@
 import org.apache.maven.shared.release.ReleaseResult;
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.apache.maven.shared.release.scm.ScmTranslator;
+import org.apache.maven.shared.release.util.ReleaseUtil;
 import org.codehaus.plexus.util.StringUtils;
 import org.jdom.Element;
 import org.jdom.Namespace;
@@ -106,7 +107,7 @@
                 tagBase = "scm:svn:" + tagBase;
             }
 
-            Scm rootScm = rootProject.getScm();
+            Scm rootScm = rootProject.getScm();            
             if ( scm.getConnection() != null )
             {
                 if ( rootScm.getConnection() != null && scm.getConnection().indexOf( rootScm.getConnection() ) == 0 )
@@ -126,6 +127,8 @@
                 String value =
                     translator.translateTagUrl( scm.getConnection(), tag + subDirectoryTag, scmConnectionTag );
 
+                value = addRootProjectPath( rootProject, value );
+                
                 if ( !value.equals( scm.getConnection() ) )
                 {
                     rewriteElement( "connection", value, scmRoot, namespace );
@@ -144,6 +147,8 @@
                 String value =
                     translator.translateTagUrl( scm.getDeveloperConnection(), tag + subDirectoryTag, tagBase );
 
+                value = addRootProjectPath( rootProject, value );
+                
                 if ( !value.equals( scm.getDeveloperConnection() ) )
                 {
                     rewriteElement( "developerConnection", value, scmRoot, namespace );
@@ -170,6 +175,7 @@
                 }
                 // use original tag base without protocol
                 String value = translator.translateTagUrl( scm.getUrl(), tag + subDirectoryTag, tagScmUrl );
+                value = addRootProjectPath( rootProject, value );
                 if ( !value.equals( scm.getUrl() ) )
                 {
                     rewriteElement( "url", value, scmRoot, namespace );
@@ -198,6 +204,16 @@
         return result;
     }
 
+    private String addRootProjectPath( MavenProject rootProject, String value )
+    {
+        String rootProjectPath = ReleaseUtil.getRootProjectPath( rootProject );
+        if( !StringUtils.isEmpty( rootProjectPath ) )
+        {
+            value = value + rootProjectPath;
+        }
+        return value;
+    }
+
     protected Map getOriginalVersionMap( ReleaseDescriptor releaseDescriptor, List reactorProjects )
     {
         return releaseDescriptor.getOriginalVersions( reactorProjects );

Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java?rev=778088&r1=778087&r2=778088&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java Sun May 24 05:35:37 2009
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmTagParameters;
@@ -35,8 +37,14 @@
 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.apache.maven.shared.release.util.ReleaseUtil;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
 import java.util.List;
 
 /**
@@ -66,18 +74,30 @@
 
         ScmRepository repository;
         ScmProvider provider;
-        try
+        
+        String workingDirectory = releaseDescriptor.getWorkingDirectory();
+        List modules = getModules( releaseDescriptor, workingDirectory );
+        String scmSourceUrl = releaseDescriptor.getScmSourceUrl();
+        
+     // determine if project is a flat multi-module
+        if ( modules != null && !modules.isEmpty() )
         {
+            workingDirectory = ReleaseUtil.getBaseWorkingDirectory( workingDirectory, modules );            
+            releaseDescriptor.setScmSourceUrl( ReleaseUtil.getBaseScmUrl( scmSourceUrl, modules ) );
+        }
+        
+        try
+        {   
             repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, releaseEnvironment.getSettings() );
-
+            
             provider = scmRepositoryConfigurator.getRepositoryProvider( repository );
         }
         catch ( ScmRepositoryException e )
-        {
+        {            
             throw new ReleaseScmRepositoryException( e.getMessage(), e.getValidationMessages() );
         }
         catch ( NoSuchScmProviderException e )
-        {
+        {   
             throw new ReleaseExecutionException( "Unable to configure SCM repository: " + e.getMessage(), e );
         }
 
@@ -85,7 +105,7 @@
         try
         {
             // TODO: want includes/excludes?
-            ScmFileSet fileSet = new ScmFileSet( new File( releaseDescriptor.getWorkingDirectory() ) );
+            ScmFileSet fileSet = new ScmFileSet( new File( workingDirectory ) );
             String tagName = releaseDescriptor.getScmReleaseLabel();
             ScmTagParameters scmTagParameters = new ScmTagParameters( releaseDescriptor.getScmCommentPrefix()
                 + " copy for tag " + tagName );
@@ -102,6 +122,10 @@
         {
             throw new ReleaseExecutionException( "An error is occurred in the tag process: " + e.getMessage(), e );
         }
+        finally
+        {
+            revertToOriginalScmSourceUrl( releaseDescriptor, scmSourceUrl );
+        }
 
         if ( !result.isSuccess() )
         {
@@ -113,21 +137,81 @@
         return relResult;
     }
 
+    private void revertToOriginalScmSourceUrl( ReleaseDescriptor releaseDescriptor, String scmSourceUrl )
+    {
+        if( !scmSourceUrl.equals( releaseDescriptor.getScmSourceUrl() ) )
+        {
+            releaseDescriptor.setScmSourceUrl( scmSourceUrl );
+        }
+    }
+
+    private List getModules( ReleaseDescriptor releaseDescriptor, String workingDirectory )
+    {
+        try
+        {
+            String pomFile = releaseDescriptor.getPomFileName();
+            if ( pomFile == null || "".equals( pomFile.trim() ) )
+            {
+                pomFile = ReleaseUtil.POMv4;
+            }
+
+            String pathToRootPom = workingDirectory + ReleaseUtil.FS + pomFile;
+
+            MavenXpp3Reader reader = new MavenXpp3Reader();
+            Reader in = new FileReader( new File( pathToRootPom ) );
+
+            Model model = reader.read( in );
+            
+            return model.getModules();            
+        }
+        catch ( FileNotFoundException e )
+        {   
+            getLogger().warn( "Pom file not found : " + e.getMessage() );
+            getLogger().warn( "Assuming working directory in release descriptor is the base working directory." );
+
+        }
+        catch ( IOException e )
+        {   
+            getLogger().warn( "IO error occurred while reading pom file : " + e.getMessage() );
+            getLogger().warn( "Assuming working directory in release descriptor is the base working directory." );
+        }
+        catch ( XmlPullParserException e )
+        {         
+            getLogger().warn( "Error parsing pom file : " + e.getMessage() );
+            getLogger().warn( "Assuming working directory in release descriptor is the base working directory." );
+        }
+        
+        return null;
+    }
+
     public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         ReleaseResult result = new ReleaseResult();
 
-        validateConfiguration( releaseDescriptor );
-
-        logInfo( result, "Full run would be tagging " + releaseDescriptor.getWorkingDirectory() + " with label: '" +
+        validateConfiguration( releaseDescriptor );        
+        
+        String workingDirectory = releaseDescriptor.getWorkingDirectory();
+        List modules = getModules( releaseDescriptor, workingDirectory );
+        String scmSourceUrl = releaseDescriptor.getScmSourceUrl();     
+        
+     // determine if project is a flat multi-module
+        if ( modules != null && !modules.isEmpty() )
+        {
+            workingDirectory = ReleaseUtil.getBaseWorkingDirectory( workingDirectory, modules );
+            releaseDescriptor.setScmSourceUrl( ReleaseUtil.getBaseScmUrl( scmSourceUrl, modules ) );
+        }
+        
+        logInfo( result, "Full run would be tagging " + workingDirectory + " with label: '" +
             releaseDescriptor.getScmReleaseLabel() + "'" );
 
+        revertToOriginalScmSourceUrl( releaseDescriptor, scmSourceUrl );
+        
         result.setResultCode( ReleaseResult.SUCCESS );
 
         return result;
     }
-
+    
     private static void validateConfiguration( ReleaseDescriptor releaseDescriptor )
         throws ReleaseFailureException
     {
@@ -135,5 +219,5 @@
         {
             throw new ReleaseFailureException( "A release label is required for committing" );
         }
-    }
+    }    
 }

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=778088&r1=778087&r2=778088&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 Sun May 24 05:35:37 2009
@@ -25,6 +25,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
@@ -37,12 +38,17 @@
 {
     public static final String RELEASE_POMv4 = "release-pom.xml";
 
-    private static final String POMv4 = "pom.xml";
+    public static final String POMv4 = "pom.xml";
 
     /**
      * The line separator to use.
      */
     public static final String LS = System.getProperty( "line.separator" );
+    
+    /**
+     * The path separator to use.
+     */
+    public static final String FS = System.getProperty( "file.separator" );
 
     private ReleaseUtil()
     {
@@ -138,5 +144,137 @@
         }
         return norm;
     }
-
+    
+    /**
+     * Determines the base working directory with regard to the longest relative path of the modules. 
+     * 
+     * @param workingDirectory The working directory of the project to be released
+     * @param modules The \<modules\> of the project to be released
+     * @return The base working directory of the project
+     */
+    public static String getBaseWorkingDirectory( String workingDirectory, List modules )
+    {        
+        int count = getLongestPathCount( modules );
+        workingDirectory = StringUtils.chomp( workingDirectory, FS );
+        
+        while( count > 0 )
+        {   
+            int lastSep = workingDirectory.lastIndexOf( FS );
+            workingDirectory = StringUtils.substring( workingDirectory, 0, lastSep );            
+            count--;
+        }
+        return workingDirectory;
+    }
+    
+    /**
+     * Determines the base scm url with regard to the longest relative path of the modules.
+     * 
+     * @param scmUrl The scm source url of the project to be released which is set in the release descriptor.
+     * @param modules The \<modules\> of the project to be released
+     * @return
+     */
+    public static String getBaseScmUrl( String scmUrl, List modules )
+    {                
+        int count = getLongestPathCount( modules );                
+        scmUrl = StringUtils.chomp( scmUrl, "/" );
+        
+        while( count > 0 )
+        {   
+            int lastSep = scmUrl.lastIndexOf( "/" );
+            scmUrl = StringUtils.substring( scmUrl, 0, lastSep );        
+            count--;
+        }
+        return scmUrl;
+    }
+    
+    /**
+     * Returns the common path of the two paths specified.
+     * 
+     * @param path1 The first path
+     * @param path2 The second path
+     * @return The common path of the two paths.
+     */
+    public static String getCommonPath( String path1, String path2 )
+    {
+        if ( path2 == null || path2.equals( "" ) )
+        {
+            return path1;
+        }
+        else
+        {
+            int indexDiff = StringUtils.indexOfDifference( path1, path2 );            
+            if( indexDiff > 0 )
+            {
+                return path1.substring( 0, indexDiff );
+            }
+            else
+            {
+                return path1;
+            }
+        }
+    }
+    
+    private static int getLongestPathCount( List modules )
+    {
+        int count = 0;
+        if( modules == null || modules.isEmpty() )
+        {
+            return 0;
+        }
+        
+        for( Iterator iter = modules.iterator(); iter.hasNext(); )
+        {
+            String module = ( String ) iter.next();
+            module = StringUtils.replace( module, "\\", "/" );
+            
+            // module is a path
+            if( module.indexOf( '/' ) != -1 )
+            {   
+                int tmp = StringUtils.countMatches( module, "/" );
+                if( tmp > count )
+                {
+                    count = tmp;
+                }
+            }                    
+        }
+        return count;
+    }
+    
+    /**
+     * Gets the path to the project root. Useful in determining whether the project has a flat structure.
+     * 
+     * @param project
+     * @return
+     */
+    public static String getRootProjectPath( MavenProject project )
+    {
+        String relPath = "";
+        
+        // module is a flat multi-module project
+        if( getLongestPathCount( project.getModules() ) > 0 )
+        {     
+            String projectBaseDir = project.getBasedir().getPath();
+            if( ReleaseUtil.FS.equals( "\\" ) )
+            {
+                projectBaseDir = StringUtils.replace( projectBaseDir, "/", "\\" );
+            }
+            else
+            {
+                projectBaseDir = StringUtils.replace( projectBaseDir, "\\", "/" );
+            }
+            
+            String projectPath = "";            
+            if( project.getScm() != null )
+            {
+                projectPath =
+                    ReleaseUtil.getCommonPath( StringUtils.reverse( StringUtils.chomp( projectBaseDir, ReleaseUtil.FS ) ),
+                                               StringUtils.reverse( StringUtils.chomp( project.getScm().getConnection(), "/" ) ) );
+            }
+            
+            
+            relPath = StringUtils.reverse( projectPath );
+        }
+        
+        return relPath;
+    }
 }

Modified: maven/release/trunk/maven-release-manager/src/main/mdo/release-descriptor.mdo
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/mdo/release-descriptor.mdo?rev=778088&r1=778087&r2=778088&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/mdo/release-descriptor.mdo (original)
+++ maven/release/trunk/maven-release-manager/src/main/mdo/release-descriptor.mdo Sun May 24 05:35:37 2009
@@ -42,7 +42,7 @@
         <!-- Descriptive Information -->
         <field>
           <name>name</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             The name of this release configuration
@@ -50,7 +50,7 @@
         </field>
         <field>
           <name>description</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             The description of this release configuration
@@ -60,7 +60,7 @@
         <!-- SCM Information -->
         <field>
           <name>ScmCommentPrefix</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <defaultValue>[maven-release-manager] </defaultValue>
           <description>
@@ -69,7 +69,7 @@
         </field>
         <field>
           <name>scmSourceUrl</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             This is a MavenSCM of where you're going to get the sources to make the release with.
@@ -78,7 +78,7 @@
         </field>
         <field>
           <name>scmTagBase</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             Where you are going to put your tagged sources
@@ -87,7 +87,7 @@
         </field>
         <field>
           <name>scmReleaseLabel</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             tag name: the identifier for the tag.
@@ -96,7 +96,7 @@
         </field>
         <field>
           <name>scmUsername</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             The user name to interact with the scm
@@ -104,7 +104,7 @@
         </field>
         <field>
           <name>scmPassword</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             The password for the user interacting with the scm
@@ -112,7 +112,7 @@
         </field>
         <field>
           <name>scmPrivateKey</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             Private key for an SSH based SCM repository.
@@ -120,7 +120,7 @@
         </field>
         <field>
           <name>scmPrivateKeyPassPhrase</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             Pass phrase for the private key.
@@ -128,7 +128,7 @@
         </field>
         <field>
           <name>scmUseEditMode</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <description>
             Whether to use edit mode when making SCM modifications. This setting is disregarded
@@ -137,7 +137,7 @@
         </field>
         <field>
           <name>scmRelativePathProjectDirectory</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             Relative path of the project returned by the checkout command.
@@ -146,7 +146,7 @@
         <!-- Maven Information -->
         <field>
           <name>releaseVersions</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>Map</type>
           <association stash.keyType="String">
             <type>String</type>
@@ -158,7 +158,7 @@
         </field>
         <field>
           <name>developmentVersions</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>Map</type>
           <association stash.keyType="String">
             <type>String</type>
@@ -170,7 +170,7 @@
         </field>
         <field>
           <name>resolvedSnapshotDependencies</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>Map</type>
           <association stash.keyType="String">
             <type>String</type>
@@ -182,7 +182,7 @@
         </field>
         <field>
           <name>updateDependencies</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <defaultValue>true</defaultValue>
           <description>
@@ -191,7 +191,7 @@
         </field>
         <field>
           <name>useReleaseProfile</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <defaultValue>true</defaultValue>
           <description>
@@ -200,7 +200,7 @@
         </field>
         <field>
           <name>originalScmInfo</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>Map</type>
           <association stash.keyType="String">
             <type>String</type>
@@ -212,7 +212,7 @@
         </field>
         <field>
           <name>workingDirectory</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             The directory where the release is performed.
@@ -220,7 +220,7 @@
         </field>
         <field>
           <name>checkoutDirectory</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             The directory where the tag will be checked out.
@@ -228,7 +228,7 @@
         </field>
         <field>
           <name>completedPhase</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             The last completed phase.
@@ -236,7 +236,7 @@
         </field>
         <field>
           <name>addSchema</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <description>
             <![CDATA[Whether to add the model schema to the top of the rewritten POM if it wasn't there already.
@@ -245,7 +245,7 @@
         </field>
         <field>
           <name>generateReleasePoms</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <description>
             Whether to generate release POMs.
@@ -253,7 +253,7 @@
         </field>
         <field>
           <name>autoVersionSubmodules</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <description>
             Whether to use the parent pom version for submodule verstions.
@@ -261,7 +261,7 @@
         </field>
         <field>
           <name>interactive</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <defaultValue>true</defaultValue>
           <description>
@@ -271,7 +271,7 @@
         </field>
         <field>
           <name>snapshotReleasePluginAllowed</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <defaultValue>false</defaultValue>
           <description>
@@ -280,7 +280,7 @@
         </field>
         <field>
           <name>additionalArguments</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             Additional arguments to pass to any executed Maven process.
@@ -288,7 +288,7 @@
         </field>
         <field>
           <name>pomFileName</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             The file name of the POM to pass to any executed Maven process.
@@ -296,7 +296,7 @@
         </field>
         <field>
           <name>preparationGoals</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             The goals to execute in preparation for the release.
@@ -304,7 +304,7 @@
         </field>
         <field>
           <name>performGoals</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             The goals to execute in perform phase for the release.
@@ -312,7 +312,7 @@
         </field>
         <field>
           <name>commitByProject</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <defaultValue>false</defaultValue>
           <description>
@@ -321,7 +321,7 @@
         </field>
         <field>
           <name>branchCreation</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <description>
             Whether to create a branch instead of do a release.
@@ -329,7 +329,7 @@
         </field>
         <field>
           <name>updateBranchVersions</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <description>
             Whether to update branch POM versions.
@@ -337,7 +337,7 @@
         </field>
         <field>
           <name>updateWorkingCopyVersions</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <description>
             Whether to update working copy POM versions.
@@ -345,7 +345,7 @@
         </field>
         <field>
           <name>updateVersionsToSnapshot</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <description>
             Whether to update branch versions to SNAPSHOT.
@@ -353,7 +353,7 @@
         </field>
         <field>
           <name>allowTimestampedSnapshots</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <defaultValue>false</defaultValue>
           <description>
@@ -363,7 +363,7 @@
         </field>
         <field>
           <name>defaultReleaseVersion</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             Default version to use for the tagged release or the new branch.
@@ -371,7 +371,7 @@
         </field>
         <field>
           <name>defaultDevelopmentVersion</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             Default version to use for new working copy.
@@ -380,7 +380,7 @@
         
         <field>
           <name>remoteTagging</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>boolean</type>
           <defaultValue>false</defaultValue>
           <description>
@@ -390,13 +390,21 @@
         </field> 
         <field>
           <name>scmReleasedPomRevision</name>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <type>String</type>
           <description>
             NOTE : currently only implemented with svn scm. It contains the revision of the committed released pom to remotely tag
             the source code with this revision.
           </description>
-        </field>               
+        </field>   
+        <field>
+          <name>rootProjectPath</name>
+          <version>2.0.0+</version>
+          <type>String</type>
+          <description>
+            Path to the root project. Used during release:perform and release:stage of flat multi-module projects.
+          </description>
+        </field>            
 
         <!-- Announcement Information
 
@@ -413,7 +421,7 @@
       <!-- Code Segments -->
       <codeSegments>
         <codeSegment>
-          <version>1.0.0</version>
+          <version>1.0.0+</version>
           <code><![CDATA[
     public static final String DEVELOPMENT_KEY = "dev";
     

Modified: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhaseTest.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhaseTest.java?rev=778088&r1=778087&r2=778088&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhaseTest.java (original)
+++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhaseTest.java Sun May 24 05:35:37 2009
@@ -306,7 +306,17 @@
 
         assertTrue( comparePomFiles( reactorProjects ) );
     }
+    
+    public void testRewritePomForFlatMultiModule()
+        throws Exception
+    {   
+        List reactorProjects = createReactorProjects( "rewrite-for-release/pom-with-parent-flat", "/root-project", true );
+        ReleaseDescriptor config = createConfigurationForPomWithParentAlternateNextVersion( reactorProjects );
 
+        phase.execute( config, new DefaultReleaseEnvironment(), reactorProjects );
+
+        assertTrue( comparePomFiles( reactorProjects ) );
+    }
 
     protected ReleaseDescriptor createDescriptorFromProjects( List reactorProjects )
     {

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=778088&r1=778087&r2=778088&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 Sun May 24 05:35:37 2009
@@ -3,6 +3,12 @@
  */
 package org.apache.maven.shared.release.util;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.model.Scm;
+import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.PlexusTestCase;
 
 /**
@@ -22,5 +28,149 @@
         assertNull( ReleaseUtil.getReleasePom( null ) );
         assertNull( ReleaseUtil.getStandardPom( null ) );
     }
+    
+    public void testGetBaseWorkingDirectoryNoModules()
+        throws Exception
+    {
+        assertEquals( "/working/directory/flat-multi-module/project",
+                      ReleaseUtil.getBaseWorkingDirectory( "/working/directory/flat-multi-module/project", null ) );
+        
+        assertEquals( "/working/directory/flat-multi-module/project",
+                      ReleaseUtil.getBaseWorkingDirectory( "/working/directory/flat-multi-module/project", new ArrayList() ) );
+    }
+    
+    public void testGetBaseWorkingDirOfFlatMultiModule()
+        throws Exception
+    {
+        List modules = new ArrayList();
+        modules.add( "../core" );
+        modules.add( "../webapp" );
+
+        assertEquals( "/working/directory/flat-multi-module",
+                      ReleaseUtil.getBaseWorkingDirectory( "/working/directory/flat-multi-module" + ReleaseUtil.FS +
+                          "root-project", modules ) );
+        assertEquals( "/working/directory/flat-multi-module",
+                      ReleaseUtil.getBaseWorkingDirectory( "/working/directory/flat-multi-module" + ReleaseUtil.FS +
+                          "root-project" + ReleaseUtil.FS, modules ) );
+    }
 
+    public void testGetBaseWorkingDirectoryOfRegularMultiModule()
+        throws Exception
+    {
+        List modules = new ArrayList();
+        modules.add( "core" );
+        modules.add( "webapp" );
+
+        assertEquals( "/working/directory/flat-multi-module",
+                      ReleaseUtil.getBaseWorkingDirectory( "/working/directory/flat-multi-module", modules ) );
+        assertEquals( "/working/directory/flat-multi-module",
+                      ReleaseUtil.getBaseWorkingDirectory( "/working/directory/flat-multi-module" + ReleaseUtil.FS,
+                                                           modules ) );
+    }
+
+    public void testGetBaseScmUrlNoModules()
+        throws Exception
+    {
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk",
+                      ReleaseUtil.getBaseScmUrl( "scm:svn:http://svn.repo.com/flat-multi-module/trunk", null ) );
+        
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk",
+                      ReleaseUtil.getBaseScmUrl( "scm:svn:http://svn.repo.com/flat-multi-module/trunk", new ArrayList() ) );
+    }
+    
+    public void testGetBaseScmUrlOfFlatMultiModule()
+        throws Exception
+    {
+        List modules = new ArrayList();
+        modules.add( "../core" );
+        modules.add( "../webapp" );
+
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk",
+                      ReleaseUtil.getBaseScmUrl( "scm:svn:http://svn.repo.com/flat-multi-module/trunk/root-project",
+                                                 modules ) );
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk",
+                      ReleaseUtil.getBaseScmUrl( "scm:svn:http://svn.repo.com/flat-multi-module/trunk/root-project/",
+                                                 modules ) );
+    }
+
+    public void testGetBaseScmUrlOfRegularMultiModule()
+        throws Exception
+    {
+        List modules = new ArrayList();
+        modules.add( "core" );
+        modules.add( "webapp" );
+
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk",
+                      ReleaseUtil.getBaseScmUrl( "scm:svn:http://svn.repo.com/flat-multi-module/trunk", modules ) );
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk",
+                      ReleaseUtil.getBaseScmUrl( "scm:svn:http://svn.repo.com/flat-multi-module/trunk/", modules ) );
+    }
+    
+    public void testGetRootProjectPathFlatStructure()
+        throws Exception
+    {   
+        MavenProject project = new MavenProject()
+        {
+            public List getModules()
+            {
+                List modules = new ArrayList();
+                modules.add( "../core" );
+                modules.add( "../webapp" );
+                modules.add( "../commons" );
+                
+                return modules;
+            }
+            
+            public File getBasedir()
+            {
+                return new File( "/flat-multi-module/root-project" );
+            }
+            
+            public Scm getScm()
+            {
+                Scm scm = new Scm();
+                scm.setConnection( "scm:svn:file://localhost/target/svnroot/flat-multi-module/trunk/root-project" );
+                
+                return scm;
+            }
+        };
+        
+        assertEquals( "/root-project", ReleaseUtil.getRootProjectPath( project ) );
+    }
+    
+    public void testGetRootProjectPathRegularMultiModuleStructure()
+        throws Exception
+    {   
+        MavenProject project = new MavenProject()
+        {
+            Scm scm = new Scm();
+            
+            public List getModules()
+            {
+                List modules = new ArrayList();
+                modules.add( "core" );
+                modules.add( "webapp" );
+                modules.add( "commons" );
+                
+                return modules;
+            }
+            
+            public File getBasedir()
+            {
+                return new File( "/regular-multi-module" );
+            }
+            
+            public Scm getScm()
+            {
+                scm.setConnection( "scm:svn:file://localhost/target/svnroot/regular-multi-module/trunk" );
+                
+                return scm;
+            }
+        };
+        
+        assertEquals( "", ReleaseUtil.getRootProjectPath( project ) );
+        
+        project.getScm().setConnection( "scm:svn:file://localhost/target/svnroot/regular-multi-module/trunk/" );        
+        assertEquals( "", ReleaseUtil.getRootProjectPath( project ) );
+    }
 }

Added: maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/root-project/expected-pom.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/root-project/expected-pom.xml?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/root-project/expected-pom.xml (added)
+++ maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/root-project/expected-pom.xml Sun May 24 05:35:37 2009
@@ -0,0 +1,33 @@
+<!--
+  ~ Copyright 2009 The Apache Software Foundation.
+  ~
+  ~ Licensed 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.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>groupId</groupId>
+  <artifactId>artifactId</artifactId>
+  <version>1.0</version>
+  <packaging>pom</packaging>
+
+  <scm>
+    <connection>scm:svn:file://localhost/tmp/scm-repo/tags/release-label/root-project</connection>
+    <developerConnection>scm:svn:file://localhost/tmp/scm-repo/tags/release-label/root-project</developerConnection>
+    <url>file://localhost/tmp/scm-repo/tags/release-label/root-project</url>
+  </scm>
+
+  <modules>
+    <module>../subproject1</module>
+  </modules>
+</project>

Added: maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/root-project/pom.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/root-project/pom.xml?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/root-project/pom.xml (added)
+++ maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/root-project/pom.xml Sun May 24 05:35:37 2009
@@ -0,0 +1,33 @@
+<!--
+  ~ Copyright 2009 The Apache Software Foundation.
+  ~
+  ~ Licensed 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.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>groupId</groupId>
+  <artifactId>artifactId</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <scm>
+    <connection>scm:svn:file://localhost/tmp/scm-repo/trunk/root-project</connection>
+    <developerConnection>scm:svn:file://localhost/tmp/scm-repo/trunk/root-project</developerConnection>
+    <url>file://localhost/tmp/scm-repo/trunk/root-project</url>
+  </scm>
+
+  <modules>
+    <module>../subproject1</module>
+  </modules>
+</project>

Added: maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/subproject1/expected-pom.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/subproject1/expected-pom.xml?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/subproject1/expected-pom.xml (added)
+++ maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/subproject1/expected-pom.xml Sun May 24 05:35:37 2009
@@ -0,0 +1,27 @@
+<!--
+  ~ Copyright 2009 The Apache Software Foundation.
+  ~
+  ~ Licensed 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.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>groupId</groupId>
+    <artifactId>artifactId</artifactId>
+    <version>1.0</version>
+  </parent>
+
+  <artifactId>subproject1</artifactId>
+  <version>2.0</version>
+</project>

Added: maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/subproject1/pom.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/subproject1/pom.xml?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/subproject1/pom.xml (added)
+++ maven/release/trunk/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-flat/subproject1/pom.xml Sun May 24 05:35:37 2009
@@ -0,0 +1,27 @@
+<!--
+  ~ Copyright 2009 The Apache Software Foundation.
+  ~
+  ~ Licensed 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.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>groupId</groupId>
+    <artifactId>artifactId</artifactId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>subproject1</artifactId>
+  <version>2.0-SNAPSHOT</version>
+</project>

Modified: maven/release/trunk/maven-release-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/pom.xml?rev=778088&r1=778087&r2=778088&view=diff
==============================================================================
--- maven/release/trunk/maven-release-plugin/pom.xml (original)
+++ maven/release/trunk/maven-release-plugin/pom.xml Sun May 24 05:35:37 2009
@@ -168,7 +168,13 @@
               <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
               <setupIncludes>
                 <setupInclude>maven-scm-provider-*/pom.xml</setupInclude>
-              </setupIncludes>
+              </setupIncludes>              
+              <pomIncludes>
+                <pomInclude>forked-basic/pom.xml</pomInclude>
+                <pomInclude>invoker-basic/pom.xml</pomInclude>
+                <pomInclude>flat-multi-module/parent-project/pom.xml</pomInclude>
+                <pomInclude>regular-multi-module/pom.xml</pomInclude>
+              </pomIncludes>               
               <pomExcludes>
                 <pomExclude>project/**</pomExclude>
               </pomExcludes>

Added: maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/pom.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/pom.xml?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/pom.xml (added)
+++ maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/pom.xml Sun May 24 05:35:37 2009
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!--
+  ~ 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.
+  -->
+<project>
+  <parent>
+    <artifactId>parent-project</artifactId>
+    <groupId>org.apache.maven.plugin.release</groupId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugin.release</groupId>
+  <artifactId>module-a</artifactId>
+  <name>module-a</name>
+  <version>1.0-SNAPSHOT</version>
+  <url>http://maven.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

Added: maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/module/a/App.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/module/a/App.java?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/module/a/App.java (added)
+++ maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/module/a/App.java Sun May 24 05:35:37 2009
@@ -0,0 +1,13 @@
+package org.apache.maven.plugin.release.module.a;
+
+/**
+ * Hello world!
+ *
+ */
+public class App 
+{
+    public static void main( String[] args )
+    {
+        System.out.println( "Hello World!" );
+    }
+}

Added: maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/module/a/AppTest.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/module/a/AppTest.java?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/module/a/AppTest.java (added)
+++ maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/module/a/AppTest.java Sun May 24 05:35:37 2009
@@ -0,0 +1,38 @@
+package org.apache.maven.plugin.release.module.a;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+    extends TestCase
+{
+    /**
+     * Create the test case
+     *
+     * @param testName name of the test case
+     */
+    public AppTest( String testName )
+    {
+        super( testName );
+    }
+
+    /**
+     * @return the suite of tests being tested
+     */
+    public static Test suite()
+    {
+        return new TestSuite( AppTest.class );
+    }
+
+    /**
+     * Rigourous Test :-)
+     */
+    public void testApp()
+    {
+        assertTrue( true );
+    }
+}

Added: maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/pom.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/pom.xml?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/pom.xml (added)
+++ maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/pom.xml Sun May 24 05:35:37 2009
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!--
+  ~ 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.
+  -->
+<project>
+  <parent>
+    <artifactId>parent-project</artifactId>
+    <groupId>org.apache.maven.plugin.release</groupId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugin.release</groupId>
+  <artifactId>module-b</artifactId>
+  <name>module-b</name>
+  <version>1.0-SNAPSHOT</version>
+  <url>http://maven.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

Added: maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/module/b/App.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/module/b/App.java?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/module/b/App.java (added)
+++ maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/module/b/App.java Sun May 24 05:35:37 2009
@@ -0,0 +1,13 @@
+package org.apache.maven.plugin.release.module.b;
+
+/**
+ * Hello world!
+ *
+ */
+public class App 
+{
+    public static void main( String[] args )
+    {
+        System.out.println( "Hello World!" );
+    }
+}

Added: maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/module/b/AppTest.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/module/b/AppTest.java?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/module/b/AppTest.java (added)
+++ maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/module/b/AppTest.java Sun May 24 05:35:37 2009
@@ -0,0 +1,38 @@
+package org.apache.maven.plugin.release.module.b;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+    extends TestCase
+{
+    /**
+     * Create the test case
+     *
+     * @param testName name of the test case
+     */
+    public AppTest( String testName )
+    {
+        super( testName );
+    }
+
+    /**
+     * @return the suite of tests being tested
+     */
+    public static Test suite()
+    {
+        return new TestSuite( AppTest.class );
+    }
+
+    /**
+     * Rigourous Test :-)
+     */
+    public void testApp()
+    {
+        assertTrue( true );
+    }
+}

Added: maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/parent-project/pom.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/parent-project/pom.xml?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/parent-project/pom.xml (added)
+++ maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/parent-project/pom.xml Sun May 24 05:35:37 2009
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugin.release</groupId>
+  <artifactId>parent-project</artifactId>
+  <packaging>pom</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <name>parent-project</name>
+  <url>http://maven.apache.org</url>
+  <scm>
+    <connection>scm:svn:file://localhost/${project.file.parentFile.parentFile}/target/svnroot/flat-multi-module/trunk/parent-project</connection>    
+    <developerConnection>scm:svn:file://localhost/${project.file.parentFile.parentFile}/target/svnroot/flat-multi-module/trunk/parent-project</developerConnection>
+  </scm>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <modules>
+    <module>../module-a</module>
+    <module>../module-b</module>
+  </modules>
+</project>

Added: maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/parent-project/verify.bsh
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/parent-project/verify.bsh?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/parent-project/verify.bsh (added)
+++ maven/release/trunk/maven-release-plugin/src/it/flat-multi-module/parent-project/verify.bsh Sun May 24 05:35:37 2009
@@ -0,0 +1,38 @@
+import java.io.*;
+import java.util.*;
+import java.util.regex.*;
+
+try
+{   
+    File buildLog = new File( basedir, "build.log" );
+    
+    System.out.println( "Checking logs.." );
+    
+    StringBuffer data = new StringBuffer( 1024 );
+    BufferedReader reader = new BufferedReader( new FileReader( buildLog ) );
+    char[] buf = new char[1024];
+    int numRead = 0;
+    while ( ( numRead = reader.read( buf ) ) != -1 )
+    {
+        String readData = String.valueOf( buf, 0, numRead );
+        data.append( readData );
+        buf = new char[1024];
+    }
+    reader.close();
+    String contents = data.toString();
+
+    String expected = "flat-multi-module with label: 'parent-project-1.0'";
+    
+    if( contents.indexOf( expected ) != -1 )
+    {
+        return true;
+    }            
+}
+catch( Throwable t )
+{
+    t.printStackTrace();
+    return false;
+}
+
+System.out.println( "FAILED!" );
+return false;
\ No newline at end of file

Added: maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/pom.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/pom.xml?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/pom.xml (added)
+++ maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/pom.xml Sun May 24 05:35:37 2009
@@ -0,0 +1,21 @@
+<?xml version="1.0"?><project>
+  <parent>
+    <artifactId>regular-multi-module-project</artifactId>
+    <groupId>org.apache.maven.plugin.release</groupId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugin.release</groupId>
+  <artifactId>module-a</artifactId>
+  <name>module-a</name>
+  <version>1.0-SNAPSHOT</version>
+  <url>http://maven.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

Added: maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/module/a/App.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/module/a/App.java?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/module/a/App.java (added)
+++ maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/main/java/org/apache/maven/plugin/release/module/a/App.java Sun May 24 05:35:37 2009
@@ -0,0 +1,13 @@
+package org.apache.maven.plugin.release.module.a;
+
+/**
+ * Hello world!
+ *
+ */
+public class App 
+{
+    public static void main( String[] args )
+    {
+        System.out.println( "Hello World!" );
+    }
+}

Added: maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/module/a/AppTest.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/module/a/AppTest.java?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/module/a/AppTest.java (added)
+++ maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-a/src/test/java/org/apache/maven/plugin/release/module/a/AppTest.java Sun May 24 05:35:37 2009
@@ -0,0 +1,38 @@
+package org.apache.maven.plugin.release.module.a;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+    extends TestCase
+{
+    /**
+     * Create the test case
+     *
+     * @param testName name of the test case
+     */
+    public AppTest( String testName )
+    {
+        super( testName );
+    }
+
+    /**
+     * @return the suite of tests being tested
+     */
+    public static Test suite()
+    {
+        return new TestSuite( AppTest.class );
+    }
+
+    /**
+     * Rigourous Test :-)
+     */
+    public void testApp()
+    {
+        assertTrue( true );
+    }
+}

Added: maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/pom.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/pom.xml?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/pom.xml (added)
+++ maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/pom.xml Sun May 24 05:35:37 2009
@@ -0,0 +1,21 @@
+<?xml version="1.0"?><project>
+  <parent>
+    <artifactId>regular-multi-module-project</artifactId>
+    <groupId>org.apache.maven.plugin.release</groupId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugin.release</groupId>
+  <artifactId>module-b</artifactId>
+  <name>module-b</name>
+  <version>1.0-SNAPSHOT</version>
+  <url>http://maven.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

Added: maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/module/b/App.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/module/b/App.java?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/module/b/App.java (added)
+++ maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/main/java/org/apache/maven/plugin/release/module/b/App.java Sun May 24 05:35:37 2009
@@ -0,0 +1,13 @@
+package org.apache.maven.plugin.release.module.b;
+
+/**
+ * Hello world!
+ *
+ */
+public class App 
+{
+    public static void main( String[] args )
+    {
+        System.out.println( "Hello World!" );
+    }
+}

Added: maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/module/b/AppTest.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/module/b/AppTest.java?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/module/b/AppTest.java (added)
+++ maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/module-b/src/test/java/org/apache/maven/plugin/release/module/b/AppTest.java Sun May 24 05:35:37 2009
@@ -0,0 +1,38 @@
+package org.apache.maven.plugin.release.module.b;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+    extends TestCase
+{
+    /**
+     * Create the test case
+     *
+     * @param testName name of the test case
+     */
+    public AppTest( String testName )
+    {
+        super( testName );
+    }
+
+    /**
+     * @return the suite of tests being tested
+     */
+    public static Test suite()
+    {
+        return new TestSuite( AppTest.class );
+    }
+
+    /**
+     * Rigourous Test :-)
+     */
+    public void testApp()
+    {
+        assertTrue( true );
+    }
+}

Added: maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/pom.xml
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/pom.xml?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/pom.xml (added)
+++ maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/pom.xml Sun May 24 05:35:37 2009
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugin.release</groupId>
+  <artifactId>regular-multi-module-project</artifactId>
+  <packaging>pom</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <name>parent-project</name>
+  <url>http://maven.apache.org</url>
+  <scm>
+    <connection>scm:svn:file://localhost/${project.file.parentFile.parentFile}/target/svnroot/flat-multi-module/trunk/</connection>    
+    <developerConnection>scm:svn:file://localhost/${project.file.parentFile.parentFile}/target/svnroot/flat-multi-module/trunk/</developerConnection>
+  </scm>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <modules>
+    <module>module-a</module>
+    <module>module-b</module>
+  </modules>
+</project>

Added: maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/verify.bsh
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/verify.bsh?rev=778088&view=auto
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/verify.bsh (added)
+++ maven/release/trunk/maven-release-plugin/src/it/regular-multi-module/verify.bsh Sun May 24 05:35:37 2009
@@ -0,0 +1,38 @@
+import java.io.*;
+import java.util.*;
+import java.util.regex.*;
+
+try
+{   
+    File buildLog = new File( basedir, "build.log" );
+    
+    System.out.println( "Checking logs.." );
+    
+    StringBuffer data = new StringBuffer( 1024 );
+    BufferedReader reader = new BufferedReader( new FileReader( buildLog ) );
+    char[] buf = new char[1024];
+    int numRead = 0;
+    while ( ( numRead = reader.read( buf ) ) != -1 )
+    {
+        String readData = String.valueOf( buf, 0, numRead );
+        data.append( readData );
+        buf = new char[1024];
+    }
+    reader.close();
+    String contents = data.toString();
+
+    String expected = "regular-multi-module with label: 'regular-multi-module-project-1.0'";
+    
+    if( contents.indexOf( expected ) != -1 )
+    {
+        return true;
+    }            
+}
+catch( Throwable t )
+{
+    t.printStackTrace();
+    return false;
+}
+
+System.out.println( "FAILED!" );
+return false;
\ No newline at end of file



Re: svn commit: r778088 [1/2] - in /maven/release/trunk: maven-release-manager/ maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ maven-release-manager/src...

Posted by Benjamin Bentmann <be...@udo.edu>.
Hi Maria,

> Author: oching
> Date: Sun May 24 05:35:37 2009
> New Revision: 778088
> 
> URL: http://svn.apache.org/viewvc?rev=778088&view=rev
> Log:
> [MRELEASE-261]/[MRELEASE-322]/[MRELEASE-225]/[MRELEASE-336]
> o fix releasing of projects with flat structure
> o determine base working directory and the base scm url based on the root project's working dir and scm url, and the relative path of it's modules
> o added unit tests and integration tests

This seems to break the tests on Windows [0], can you review the changes 
please?


Benjamin


[0] 
https://grid.sonatype.org/ci/job/Maven-release-trunk/jdk=1.5,label=windows/53/console

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org