Skip to content

Commit 52a84fe

Browse files
committed
[MASSEMBLYE-849] Add nonFilteredFileExtensions to avoid filtering of binary files
1 parent 2c44462 commit 52a84fe

File tree

7 files changed

+114
-29
lines changed

7 files changed

+114
-29
lines changed

src/main/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhase.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ else if ( outputDirectory.length() < 1 )
142142
{
143143
final InputStreamTransformer fileSetTransformers =
144144
ReaderFormatter.getFileSetTransformers( configSource, fileItem.isFiltered(),
145+
Collections.<String>emptySet(),
145146
fileItem.getLineEnding() );
146147

147148
final PlexusIoResource restoUse;

src/main/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTask.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.nio.charset.Charset;
2424
import java.util.ArrayList;
2525
import java.util.Collections;
26+
import java.util.HashSet;
2627
import java.util.LinkedHashSet;
2728
import java.util.List;
2829
import java.util.Set;
@@ -142,11 +143,13 @@ void addDependencySet( final DependencySet dependencySet, final Archiver archive
142143

143144
logger.debug( "Adding " + dependencyArtifacts.size() + " dependency artifacts." );
144145

145-
InputStreamTransformer fileSetTransformers =
146-
isUnpackWithOptions( dependencySet )
147-
? ReaderFormatter.getFileSetTransformers( configSource, dependencySet.getUnpackOptions().isFiltered(),
148-
dependencySet.getUnpackOptions().getLineEnding() )
149-
: null;
146+
UnpackOptions unpackOptions = dependencySet.getUnpackOptions();
147+
InputStreamTransformer fileSetTransformers = isUnpackWithOptions( dependencySet )
148+
? ReaderFormatter.getFileSetTransformers( configSource,
149+
unpackOptions.isFiltered(),
150+
new HashSet<>( unpackOptions.getNonFilteredFileExtensions() ),
151+
unpackOptions.getLineEnding() )
152+
: null;
150153

151154
for ( final Artifact depArtifact : dependencyArtifacts )
152155
{

src/main/java/org/apache/maven/plugins/assembly/archive/task/AddFileSetsTask.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@
1919
* under the License.
2020
*/
2121

22+
import java.io.File;
23+
import java.util.ArrayList;
24+
import java.util.Arrays;
25+
import java.util.HashSet;
26+
import java.util.List;
27+
2228
import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
2329
import org.apache.maven.plugins.assembly.archive.ArchiveCreationException;
2430
import org.apache.maven.plugins.assembly.format.AssemblyFormattingException;
@@ -33,11 +39,6 @@
3339
import org.codehaus.plexus.logging.Logger;
3440
import org.codehaus.plexus.logging.console.ConsoleLogger;
3541

36-
import java.io.File;
37-
import java.util.ArrayList;
38-
import java.util.Arrays;
39-
import java.util.List;
40-
4142
/**
4243
*
4344
*/
@@ -137,7 +138,10 @@ void addFileSet( final FileSet fileSet, final Archiver archiver, final Assembler
137138
if ( fileSetDir.exists() )
138139
{
139140
InputStreamTransformer fileSetTransformers =
140-
ReaderFormatter.getFileSetTransformers( configSource, fileSet.isFiltered(), fileSet.getLineEnding() );
141+
ReaderFormatter.getFileSetTransformers( configSource,
142+
fileSet.isFiltered(),
143+
new HashSet<>( fileSet.getNonFilteredFileExtensions() ),
144+
fileSet.getLineEnding() );
141145
if ( fileSetTransformers == null )
142146
{
143147
logger.debug( "NOT reformatting any files in " + fileSetDir );

src/main/java/org/apache/maven/plugins/assembly/format/ReaderFormatter.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.io.Reader;
3838
import java.util.LinkedHashSet;
3939
import java.util.List;
40+
import java.util.Set;
4041

4142
/**
4243
*
@@ -114,7 +115,9 @@ private static void checkifFileTypeIsAppropriateForLineEndingTransformation( Ple
114115

115116
@Nullable
116117
public static InputStreamTransformer getFileSetTransformers( final AssemblerConfigurationSource configSource,
117-
final boolean isFiltered, String fileSetLineEnding )
118+
final boolean isFiltered,
119+
final Set<String> nonFilteredFileExtensions,
120+
String fileSetLineEnding )
118121
throws AssemblyFormattingException
119122
{
120123
final LineEndings lineEndingToUse = LineEndingsUtils.getLineEnding( fileSetLineEnding );
@@ -131,6 +134,15 @@ public InputStream transform( @Nonnull PlexusIoResource plexusIoResource,
131134
@Nonnull InputStream inputStream )
132135
throws IOException
133136
{
137+
final String fileName = plexusIoResource.getName();
138+
for ( String extension : nonFilteredFileExtensions )
139+
{
140+
if ( fileName.endsWith( '.' + extension ) )
141+
{
142+
return inputStream;
143+
}
144+
}
145+
134146
InputStream result = inputStream;
135147
if ( isFiltered )
136148
{

src/main/mdo/assembly-component.mdo

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,17 @@
283283
<defaultValue>false</defaultValue>
284284
<type>boolean</type>
285285
</field>
286+
<field>
287+
<name>nonFilteredFileExtensions</name>
288+
<version>2.1.0+</version>
289+
<description>
290+
Additional file extensions to not apply filtering (Since 3.2.0)
291+
</description>
292+
<association>
293+
<type>String</type>
294+
<multiplicity>*</multiplicity>
295+
</association>
296+
</field>
286297
</fields>
287298
</class>
288299
<class>
@@ -1239,6 +1250,17 @@
12391250
<defaultValue>false</defaultValue>
12401251
<type>boolean</type>
12411252
</field>
1253+
<field>
1254+
<name>nonFilteredFileExtensions</name>
1255+
<version>2.1.0+</version>
1256+
<description>
1257+
Additional file extensions to not apply filtering (Since 3.2.0)
1258+
</description>
1259+
<association>
1260+
<type>String</type>
1261+
<multiplicity>*</multiplicity>
1262+
</association>
1263+
</field>
12421264
<field>
12431265
<name>lineEnding</name>
12441266
<version>1.1.2+</version>

src/main/mdo/assembly.mdo

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,17 @@
403403
<defaultValue>false</defaultValue>
404404
<type>boolean</type>
405405
</field>
406+
<field>
407+
<name>nonFilteredFileExtensions</name>
408+
<version>2.1.0+</version>
409+
<description>
410+
Additional file extensions to not apply filtering (Since 3.2.0)
411+
</description>
412+
<association>
413+
<type>String</type>
414+
<multiplicity>*</multiplicity>
415+
</association>
416+
</field>
406417
</fields>
407418
</class>
408419
<class>
@@ -1351,6 +1362,17 @@
13511362
<defaultValue>false</defaultValue>
13521363
<type>boolean</type>
13531364
</field>
1365+
<field>
1366+
<name>nonFilteredFileExtensions</name>
1367+
<version>2.1.0+</version>
1368+
<description>
1369+
Additional file extensions to not apply filtering (Since 3.2.0)
1370+
</description>
1371+
<association>
1372+
<type>String</type>
1373+
<multiplicity>*</multiplicity>
1374+
</association>
1375+
</field>
13541376
<field>
13551377
<name>lineEnding</name>
13561378
<version>1.1.2+</version>

src/test/java/org/apache/maven/plugins/assembly/format/ReaderFormatterTest.java

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,33 @@
1919
* under the License.
2020
*/
2121

22+
import static org.hamcrest.Matchers.not;
23+
import static org.hamcrest.Matchers.sameInstance;
24+
import static org.junit.Assert.assertEquals;
25+
import static org.junit.Assert.assertThat;
26+
import static org.mockito.Mockito.mock;
27+
import static org.mockito.Mockito.when;
28+
29+
import java.io.ByteArrayInputStream;
30+
import java.io.File;
31+
import java.io.IOException;
32+
import java.io.InputStream;
33+
import java.util.Arrays;
34+
import java.util.Collections;
35+
import java.util.HashSet;
36+
import java.util.Set;
37+
2238
import org.apache.commons.io.IOUtils;
2339
import org.apache.maven.model.Model;
2440
import org.apache.maven.plugins.assembly.testutils.PojoConfigSource;
2541
import org.apache.maven.project.MavenProject;
2642
import org.apache.maven.shared.filtering.DefaultMavenReaderFilter;
2743
import org.codehaus.plexus.archiver.resources.PlexusIoVirtualFileResource;
2844
import org.codehaus.plexus.components.io.functions.InputStreamTransformer;
45+
import org.codehaus.plexus.components.io.resources.PlexusIoResource;
2946
import org.codehaus.plexus.logging.console.ConsoleLogger;
3047
import org.junit.Test;
3148

32-
import java.io.ByteArrayInputStream;
33-
import java.io.File;
34-
import java.io.IOException;
35-
import java.io.InputStream;
36-
37-
import static org.junit.Assert.assertEquals;
38-
3949

4050
public class ReaderFormatterTest
4151
{
@@ -44,7 +54,7 @@ public void lineDosFeed()
4454
throws IOException, AssemblyFormattingException
4555
{
4656
final PojoConfigSource cfg = getPojoConfigSource();
47-
InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, "dos" );
57+
InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, Collections.<String>emptySet(), "dos" );
4858
InputStream fud = fileSetTransformers.transform( dummyResource(), payload( "This is a\ntest." ) );
4959
assertEquals( "This is a\r\ntest.", readResultStream( fud ) );
5060
}
@@ -54,7 +64,7 @@ public void lineDosFeed_withoutFiltering()
5464
throws IOException, AssemblyFormattingException
5565
{
5666
final PojoConfigSource cfg = getPojoConfigSource();
57-
InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, false, "dos" );
67+
InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, false, Collections.<String>emptySet(), "dos" );
5868
InputStream fud = fileSetTransformers.transform( dummyResource(), payload( "This is a\ntest." ) );
5969
assertEquals( "This is a\r\ntest.", readResultStream( fud ) );
6070
}
@@ -64,12 +74,30 @@ public void lineUnixFeedWithInterpolation()
6474
throws IOException, AssemblyFormattingException
6575
{
6676
final PojoConfigSource cfg = getPojoConfigSource();
67-
InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, "unix" );
77+
InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, Collections.<String>emptySet(), "unix" );
6878
InputStream fud = fileSetTransformers.transform( dummyResource(), payload(
6979
"This is a test for project: ${artifactId} @artifactId@." ) );
7080
assertEquals( "This is a test for project: anArtifact anArtifact.", readResultStream( fud ) );
7181
}
7282

83+
@Test
84+
public void nonFilteredFileExtensions() throws Exception
85+
{
86+
final PojoConfigSource cfg = getPojoConfigSource();
87+
Set<String> nonFilteredFileExtensions = new HashSet<>( Arrays.asList( "jpg", "tar.gz" ) );
88+
InputStreamTransformer transformer = ReaderFormatter.getFileSetTransformers( cfg, true, nonFilteredFileExtensions, "unix" );
89+
90+
final InputStream is = new ByteArrayInputStream( new byte[0] );
91+
PlexusIoResource resource = mock( PlexusIoResource.class );
92+
93+
when( resource.getName() ).thenReturn( "file.jpg", "file.tar.gz", "file.txt", "file.nojpg", "file.gz", "file" );
94+
assertThat( transformer.transform( resource, is ), sameInstance( is ) );
95+
assertThat( transformer.transform( resource, is ), sameInstance( is ) );
96+
assertThat( transformer.transform( resource, is ), not( sameInstance( is ) ) );
97+
assertThat( transformer.transform( resource, is ), not( sameInstance( is ) ) );
98+
assertThat( transformer.transform( resource, is ), not( sameInstance( is ) ) );
99+
assertThat( transformer.transform( resource, is ), not( sameInstance( is ) ) );
100+
}
73101

74102
private MavenProject createBasicMavenProject()
75103
{
@@ -104,13 +132,6 @@ private PojoConfigSource getPojoConfigSource()
104132
cfg.setMavenReaderFilter( mavenReaderFilter );
105133
cfg.setEscapeString( null );
106134
cfg.setMavenProject( createBasicMavenProject() );
107-
108-
/* expect( configSource.getFilters()).andReturn( filters );
109-
110-
expect( configSource.isIncludeProjectBuildFilters()).andReturn( includeProjectBuildFilters );
111-
112-
expect( configSource.getDelimiters()).andReturn( delimiters );
113-
*/
114135
return cfg;
115136
}
116137

0 commit comments

Comments
 (0)