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 ); } }