Author: bentmann
Date: Fri Aug 15 10:48:32 2008
New Revision: 686291

URL: http://svn.apache.org/viewvc?rev=686291&view=rev
Log:
[MINVOKER-55] Filter IT POMs in-place if cloneProjectsTo is used

Modified:
    
maven/plugins/trunk/maven-invoker-plugin/src/it/pom-filtering-encoding/verify.bsh
    maven/plugins/trunk/maven-invoker-plugin/src/it/pom-filtering/verify.bsh
    
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java

Modified: 
maven/plugins/trunk/maven-invoker-plugin/src/it/pom-filtering-encoding/verify.bsh
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/pom-filtering-encoding/verify.bsh?rev=686291&r1=686290&r2=686291&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-invoker-plugin/src/it/pom-filtering-encoding/verify.bsh
 (original)
+++ 
maven/plugins/trunk/maven-invoker-plugin/src/it/pom-filtering-encoding/verify.bsh
 Fri Aug 15 10:48:32 2008
@@ -6,7 +6,15 @@
 
 boolean check( String project, String encoding )
 {
-    File pomFile = new File( basedir, "target/it/" + project + 
"/target/classes/interpolated-pom.xml" );
+    File pomFile = new File( basedir, "target/it/" + project + "/pom.xml" );
+    System.out.println( "Checking for existence of original IT POM: " + 
pomFile );
+    if ( !pomFile.exists() )
+    {
+        System.out.println( "FAILED!" );
+        return false;
+    }
+
+    pomFile = new File( basedir, "target/it/" + project + 
"/target/classes/pom.xml" );
     System.out.println( "Checking for existence of interpolated IT POM: " + 
pomFile );
     if ( !pomFile.exists() )
     {

Modified: 
maven/plugins/trunk/maven-invoker-plugin/src/it/pom-filtering/verify.bsh
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/pom-filtering/verify.bsh?rev=686291&r1=686290&r2=686291&view=diff
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/it/pom-filtering/verify.bsh 
(original)
+++ maven/plugins/trunk/maven-invoker-plugin/src/it/pom-filtering/verify.bsh 
Fri Aug 15 10:48:32 2008
@@ -6,7 +6,15 @@
 
 try
 {
-    File pomFile = new File( basedir, 
"target/it/project/target/classes/interpolated-pom.xml" );
+    File pomFile = new File( basedir, "target/it/project/pom.xml" );
+    System.out.println( "Checking for existence of original IT POM: " + 
pomFile );
+    if ( !pomFile.exists() )
+    {
+        System.out.println( "FAILED!" );
+        return false;
+    }
+
+    pomFile = new File( basedir, "target/it/project/target/classes/pom.xml" );
     System.out.println( "Checking for existence of interpolated IT POM: " + 
pomFile );
     if ( !pomFile.exists() )
     {

Modified: 
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java?rev=686291&r1=686290&r2=686291&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java
 Fri Aug 15 10:48:32 2008
@@ -20,13 +20,13 @@
  */
 
 import java.io.BufferedReader;
-import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintStream;
 import java.io.Reader;
+import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -411,11 +411,17 @@
      */
     private String invokerPropertiesFile;
 
+
     /**
      * The supported script interpreters, indexed by the file extension of 
their associated script files.
      */
     private Map scriptInterpreters;
 
+    /**
+     * A string used to prefix the file name of the filtered POMs, can be 
empty but never <code>null</code>. This will
+     * be cleared when the parameter [EMAIL PROTECTED] #cloneProjectsTo} is 
used so that the cloned POMs will be filtered in-place.
+     */
+    private String filteredPomPrefix = "interpolated-";
 
     /**
      * Invokes Maven on the configured test projects.
@@ -486,6 +492,12 @@
             try
             {
                 cloneProjects( includedPoms );
+
+                // enable in-place filtering
+                if ( !cloneProjectsTo.getCanonicalFile().equals( 
projectsDirectory.getCanonicalFile() ) )
+                {
+                    filteredPomPrefix = "";
+                }
             }
             catch ( IOException e )
             {
@@ -770,7 +782,7 @@
         File interpolatedPomFile = null;
         if ( pomFile != null )
         {
-            interpolatedPomFile = new File( basedir, "interpolated-" + 
pomFile.getName() );
+            interpolatedPomFile = new File( basedir, filteredPomPrefix + 
pomFile.getName() );
             buildInterpolatedFile( pomFile, interpolatedPomFile );
         }
 
@@ -793,7 +805,7 @@
         }
         finally
         {
-            if ( interpolatedPomFile != null )
+            if ( interpolatedPomFile != null && StringUtils.isNotEmpty( 
filteredPomPrefix ) )
             {
                 interpolatedPomFile.delete();
             }
@@ -1447,7 +1459,8 @@
     }
 
     /**
-     * Interpolates the specified POM/settings file to a temporary file.
+     * Interpolates the specified POM/settings file to a temporary file. The 
destination file may be same as the input
+     * file, i.e. interpolation can be performed in-place.
      * 
      * @param originalFile The XML file to interpolate, must not be 
<code>null</code>.
      * @param interpolatedFile The target file to write the interpolated 
contents of the original file to, must not be
@@ -1457,50 +1470,42 @@
     void buildInterpolatedFile( File originalFile, File interpolatedFile )
         throws MojoExecutionException
     {
-        if ( interpolatedFile.exists() )
-        {
-            interpolatedFile.delete();
-        }
+        getLog().debug( "Interpolate " + originalFile.getPath() + " to " + 
interpolatedFile.getPath() );
+
         try
         {
-            if ( !interpolatedFile.createNewFile() )
+            String xml;
+
+            Reader reader = null;
+            try
             {
-                throw new MojoExecutionException( "failed to create file " + 
interpolatedFile.getPath() );
+                // interpolation with token @...@
+                Map composite = getInterpolationValueSource();
+                reader = ReaderFactory.newXmlReader( originalFile );
+                reader = new InterpolationFilterReader( reader, composite, 
"@", "@" );
+                xml = IOUtil.toString( reader );
+            }
+            finally
+            {
+                IOUtil.close( reader );
             }
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "failed to create file " + 
interpolatedFile.getPath(), e );
-        }
-        getLog().debug( "interpolate file to create interpolated in " + 
interpolatedFile.getPath() );
 
-        BufferedReader reader = null;
-        BufferedWriter writer = null;
-        try
-        {
-            // interpolation with token @...@
-            Map composite = getInterpolationValueSource();
-            reader =
-                new BufferedReader( new InterpolationFilterReader( 
ReaderFactory.newXmlReader( originalFile ),
-                                                                   composite, 
"@", "@" ) );
-            writer = new BufferedWriter( WriterFactory.newXmlWriter( 
interpolatedFile ) );
-            String line = null;
-            while ( ( line = reader.readLine() ) != null )
+            Writer writer = null;
+            try
+            {
+                interpolatedFile.getParentFile().mkdirs();
+                writer = WriterFactory.newXmlWriter( interpolatedFile );
+                writer.write( xml );
+                writer.flush();
+            }
+            finally
             {
-                writer.write( line );
-                writer.newLine();
+                IOUtil.close( writer );
             }
-            writer.flush();
         }
         catch ( IOException e )
         {
-            throw new MojoExecutionException( "failed to interpolate file " + 
originalFile.getPath(), e );
-        }
-        finally
-        {
-            // IOUtil in p-u is null check and silently NPE
-            IOUtil.close( reader );
-            IOUtil.close( writer );
+            throw new MojoExecutionException( "Failed to interpolate file " + 
originalFile.getPath(), e );
         }
     }
 


Reply via email to