From 52a84fed26858323f61ed41bd71e3befd7910ad3 Mon Sep 17 00:00:00 2001 From: rfscholte Date: Sun, 26 Apr 2020 14:33:42 +0200 Subject: [PATCH] [MASSEMBLYE-849] Add nonFilteredFileExtensions to avoid filtering of binary files --- .../archive/phase/FileItemAssemblyPhase.java | 1 + .../archive/task/AddDependencySetsTask.java | 13 +++-- .../archive/task/AddFileSetsTask.java | 16 ++++-- .../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 f866ffb1b..68d23aa45 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 @@ else if ( outputDirectory.length() < 1 ) { final InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( configSource, fileItem.isFiltered(), + Collections.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 7346e9023..ba11f0016 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.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 @@ void addDependencySet( final DependencySet dependencySet, final Archiver archive 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 5e4452119..1f6a1d250 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 @@ * 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.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 @@ void addFileSet( final FileSet fileSet, final Archiver archiver, final Assembler 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 6b50534e1..4b26f35f9 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.Reader; import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; /** * @@ -114,7 +115,9 @@ private static void checkifFileTypeIsAppropriateForLineEndingTransformation( Ple @Nullable public static InputStreamTransformer getFileSetTransformers( final AssemblerConfigurationSource configSource, - final boolean isFiltered, String fileSetLineEnding ) + final boolean isFiltered, + final Set nonFilteredFileExtensions, + String fileSetLineEnding ) throws AssemblyFormattingException { final LineEndings lineEndingToUse = LineEndingsUtils.getLineEnding( fileSetLineEnding ); @@ -131,6 +134,15 @@ public InputStream transform( @Nonnull PlexusIoResource plexusIoResource, @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 32b5f9784..792bcc912 100644 --- a/src/main/mdo/assembly-component.mdo +++ b/src/main/mdo/assembly-component.mdo @@ -283,6 +283,17 @@ false boolean + + nonFilteredFileExtensions + 2.1.0+ + + Additional file extensions to not apply filtering (Since 3.2.0) + + + String + * + + @@ -1239,6 +1250,17 @@ false boolean + + nonFilteredFileExtensions + 2.1.0+ + + Additional file extensions to not apply filtering (Since 3.2.0) + + + String + * + + lineEnding 1.1.2+ diff --git a/src/main/mdo/assembly.mdo b/src/main/mdo/assembly.mdo index 2b6517f8b..84d39aa35 100644 --- a/src/main/mdo/assembly.mdo +++ b/src/main/mdo/assembly.mdo @@ -403,6 +403,17 @@ false boolean + + nonFilteredFileExtensions + 2.1.0+ + + Additional file extensions to not apply filtering (Since 3.2.0) + + + String + * + + @@ -1351,6 +1362,17 @@ false boolean + + nonFilteredFileExtensions + 2.1.0+ + + Additional file extensions to not apply filtering (Since 3.2.0) + + + String + * + + lineEnding 1.1.2+ 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 762f65ea4..51d0b9390 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 @@ * 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.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 void lineDosFeed() throws IOException, AssemblyFormattingException { final PojoConfigSource cfg = getPojoConfigSource(); - InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, "dos" ); + InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, Collections.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 void lineDosFeed_withoutFiltering() throws IOException, AssemblyFormattingException { final PojoConfigSource cfg = getPojoConfigSource(); - InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, false, "dos" ); + InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, false, Collections.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 void lineUnixFeedWithInterpolation() throws IOException, AssemblyFormattingException { final PojoConfigSource cfg = getPojoConfigSource(); - InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, "unix" ); + InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, Collections.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 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 @@ private PojoConfigSource getPojoConfigSource() 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; }