File tree Expand file tree Collapse file tree 3 files changed +53
-1
lines changed 
main/java/org/codehaus/plexus/archiver/tar 
test/java/org/codehaus/plexus/archiver/tar Expand file tree Collapse file tree 3 files changed +53
-1
lines changed Original file line number Diff line number Diff line change @@ -54,7 +54,9 @@ public boolean hasNext()
5454            public  PlexusIoResource  next ()
5555            {
5656                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  );
5860            }
5961
6062            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 3434import  org .codehaus .plexus .archiver .gzip .GZipCompressor ;
3535import  org .codehaus .plexus .archiver .util .ArchiveEntryUtils ;
3636import  org .codehaus .plexus .archiver .util .Compressor ;
37+ import  org .codehaus .plexus .archiver .util .DefaultArchivedFileSet ;
3738import  org .codehaus .plexus .archiver .zip .ArchiveFileComparator ;
3839import  org .codehaus .plexus .components .io .attributes .PlexusIoResourceAttributeUtils ;
3940import  org .codehaus .plexus .components .io .attributes .PlexusIoResourceAttributes ;
@@ -533,4 +534,21 @@ private void testCreateResourceCollection( TarHandler tarHandler )
533534        cmp1 .close ();
534535        cmp2 .close ();
535536    }
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+     }
536554}
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments