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:58 UTC

[maven-assembly-plugin] branch MASSEMBLY-849 created (now 52a84fe)

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

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


      at 52a84fe  [MASSEMBLYE-849] Add nonFilteredFileExtensions to avoid filtering of binary files

This branch includes the following new commits:

     new 52a84fe  [MASSEMBLYE-849] Add nonFilteredFileExtensions to avoid filtering of binary files

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



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

Posted by rf...@apache.org.
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;
     }