You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2011/02/23 23:05:06 UTC
svn commit: r1073964 - in /maven/plugins/trunk/maven-assembly-plugin/src:
main/java/org/apache/maven/plugin/assembly/archive/task/
main/java/org/apache/maven/plugin/assembly/utils/
test/java/org/apache/maven/plugin/assembly/utils/
Author: jdcasey
Date: Wed Feb 23 22:05:06 2011
New Revision: 1073964
URL: http://svn.apache.org/viewvc?rev=1073964&view=rev
Log:
[MASSEMBLY-510] Fix logic to eliminate relative dir refs like . and ..
Modified:
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDirectoryTask.java
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtils.java
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtilsTest.java
Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDirectoryTask.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDirectoryTask.java?rev=1073964&r1=1073963&r2=1073964&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDirectoryTask.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDirectoryTask.java Wed Feb 23 22:05:06 2011
@@ -21,6 +21,7 @@ package org.apache.maven.plugin.assembly
import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
+import org.apache.maven.plugin.assembly.utils.AssemblyFormatUtils;
import org.codehaus.plexus.archiver.Archiver;
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.archiver.util.DefaultFileSet;
@@ -111,11 +112,13 @@ public class AddDirectoryTask
int i = 0;
for ( final Iterator<String> it = includes.iterator(); it.hasNext(); )
{
- String value = it.next();
- if ( value.startsWith( "./" ) || value.startsWith( ".\\" ) )
- {
- value = value.substring( 2 );
- }
+// String value = it.next();
+ String value = AssemblyFormatUtils.fixRelativeRefs( it.next() );
+
+// if ( value.startsWith( "./" ) || value.startsWith( ".\\" ) )
+// {
+// value = value.substring( 2 );
+// }
if ( value.startsWith( "/" ) || value.startsWith( "\\" ) )
{
@@ -134,11 +137,13 @@ public class AddDirectoryTask
int i = 0;
for ( final Iterator<String> it = directoryExcludes.iterator(); it.hasNext(); )
{
- String value = it.next();
- if ( value.startsWith( "./" ) || value.startsWith( ".\\" ) )
- {
- value = value.substring( 2 );
- }
+// String value = it.next();
+ String value = AssemblyFormatUtils.fixRelativeRefs( it.next() );
+
+// if ( value.startsWith( "./" ) || value.startsWith( ".\\" ) )
+// {
+// value = value.substring( 2 );
+// }
if ( value.startsWith( "/" ) || value.startsWith( "\\" ) )
{
Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtils.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtils.java?rev=1073964&r1=1073963&r2=1073964&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtils.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtils.java Wed Feb 23 22:05:06 2011
@@ -33,7 +33,11 @@ import org.codehaus.plexus.interpolation
import org.codehaus.plexus.util.StringUtils;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
+import java.util.List;
+import java.util.ListIterator;
import java.util.Properties;
/**
@@ -260,8 +264,7 @@ public final class AssemblyFormatUtils
value = StringUtils.replace( value, "//", "/" );
value = StringUtils.replace( value, "\\\\", "\\" );
- value = StringUtils.replace( value, "./", "" );
- value = StringUtils.replace( value, ".\\", "" );
+ value = fixRelativeRefs( value );
return value;
}
@@ -478,10 +481,59 @@ public final class AssemblyFormatUtils
value = StringUtils.replace( value, "//", "/" );
value = StringUtils.replace( value, "\\\\", "\\" );
- value = StringUtils.replace( value, "./", "" );
- value = StringUtils.replace( value, ".\\", "" );
+ value = fixRelativeRefs( value );
return value;
}
+ public static String fixRelativeRefs( String src )
+ {
+ String value = src;
+
+ String[] separators = {
+ "/", "\\"
+ };
+
+ String finalSep = null;
+ for ( String sep : separators )
+ {
+ if ( value.endsWith( sep ) )
+ {
+ finalSep = sep;
+ }
+
+ if ( value.indexOf( "." + sep ) > -1 )
+ {
+ List<String> parts = new ArrayList<String>();
+ parts.addAll( Arrays.asList( value.split( sep ) ) );
+
+ for ( ListIterator<String> it = parts.listIterator(); it.hasNext(); )
+ {
+ String part = it.next();
+ if ( ".".equals( part ) )
+ {
+ it.remove();
+ }
+ else if ( "..".equals( part ) )
+ {
+ it.remove();
+ if ( it.hasPrevious() )
+ {
+ it.previous();
+ it.remove();
+ }
+ }
+ }
+
+ value = StringUtils.join( parts.iterator(), sep );
+ }
+ }
+
+ if ( finalSep != null && value.length() > 0 && !value.endsWith( finalSep ) )
+ {
+ value += finalSep;
+ }
+
+ return value;
+ }
}
Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtilsTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtilsTest.java?rev=1073964&r1=1073963&r2=1073964&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtilsTest.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtilsTest.java Wed Feb 23 22:05:06 2011
@@ -41,6 +41,30 @@ public class AssemblyFormatUtilsTest
private final MockManager mockManager = new MockManager();
+ public void testFixRelativePathRefs_ShouldRemoveRelativeRefToCurrentDir()
+ throws AssemblyFormattingException
+ {
+ assertEquals( "path/", AssemblyFormatUtils.fixRelativeRefs( "./path/" ) );
+ }
+
+ public void testFixRelativePathRefs_ShouldRemoveEmbeddedSameDirRef()
+ throws AssemblyFormattingException
+ {
+ assertEquals( "some/path/", AssemblyFormatUtils.fixRelativeRefs( "some/./path/" ) );
+ }
+
+ public void testFixRelativePathRefs_ShouldRemoveEmbeddedParentDirRef()
+ throws AssemblyFormattingException
+ {
+ assertEquals( "path/", AssemblyFormatUtils.fixRelativeRefs( "some/../path/" ) );
+ }
+
+ public void testFixRelativePathRefs_ShouldTruncateRelativeRefToParentDir()
+ throws AssemblyFormattingException
+ {
+ assertEquals( "path/", AssemblyFormatUtils.fixRelativeRefs( "../path/" ) );
+ }
+
public void testGetDistroName_ShouldUseJustFinalNameWithNoAppendAssemblyIdOrClassifier()
{
verifyDistroName( "assembly", null, "finalName", false, "finalName" );
@@ -212,6 +236,30 @@ public class AssemblyFormatUtilsTest
{
verifyOutputDir( null, null, null, "" );
}
+
+ public void testGetOutputDir_ShouldRemoveRelativeRefToCurrentDir()
+ throws AssemblyFormattingException
+ {
+ verifyOutputDir( "./path/", null, null, "path/" );
+ }
+
+ public void testGetOutputDir_ShouldRemoveEmbeddedSameDirRef()
+ throws AssemblyFormattingException
+ {
+ verifyOutputDir( "some/./path/", null, null, "some/path/" );
+ }
+
+ public void testGetOutputDir_ShouldRemoveEmbeddedParentDirRef()
+ throws AssemblyFormattingException
+ {
+ verifyOutputDir( "some/../path/", null, null, "path/" );
+ }
+
+ public void testGetOutputDir_ShouldTruncateRelativeRefToParentDir()
+ throws AssemblyFormattingException
+ {
+ verifyOutputDir( "../path/", null, null, "path/" );
+ }
public void testGetOutputDir_ShouldResolveProjectProperty()
throws AssemblyFormattingException
@@ -357,6 +405,34 @@ public class AssemblyFormatUtilsTest
null );
}
+ public void testEvalFileNameMapping_ShouldRemoveRelativeRefToCurrentDir()
+ throws AssemblyFormattingException
+ {
+ verifyEvalFileNameMappingUsingMainProject( "./path/", null, null, null, null, null, "path/",
+ null );
+ }
+
+ public void testEvalFileNameMapping_ShouldRemoveEmbeddedSameDirRef()
+ throws AssemblyFormattingException
+ {
+ verifyEvalFileNameMappingUsingMainProject( "some/./path/", null, null, null, null, null, "some/path/",
+ null );
+ }
+
+ public void testEvalFileNameMapping_ShouldRemoveEmbeddedParentDirRef()
+ throws AssemblyFormattingException
+ {
+ verifyEvalFileNameMappingUsingMainProject( "some/../path/", null, null, null, null, null, "path/",
+ null );
+ }
+
+ public void testEvalFileNameMapping_ShouldTruncateRelativeRefToParentDir()
+ throws AssemblyFormattingException
+ {
+ verifyEvalFileNameMappingUsingMainProject( "../path/", null, null, null, null, null, "path/",
+ null );
+ }
+
public void testEvalFileNameMapping_ShouldPassExpressionThroughUnchanged()
throws AssemblyFormattingException
{