You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2020/04/26 12:33:59 UTC

[maven-assembly-plugin] 01/01: [MASSEMBLYE-849] Add nonFilteredFileExtensions to avoid filtering of binary files

This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch MASSEMBLY-849
in repository https://gitbox.apache.org/repos/asf/maven-assembly-plugin.git

commit 52a84fed26858323f61ed41bd71e3befd7910ad3
Author: rfscholte <rf...@apache.org>
AuthorDate: Sun Apr 26 14:33:42 2020 +0200

    [MASSEMBLYE-849] Add nonFilteredFileExtensions to avoid filtering of binary files
---
 .../archive/phase/FileItemAssemblyPhase.java       |  1 +
 .../archive/task/AddDependencySetsTask.java        | 13 +++--
 .../assembly/archive/task/AddFileSetsTask.java     | 16 ++++---
 .../plugins/assembly/format/ReaderFormatter.java   | 14 +++++-
 src/main/mdo/assembly-component.mdo                | 22 +++++++++
 src/main/mdo/assembly.mdo                          | 22 +++++++++
 .../assembly/format/ReaderFormatterTest.java       | 55 +++++++++++++++-------
 7 files changed, 114 insertions(+), 29 deletions(-)

diff --git a/src/main/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhase.java b/src/main/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhase.java
index f866ffb..68d23aa 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhase.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhase.java
@@ -142,6 +142,7 @@ public class FileItemAssemblyPhase
             {
                 final InputStreamTransformer fileSetTransformers =
                     ReaderFormatter.getFileSetTransformers( configSource, fileItem.isFiltered(),
+                                                            Collections.<String>emptySet(),
                                                             fileItem.getLineEnding() );
                 
                 final PlexusIoResource restoUse;
diff --git a/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTask.java b/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTask.java
index 7346e90..ba11f00 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTask.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTask.java
@@ -23,6 +23,7 @@ import java.io.File;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
@@ -142,11 +143,13 @@ public class AddDependencySetsTask
 
         logger.debug( "Adding " + dependencyArtifacts.size() + " dependency artifacts." );
 
-        InputStreamTransformer fileSetTransformers =
-            isUnpackWithOptions( dependencySet )
-                ? ReaderFormatter.getFileSetTransformers( configSource, dependencySet.getUnpackOptions().isFiltered(),
-                                                          dependencySet.getUnpackOptions().getLineEnding() )
-                : null;
+        UnpackOptions unpackOptions = dependencySet.getUnpackOptions();
+        InputStreamTransformer fileSetTransformers = isUnpackWithOptions( dependencySet )
+                        ? ReaderFormatter.getFileSetTransformers( configSource,
+                                                          unpackOptions.isFiltered(),
+                                                          new HashSet<>( unpackOptions.getNonFilteredFileExtensions() ),
+                                                          unpackOptions.getLineEnding() )
+                        : null;
 
         for ( final Artifact depArtifact : dependencyArtifacts )
         {
diff --git a/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddFileSetsTask.java b/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddFileSetsTask.java
index 5e44521..1f6a1d2 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddFileSetsTask.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddFileSetsTask.java
@@ -19,6 +19,12 @@ package org.apache.maven.plugins.assembly.archive.task;
  * under the License.
  */
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+
 import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
 import org.apache.maven.plugins.assembly.archive.ArchiveCreationException;
 import org.apache.maven.plugins.assembly.format.AssemblyFormattingException;
@@ -33,11 +39,6 @@ import org.codehaus.plexus.components.io.functions.InputStreamTransformer;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.logging.console.ConsoleLogger;
 
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
 /**
  *
  */
@@ -137,7 +138,10 @@ public class AddFileSetsTask
         if ( fileSetDir.exists() )
         {
             InputStreamTransformer fileSetTransformers =
-                ReaderFormatter.getFileSetTransformers( configSource, fileSet.isFiltered(), fileSet.getLineEnding() );
+                ReaderFormatter.getFileSetTransformers( configSource, 
+                                                        fileSet.isFiltered(),
+                                                        new HashSet<>( fileSet.getNonFilteredFileExtensions() ),
+                                                        fileSet.getLineEnding() );
             if ( fileSetTransformers == null )
             {
                 logger.debug( "NOT reformatting any files in " + fileSetDir );
diff --git a/src/main/java/org/apache/maven/plugins/assembly/format/ReaderFormatter.java b/src/main/java/org/apache/maven/plugins/assembly/format/ReaderFormatter.java
index 6b50534..4b26f35 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/format/ReaderFormatter.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/format/ReaderFormatter.java
@@ -37,6 +37,7 @@ import java.io.InputStreamReader;
 import java.io.Reader;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Set;
 
 /**
  *
@@ -114,7 +115,9 @@ public class ReaderFormatter
 
     @Nullable
     public static InputStreamTransformer getFileSetTransformers( final AssemblerConfigurationSource configSource,
-                                                                 final boolean isFiltered, String fileSetLineEnding )
+                                                                 final boolean isFiltered,
+                                                                 final Set<String> nonFilteredFileExtensions,
+                                                                 String fileSetLineEnding )
         throws AssemblyFormattingException
     {
         final LineEndings lineEndingToUse = LineEndingsUtils.getLineEnding( fileSetLineEnding );
@@ -131,6 +134,15 @@ public class ReaderFormatter
                                               @Nonnull InputStream inputStream )
                     throws IOException
                 {
+                    final String fileName = plexusIoResource.getName();
+                    for ( String extension : nonFilteredFileExtensions )
+                    {
+                        if ( fileName.endsWith( '.' + extension ) )
+                        {
+                            return inputStream;
+                        }
+                    }
+                    
                     InputStream result = inputStream;
                     if ( isFiltered )
                     {
diff --git a/src/main/mdo/assembly-component.mdo b/src/main/mdo/assembly-component.mdo
index 32b5f97..792bcc9 100644
--- a/src/main/mdo/assembly-component.mdo
+++ b/src/main/mdo/assembly-component.mdo
@@ -283,6 +283,17 @@
           <defaultValue>false</defaultValue>
           <type>boolean</type>
         </field>
+        <field>
+          <name>nonFilteredFileExtensions</name>
+          <version>2.1.0+</version>
+          <description>
+             Additional file extensions to not apply filtering (Since 3.2.0)
+          </description>
+           <association>
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
       </fields>
     </class>
     <class>
@@ -1240,6 +1251,17 @@
           <type>boolean</type>
         </field>
         <field>
+          <name>nonFilteredFileExtensions</name>
+          <version>2.1.0+</version>
+          <description>
+             Additional file extensions to not apply filtering (Since 3.2.0)
+          </description>
+           <association>
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
           <name>lineEnding</name>
           <version>1.1.2+</version>
           <type>String</type>
diff --git a/src/main/mdo/assembly.mdo b/src/main/mdo/assembly.mdo
index 2b6517f..84d39aa 100644
--- a/src/main/mdo/assembly.mdo
+++ b/src/main/mdo/assembly.mdo
@@ -403,6 +403,17 @@
           <defaultValue>false</defaultValue>
           <type>boolean</type>
         </field>
+        <field>
+          <name>nonFilteredFileExtensions</name>
+          <version>2.1.0+</version>
+          <description>
+             Additional file extensions to not apply filtering (Since 3.2.0)
+          </description>
+           <association>
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
       </fields>
     </class>
     <class>
@@ -1352,6 +1363,17 @@
           <type>boolean</type>
         </field>
         <field>
+          <name>nonFilteredFileExtensions</name>
+          <version>2.1.0+</version>
+          <description>
+             Additional file extensions to not apply filtering (Since 3.2.0)
+          </description>
+           <association>
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
           <name>lineEnding</name>
           <version>1.1.2+</version>
           <type>String</type>
diff --git a/src/test/java/org/apache/maven/plugins/assembly/format/ReaderFormatterTest.java b/src/test/java/org/apache/maven/plugins/assembly/format/ReaderFormatterTest.java
index 762f65e..51d0b93 100644
--- a/src/test/java/org/apache/maven/plugins/assembly/format/ReaderFormatterTest.java
+++ b/src/test/java/org/apache/maven/plugins/assembly/format/ReaderFormatterTest.java
@@ -19,6 +19,22 @@ package org.apache.maven.plugins.assembly.format;
  * under the License.
  */
 
+import static org.hamcrest.Matchers.not;
+import static org.hamcrest.Matchers.sameInstance;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
 import org.apache.commons.io.IOUtils;
 import org.apache.maven.model.Model;
 import org.apache.maven.plugins.assembly.testutils.PojoConfigSource;
@@ -26,16 +42,10 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.filtering.DefaultMavenReaderFilter;
 import org.codehaus.plexus.archiver.resources.PlexusIoVirtualFileResource;
 import org.codehaus.plexus.components.io.functions.InputStreamTransformer;
+import org.codehaus.plexus.components.io.resources.PlexusIoResource;
 import org.codehaus.plexus.logging.console.ConsoleLogger;
 import org.junit.Test;
 
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-
-import static org.junit.Assert.assertEquals;
-
 
 public class ReaderFormatterTest
 {
@@ -44,7 +54,7 @@ public class ReaderFormatterTest
         throws IOException, AssemblyFormattingException
     {
         final PojoConfigSource cfg = getPojoConfigSource();
-        InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, "dos" );
+        InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, Collections.<String>emptySet(), "dos" );
         InputStream fud = fileSetTransformers.transform( dummyResource(), payload( "This is a\ntest." ) );
         assertEquals( "This is a\r\ntest.", readResultStream( fud ) );
     }
@@ -54,7 +64,7 @@ public class ReaderFormatterTest
         throws IOException, AssemblyFormattingException
     {
         final PojoConfigSource cfg = getPojoConfigSource();
-        InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, false, "dos" );
+        InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, false, Collections.<String>emptySet(), "dos" );
         InputStream fud = fileSetTransformers.transform( dummyResource(), payload( "This is a\ntest." ) );
         assertEquals( "This is a\r\ntest.", readResultStream( fud ) );
     }
@@ -64,12 +74,30 @@ public class ReaderFormatterTest
         throws IOException, AssemblyFormattingException
     {
         final PojoConfigSource cfg = getPojoConfigSource();
-        InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, "unix" );
+        InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, Collections.<String>emptySet(), "unix" );
         InputStream fud = fileSetTransformers.transform( dummyResource(), payload(
             "This is a test for project: ${artifactId} @artifactId@." ) );
         assertEquals( "This is a test for project: anArtifact anArtifact.", readResultStream( fud ) );
     }
 
+    @Test
+    public void nonFilteredFileExtensions() throws Exception
+    {
+        final PojoConfigSource cfg = getPojoConfigSource();
+        Set<String> nonFilteredFileExtensions = new HashSet<>( Arrays.asList( "jpg", "tar.gz" ) );
+        InputStreamTransformer transformer = ReaderFormatter.getFileSetTransformers( cfg, true, nonFilteredFileExtensions, "unix" );
+
+        final InputStream is = new ByteArrayInputStream( new byte[0] );
+        PlexusIoResource resource = mock( PlexusIoResource.class );
+
+        when( resource.getName() ).thenReturn( "file.jpg", "file.tar.gz", "file.txt", "file.nojpg", "file.gz", "file" );
+        assertThat( transformer.transform( resource, is ), sameInstance( is ) );
+        assertThat( transformer.transform( resource, is ), sameInstance( is ) );
+        assertThat( transformer.transform( resource, is ), not( sameInstance( is ) ) );
+        assertThat( transformer.transform( resource, is ), not( sameInstance( is ) ) );
+        assertThat( transformer.transform( resource, is ), not( sameInstance( is ) ) );
+        assertThat( transformer.transform( resource, is ), not( sameInstance( is ) ) );
+    }
 
     private MavenProject createBasicMavenProject()
     {
@@ -104,13 +132,6 @@ public class ReaderFormatterTest
         cfg.setMavenReaderFilter( mavenReaderFilter );
         cfg.setEscapeString( null );
         cfg.setMavenProject( createBasicMavenProject() );
-
-/*        expect( configSource.getFilters()).andReturn( filters );
-
-        expect( configSource.isIncludeProjectBuildFilters()).andReturn( includeProjectBuildFilters );
-
-        expect( configSource.getDelimiters()).andReturn( delimiters );
-*/
         return cfg;
     }