Author: jdcasey Date: Fri Aug 21 17:08:45 2009 New Revision: 806646 URL: http://svn.apache.org/viewvc?rev=806646&view=rev Log: Fixing interpolation for escaping, and simplifying escaping of windows paths. Also, moving to some standard ValueSource implementations and normal ValueSource stacking within the interpolator, rather than using more complex delegation of ValueSource instances. Finally, correcting windows-path escaping to account for pre-escaped paths.
Removed: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenProjectValueSource.java maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/PropertiesEscapingBackSlashValueSource.java Modified: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java Modified: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java?rev=806646&r1=806645&r2=806646&view=diff ============================================================================== --- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java (original) +++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java Fri Aug 21 17:08:45 2009 @@ -33,8 +33,11 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; import org.sonatype.plexus.build.incremental.BuildContext; +import org.codehaus.plexus.interpolation.InterpolationPostProcessor; import org.codehaus.plexus.interpolation.InterpolatorFilterReader; import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor; +import org.codehaus.plexus.interpolation.PrefixedObjectValueSource; +import org.codehaus.plexus.interpolation.PropertiesBasedValueSource; import org.codehaus.plexus.interpolation.RecursionInterceptor; import org.codehaus.plexus.interpolation.SimpleRecursionInterceptor; import org.codehaus.plexus.interpolation.StringSearchInterpolator; @@ -195,6 +198,10 @@ final Properties filterProperties = new Properties(); loadProperties( filterProperties, request.getFileFilters(), baseProps ); + if ( filterProperties.size() < 1 ) + { + filterProperties.putAll( baseProps ); + } if ( request.getMavenProject() != null ) { @@ -229,8 +236,7 @@ getLogger().debug( "properties used " + filterProperties ); } - final ValueSource propertiesValueSource = - new PropertiesEscapingBackSlashValueSource( request.isEscapeWindowsPaths(), filterProperties ); + final ValueSource propertiesValueSource = new PropertiesBasedValueSource( filterProperties ); if ( request != null ) { @@ -280,14 +286,14 @@ private ValueSource propertiesValueSource; - private Collection projectStartExpressions; + private List projectStartExpressions; private String escapeString; private boolean escapeWindowsPaths; Wrapper( LinkedHashSet delimiters, MavenProject project, ValueSource propertiesValueSource, - Collection projectStartExpressions, String escapeString, boolean escapeWindowsPaths ) + List projectStartExpressions, String escapeString, boolean escapeWindowsPaths ) { super(); this.delimiters = delimiters; @@ -313,13 +319,27 @@ ri = new SimpleRecursionInterceptor(); } - MavenProjectValueSource valueSource = new MavenProjectValueSource( project, escapeWindowsPaths ); + interpolator.addValueSource( propertiesValueSource ); + interpolator.addValueSource( new PrefixedObjectValueSource( projectStartExpressions, project, true ) ); - valueSource.setPropertiesValueSource( propertiesValueSource ); - - interpolator.addValueSource( valueSource ); interpolator.setEscapeString( escapeString ); + if ( escapeWindowsPaths ) + { + interpolator.addPostProcessor( new InterpolationPostProcessor() + { + public Object execute( String expression, Object value ) + { + if ( value instanceof String ) + { + return FilteringUtils.escapeWindowsPath( (String) value ); + } + + return value; + } + } ); + } + MultiDelimiterInterpolatorFilterReader filterReader = new MultiDelimiterInterpolatorFilterReader( reader, interpolator ); filterReader.setRecursionInterceptor( ri ); filterReader.setDelimiterSpecs( delimiters ); Modified: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java?rev=806646&r1=806645&r2=806646&view=diff ============================================================================== --- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java (original) +++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java Fri Aug 21 17:08:45 2009 @@ -92,6 +92,8 @@ nonFilteredFileExtensions, mavenSession ); mavenResourcesExecution.setUseDefaultFilterWrappers( true ); +// mavenResourcesExecution.setEscapeWindowsPaths( false ); + filterResources( mavenResourcesExecution ); } Modified: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java?rev=806646&r1=806645&r2=806646&view=diff ============================================================================== --- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java (original) +++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java Fri Aug 21 17:08:45 2009 @@ -25,7 +25,7 @@ * @author <a href="mailto:ol...@apache.org">olamy</a> * @version $Id$ */ -public class FilteringUtils +public final class FilteringUtils { /** @@ -40,8 +40,23 @@ { if ( !StringUtils.isEmpty( val ) && val.indexOf( ":\\" ) == 1 ) { - val = StringUtils.replace( val, "\\", "\\\\" ); - //val = StringUtils.replace( val, ":", "\\:" ); + // Adapted from StringUtils.replace in plexus-utils to accommodate pre-escaped backslashes. + StringBuffer buf = new StringBuffer( val.length() ); + int start = 0, end = 0; + while ( ( end = val.indexOf( '\\', start ) ) != -1 ) + { + buf.append( val.substring( start, end ) ).append( "\\\\" ); + start = end + 1; + + if ( val.indexOf( '\\', end + 1 ) == end + 1 ) + { + start++; + } + } + + buf.append( val.substring( start ) ); + + return buf.toString(); } return val; } Modified: maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java?rev=806646&r1=806645&r2=806646&view=diff ============================================================================== --- maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java (original) +++ maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java Fri Aug 21 17:08:45 2009 @@ -29,6 +29,8 @@ import org.apache.maven.model.Resource; import org.codehaus.plexus.PlexusTestCase; +import org.codehaus.plexus.interpolation.PrefixedObjectValueSource; +import org.codehaus.plexus.interpolation.ValueSource; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.IOUtil; @@ -227,7 +229,7 @@ String userHome = result.getProperty( "userHome" ); - assertTrue( new File( userHome ).exists() ); + assertTrue( "'" + userHome + "' does not exist.", new File( userHome ).exists() ); assertEquals( new File( System.getProperty( "user.home" ) ), new File( userHome ) ); if ( escapeTest ) @@ -279,8 +281,10 @@ new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", null, nonFilteredFileExtensions, new StubMavenSession() ); - mavenResourcesExecution.addFilerWrapperWithEscaping( new MavenProjectValueSource( mavenProject, true ), "@", - "@", null ); + ValueSource vs = new PrefixedObjectValueSource( mavenResourcesExecution.getProjectStartExpressions(), mavenProject, true ); + + mavenResourcesExecution.addFilerWrapperWithEscaping( vs, "@", "@", null ); + mavenResourcesFiltering.filterResources( mavenResourcesExecution ); Properties result = PropertyUtils.loadPropertyFile( new File( outputDirectory, "maven-resources-filtering.txt" ), null );