File tree 3 files changed +53
-1
lines changed
main/java/org/codehaus/plexus/archiver/tar
test/java/org/codehaus/plexus/archiver/tar
3 files changed +53
-1
lines changed Original file line number Diff line number Diff line change @@ -54,7 +54,9 @@ public boolean hasNext()
54
54
public PlexusIoResource next ()
55
55
{
56
56
final TarArchiveEntry entry = (TarArchiveEntry ) en .nextElement ();
57
- return new TarResource ( tarFile , entry );
57
+ return !entry .isSymbolicLink ()
58
+ ? new TarResource ( tarFile , entry )
59
+ : new TarSymlinkResource ( tarFile , entry );
58
60
}
59
61
60
62
public void remove ()
Original file line number Diff line number Diff line change
1
+ package org .codehaus .plexus .archiver .tar ;
2
+
3
+ import java .io .IOException ;
4
+
5
+ import org .apache .commons .compress .archivers .tar .TarArchiveEntry ;
6
+ import org .codehaus .plexus .components .io .functions .SymlinkDestinationSupplier ;
7
+
8
+ /**
9
+ * A {@link TarResource} that represents symbolic link.
10
+ */
11
+ public class TarSymlinkResource
12
+ extends TarResource
13
+ implements SymlinkDestinationSupplier
14
+ {
15
+ private final String symlinkDestination ;
16
+
17
+ public TarSymlinkResource (TarFile tarFile , TarArchiveEntry entry ) {
18
+ super (tarFile , entry );
19
+ symlinkDestination = entry .getLinkName ();
20
+ }
21
+
22
+ @ Override
23
+ public String getSymlinkDestination () throws IOException {
24
+ return symlinkDestination ;
25
+ }
26
+
27
+ @ Override
28
+ public boolean isSymbolicLink () {
29
+ return true ;
30
+ }
31
+
32
+ }
Original file line number Diff line number Diff line change 34
34
import org .codehaus .plexus .archiver .gzip .GZipCompressor ;
35
35
import org .codehaus .plexus .archiver .util .ArchiveEntryUtils ;
36
36
import org .codehaus .plexus .archiver .util .Compressor ;
37
+ import org .codehaus .plexus .archiver .util .DefaultArchivedFileSet ;
37
38
import org .codehaus .plexus .archiver .zip .ArchiveFileComparator ;
38
39
import org .codehaus .plexus .components .io .attributes .PlexusIoResourceAttributeUtils ;
39
40
import org .codehaus .plexus .components .io .attributes .PlexusIoResourceAttributes ;
@@ -533,4 +534,21 @@ private void testCreateResourceCollection( TarHandler tarHandler )
533
534
cmp1 .close ();
534
535
cmp2 .close ();
535
536
}
537
+
538
+ public void testSymlinkArchivedFileSet ()
539
+ throws Exception
540
+ {
541
+ final File tarFile = getTestFile ( "src/test/resources/symlinks/symlinks.tar" );
542
+ final File tarFile2 = getTestFile ( "target/output/pasymlinks-archivedFileset.tar" );
543
+ final TarArchiver tarArchiver = getPosixTarArchiver ();
544
+ tarArchiver .setDestFile ( tarFile2 );
545
+ DefaultArchivedFileSet archivedFileSet = DefaultArchivedFileSet .archivedFileSet ( tarFile );
546
+ archivedFileSet .setUsingDefaultExcludes ( false );
547
+ tarArchiver .addArchivedFileSet ( archivedFileSet );
548
+ tarArchiver .createArchive ();
549
+
550
+ final TarFile cmp1 = new TarFile ( tarFile );
551
+ final TarFile cmp2 = new TarFile ( tarFile2 );
552
+ ArchiveFileComparator .assertEquals ( cmp1 , cmp2 , "" );
553
+ }
536
554
}
You can’t perform that action at this time.
0 commit comments