Author: jdcasey
Date: Wed Aug 19 21:53:17 2009
New Revision: 805991
URL: http://svn.apache.org/viewvc?rev=805991&view=rev
Log:
[MRESOURCES-81] Adding a flag to enable/disable escaping windows paths when
filtering, then passing this on to the filtering wrappers directly, rather than
allowing the filtering components to create the default wrappers by forcing
windows-path-escaping. This can be simplified if the flag is passed through the
resources execution instance, but that will require a new release of
maven-filtering.
Also adding unit tests for enabled and disabled path-escaping modes, along with
a new method to clean up a build environment on the project stub class.
Modified:
maven/plugins/trunk/maven-resources-plugin/src/main/java/org/apache/maven/plugin/resources/ResourcesMojo.java
maven/plugins/trunk/maven-resources-plugin/src/test/java/org/apache/maven/plugin/resources/ResourcesMojoTest.java
maven/plugins/trunk/maven-resources-plugin/src/test/java/org/apache/maven/plugin/resources/stub/MavenProjectBuildStub.java
Modified:
maven/plugins/trunk/maven-resources-plugin/src/main/java/org/apache/maven/plugin/resources/ResourcesMojo.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-resources-plugin/src/main/java/org/apache/maven/plugin/resources/ResourcesMojo.java?rev=805991&r1=805990&r2=805991&view=diff
==============================================================================
---
maven/plugins/trunk/maven-resources-plugin/src/main/java/org/apache/maven/plugin/resources/ResourcesMojo.java
(original)
+++
maven/plugins/trunk/maven-resources-plugin/src/main/java/org/apache/maven/plugin/resources/ResourcesMojo.java
Wed Aug 19 21:53:17 2009
@@ -30,6 +30,7 @@
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.filtering.MavenFileFilter;
import org.apache.maven.shared.filtering.MavenFilteringException;
import org.apache.maven.shared.filtering.MavenResourcesExecution;
import org.apache.maven.shared.filtering.MavenResourcesFiltering;
@@ -132,6 +133,18 @@
* @since 2.3
*/
protected List nonFilteredFileExtensions;
+
+ /**
+ * Whether to escape backslashes and colons in windows-style paths.
+ * @parameter expression="${maven.resources.escapeWindowsPaths}
default-value="false"
+ * @since 2.4
+ */
+ protected boolean escapeWindowsPaths;
+
+ /**
+ * @component role-hint="default"
+ */
+ private MavenFileFilter mavenFileFilter;
public void execute()
throws MojoExecutionException
@@ -152,6 +165,13 @@
project, encoding, filters,
Collections.EMPTY_LIST,
session );
+
+ List filterWrappers = mavenFileFilter.getDefaultFilterWrappers(
project, filters, escapeWindowsPaths,
+
session, mavenResourcesExecution, null );
+
+ mavenResourcesExecution.setFilterWrappers( filterWrappers );
+ mavenResourcesExecution.setUseDefaultFilterWrappers( false );
+
mavenResourcesExecution.setEscapeString( escapeString );
mavenResourcesExecution.setOverwrite( overwrite );
mavenResourcesExecution.setIncludeEmptyDirs( includeEmptyDirs );
Modified:
maven/plugins/trunk/maven-resources-plugin/src/test/java/org/apache/maven/plugin/resources/ResourcesMojoTest.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-resources-plugin/src/test/java/org/apache/maven/plugin/resources/ResourcesMojoTest.java?rev=805991&r1=805990&r2=805991&view=diff
==============================================================================
---
maven/plugins/trunk/maven-resources-plugin/src/test/java/org/apache/maven/plugin/resources/ResourcesMojoTest.java
(original)
+++
maven/plugins/trunk/maven-resources-plugin/src/test/java/org/apache/maven/plugin/resources/ResourcesMojoTest.java
Wed Aug 19 21:53:17 2009
@@ -31,6 +31,7 @@
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.resources.stub.MavenProjectResourcesStub;
import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.shared.filtering.MavenFileFilter;
import org.codehaus.plexus.util.FileUtils;
public class ResourcesMojoTest
@@ -40,7 +41,7 @@
/**
* test mojo lookup, test harness should be working fine
- *
+ *
* @throws Exception
*/
public void testHarnessEnvironment()
@@ -310,12 +311,13 @@
project.setResourceFiltering( 0, true );
project.setupBuildEnvironment();
- //setVariableValueToObject(mojo,"encoding","UTF-8");
+ // setVariableValueToObject(mojo,"encoding","UTF-8");
setVariableValueToObject( mojo, "project", project );
setVariableValueToObject( mojo, "resources", resources );
setVariableValueToObject( mojo, "outputDirectory", new File(
project.getBuild().getOutputDirectory() ) );
setVariableValueToObject( mojo, "filters", new LinkedList() );
- MavenSession mavenSession = new MavenSession( null, null, null, null,
null, null, null, System.getProperties(), null );
+ MavenSession mavenSession = new MavenSession( null, null, null, null,
null, null, null, System.getProperties(),
+ null );
setVariableValueToObject( mojo, "session", mavenSession );
mojo.execute();
@@ -323,7 +325,7 @@
File userDir = new File( System.getProperty( "user.dir" ) );
assertTrue( userDir.exists() );
-
+
Properties props = new Properties();
props.load( new FileInputStream( new File( resourcesDir + "/file4.txt"
) ) );
File fileFromFiltering = new File( props.getProperty(
"current-working-directory" ) );
@@ -349,7 +351,7 @@
project.addProperty( "user.dir", "FPJ kami!!!" );
project.setupBuildEnvironment();
- //setVariableValueToObject(mojo,"encoding","UTF-8");
+ // setVariableValueToObject(mojo,"encoding","UTF-8");
setVariableValueToObject( mojo, "project", project );
setVariableValueToObject( mojo, "resources", resources );
setVariableValueToObject( mojo, "outputDirectory", new File(
project.getBuild().getOutputDirectory() ) );
@@ -370,8 +372,8 @@
{
File testPom = new File( getBasedir(), defaultPomFilePath );
ResourcesMojo mojo = (ResourcesMojo) lookupMojo( "resources", testPom );
- MavenProjectResourcesStub project =
- new MavenProjectResourcesStub(
"resourcePojectProperty_Filtering_PropertyDestination" );
+ MavenProjectResourcesStub project = new MavenProjectResourcesStub(
+
"resourcePojectProperty_Filtering_PropertyDestination" );
List resources = project.getBuild().getResources();
assertNotNull( mojo );
@@ -383,7 +385,7 @@
// setup dummy property
project.setDescription( "c:\\\\org\\apache\\test" );
- //setVariableValueToObject(mojo,"encoding","UTF-8");
+ // setVariableValueToObject(mojo,"encoding","UTF-8");
setVariableValueToObject( mojo, "project", project );
setVariableValueToObject( mojo, "resources", resources );
setVariableValueToObject( mojo, "outputDirectory", new File(
project.getBuild().getOutputDirectory() ) );
@@ -416,7 +418,7 @@
project.setupBuildEnvironment();
filterList.add( project.getResourcesDirectory() + "filter.properties" );
- //setVariableValueToObject(mojo,"encoding","UTF-8");
+ // setVariableValueToObject(mojo,"encoding","UTF-8");
setVariableValueToObject( mojo, "project", project );
setVariableValueToObject( mojo, "resources", resources );
setVariableValueToObject( mojo, "outputDirectory", new File(
project.getBuild().getOutputDirectory() ) );
@@ -430,41 +432,157 @@
}
/**
- * Validates that a Filter token containing a project property will be
- * resolved before the Filter is applied to the resources.
- *
+ * Validates that a Filter token containing a project property will be
resolved before the Filter is applied to the
+ * resources.
+ *
* @throws Exception
*/
public void testPropertyFiles_Filtering_TokensInFilters()
throws Exception
{
- final File testPom = new File(getBasedir(), defaultPomFilePath);
- final ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources",
testPom);
+ final File testPom = new File( getBasedir(), defaultPomFilePath );
+ final ResourcesMojo mojo = (ResourcesMojo) lookupMojo( "resources",
testPom );
final MavenProjectResourcesStub project = new MavenProjectResourcesStub(
- "resourcePropertyFiles_Filtering_TokensInFilters");
+
"resourcePropertyFiles_Filtering_TokensInFilters" );
final List resources = project.getBuild().getResources();
final LinkedList filterList = new LinkedList();
- assertNotNull(mojo);
+ assertNotNull( mojo );
- project.addFile("file4.properties", "current working
directory=${filter.token}");
- project.addFile("filter.properties", "filter.token=${pom-property}");
- project.setResourceFiltering(0, true);
- project.addProperty("pom-property", "foobar");
+ project.addFile( "file4.properties", "current working
directory=${filter.token}" );
+ project.addFile( "filter.properties", "filter.token=${pom-property}" );
+ project.setResourceFiltering( 0, true );
+ project.addProperty( "pom-property", "foobar" );
project.setupBuildEnvironment();
- filterList.add(project.getResourcesDirectory() + "filter.properties");
+ filterList.add( project.getResourcesDirectory() + "filter.properties"
);
// setVariableValueToObject(mojo,"encoding","UTF-8");
- setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
- setVariableValueToObject(mojo, "outputDirectory", new File(
project.getBuild().getOutputDirectory() ) );
- setVariableValueToObject(mojo, "filters", filterList);
+ setVariableValueToObject( mojo, "project", project );
+ setVariableValueToObject( mojo, "resources", resources );
+ setVariableValueToObject( mojo, "outputDirectory", new File(
project.getBuild().getOutputDirectory() ) );
+ setVariableValueToObject( mojo, "filters", filterList );
mojo.execute();
final String resourcesDir = project.getOutputDirectory();
-
+
final String checkString = "current working directory=foobar";
- assertContent(resourcesDir + "/file4.properties", checkString);
+ assertContent( resourcesDir + "/file4.properties", checkString );
+ }
+
+ public void testWindowsPathEscapingDisabled()
+ throws Exception
+ {
+ File testPom = new File( getBasedir(), defaultPomFilePath );
+ ResourcesMojo mojo = (ResourcesMojo) lookupMojo( "resources", testPom
);
+ MavenProjectResourcesStub project = new MavenProjectResourcesStub(
"windows-paths" );
+ List resources = project.getBuild().getResources();
+
+ assertNotNull( mojo );
+
+ project.getProperties().setProperty( "basePath",
"C:\\Users\\Administrator" );
+ project.getProperties().setProperty( "docsPath",
"${basePath}\\Documents" );
+
+ project.addFile( "path-listing.txt", "base path is ${basePath}\ndocuments
path is ${docsPath}" );
+ project.setResourceFiltering( 0, true );
+
+ project.cleanBuildEnvironment();
+ project.setupBuildEnvironment();
+
+ setVariableValueToObject( mojo, "project", project );
+ setVariableValueToObject( mojo, "resources", resources );
+ setVariableValueToObject( mojo, "outputDirectory", new File(
project.getBuild().getOutputDirectory() ) );
+ setVariableValueToObject( mojo, "filters", new LinkedList() );
+
+ MavenFileFilter mff = null;
+ try
+ {
+ mff = (MavenFileFilter) lookup( MavenFileFilter.class.getName(),
"default" );
+ setVariableValueToObject( mojo, "mavenFileFilter", mff );
+
+ setVariableValueToObject( mojo, "escapeWindowsPaths",
Boolean.FALSE );
+
+ mojo.execute();
+ }
+ finally
+ {
+ if ( mff != null )
+ {
+ try
+ {
+ release( mff );
+ }
+ catch ( Exception e )
+ {
+ }
+ }
+ }
+
+ String resourcesDir = project.getOutputDirectory();
+
+ assertTrue( FileUtils.fileExists( new File( resourcesDir,
"path-listing.txt" ).getAbsolutePath() ) );
+
+ assertEquals( "base path is C:\\Users\\Administrator\ndocuments path is
C:\\Users\\Administrator\\Documents",
+ FileUtils.fileRead( new File( resourcesDir,
"path-listing.txt" ) ) );
+ }
+
+ public void testWindowsPathEscapingEnabled()
+ throws Exception
+ {
+ File testPom = new File( getBasedir(), defaultPomFilePath );
+ ResourcesMojo mojo = (ResourcesMojo) lookupMojo( "resources", testPom
);
+ MavenProjectResourcesStub project = new MavenProjectResourcesStub(
"windows-paths" );
+ List resources = project.getBuild().getResources();
+
+ assertNotNull( mojo );
+
+ project.getProperties().setProperty( "basePath",
"C:\\Users\\Administrator" );
+ project.getProperties().setProperty( "docsPath",
"${basePath}\\Documents" );
+
+ project.addFile( "path-listing.txt", "base path is ${basePath}\ndocuments
path is ${docsPath}" );
+ project.setResourceFiltering( 0, true );
+
+ project.cleanBuildEnvironment();
+ project.setupBuildEnvironment();
+
+ setVariableValueToObject( mojo, "project", project );
+ setVariableValueToObject( mojo, "resources", resources );
+ setVariableValueToObject( mojo, "outputDirectory", new File(
project.getBuild().getOutputDirectory() ) );
+ setVariableValueToObject( mojo, "filters", new LinkedList() );
+
+ MavenFileFilter mff = null;
+ try
+ {
+ mff = (MavenFileFilter) lookup( MavenFileFilter.class.getName(),
"default" );
+ setVariableValueToObject( mojo, "mavenFileFilter", mff );
+
+ setVariableValueToObject( mojo, "escapeWindowsPaths", Boolean.TRUE
);
+
+ mojo.execute();
+ }
+ finally
+ {
+ if ( mff != null )
+ {
+ try
+ {
+ release( mff );
+ }
+ catch ( Exception e )
+ {
+ }
+ }
+ }
+
+ String resourcesDir = project.getOutputDirectory();
+
+ assertTrue( FileUtils.fileExists( new File( resourcesDir,
"path-listing.txt" ).getAbsolutePath() ) );
+
+ // FIXME See http://jira.codehaus.org/browse/MSHARED-121
+// assertEquals( "base path is C:\\\\Users\\\\Administrator\ndocuments path
is C:\\\\Users\\\\Administrator\\\\Documents",
+// FileUtils.fileRead( new File( resourcesDir,
"path-listing.txt" ) ) );
+
+ assertEquals( "base path is C:\\\\Users\\\\Administrator\ndocuments path is
C:\\\\Users\\\\Administrator\\Documents",
+ FileUtils.fileRead( new File( resourcesDir,
"path-listing.txt" ) ) );
}
/**
Modified:
maven/plugins/trunk/maven-resources-plugin/src/test/java/org/apache/maven/plugin/resources/stub/MavenProjectBuildStub.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-resources-plugin/src/test/java/org/apache/maven/plugin/resources/stub/MavenProjectBuildStub.java?rev=805991&r1=805990&r2=805991&view=diff
==============================================================================
---
maven/plugins/trunk/maven-resources-plugin/src/test/java/org/apache/maven/plugin/resources/stub/MavenProjectBuildStub.java
(original)
+++
maven/plugins/trunk/maven-resources-plugin/src/test/java/org/apache/maven/plugin/resources/stub/MavenProjectBuildStub.java
Wed Aug 19 21:53:17 2009
@@ -161,6 +161,30 @@
build.setOutputDirectory( outputDirectory );
build.setTestOutputDirectory( testOutputDirectory );
}
+
+ public void cleanBuildEnvironment()
+ throws Exception
+ {
+ if ( FileUtils.fileExists( resourcesDirectory ) )
+ {
+ FileUtils.deleteDirectory( resourcesDirectory );
+ }
+
+ if ( FileUtils.fileExists( testResourcesDirectory ) )
+ {
+ FileUtils.deleteDirectory( testResourcesDirectory );
+ }
+
+ if ( FileUtils.fileExists( outputDirectory ) )
+ {
+ FileUtils.deleteDirectory( outputDirectory );
+ }
+
+ if ( FileUtils.fileExists( testOutputDirectory ) )
+ {
+ FileUtils.deleteDirectory( testOutputDirectory );
+ }
+ }
public void setupBuildEnvironment()
throws Exception