From f72a9d7b8aee424783c653da1b5d6acbdde5be75 Mon Sep 17 00:00:00 2001 From: James Hanson Date: Sat, 14 Dec 2019 08:48:53 +0100 Subject: [PATCH 1/4] #130 DirectoryArchiver: create parent directories for symlinks --- .../archiver/dir/DirectoryArchiver.java | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/codehaus/plexus/archiver/dir/DirectoryArchiver.java b/src/main/java/org/codehaus/plexus/archiver/dir/DirectoryArchiver.java index f35569445..d424e7d1b 100644 --- a/src/main/java/org/codehaus/plexus/archiver/dir/DirectoryArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/dir/DirectoryArchiver.java @@ -91,7 +91,9 @@ public void execute() { String dest = ( (SymlinkDestinationSupplier) resource ).getSymlinkDestination(); File target = new File( dest ); - SymlinkUtils.createSymbolicLink( new File( fileName ), target ); + File symlink = new File( fileName ); + makeParentDirectories( symlink ); + SymlinkUtils.createSymbolicLink( symlink, target ); } else { @@ -142,15 +144,7 @@ protected void copyFile( final ArchiveEntry entry, final String vPath ) if ( !in.isDirectory() ) { - if ( !outFile.getParentFile().exists() ) - { - // create the parent directory... - if ( !outFile.getParentFile().mkdirs() ) - { - // Failure, unable to create specified directory for some unknown reason. - throw new ArchiverException( "Unable to create directory or parent directory of " + outFile ); - } - } + makeParentDirectories( outFile ); ResourceUtils.copyFile( entry.getInputStream(), outFile ); setFileModes( entry, outFile, inLastModified ); @@ -187,6 +181,18 @@ public void run() } + private static void makeParentDirectories( File file ) { + if ( !file.getParentFile().exists() ) + { + // create the parent directory... + if ( !file.getParentFile().mkdirs() ) + { + // Failure, unable to create specified directory for some unknown reason. + throw new ArchiverException( "Unable to create directory or parent directory of " + file ); + } + } + } + private void setFileModes( ArchiveEntry entry, File outFile, long inLastModified ) { if ( !isIgnorePermissions() ) From 7eb2752d87ec79c2b3265ca8788a7abbe3824937 Mon Sep 17 00:00:00 2001 From: James Hanson Date: Sun, 2 Feb 2020 11:49:04 +0100 Subject: [PATCH 2/4] #130 Added test case for DirectoryArchiver --- .../archiver/dir/DirectoryArchiverTest.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/test/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverTest.java diff --git a/src/test/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverTest.java b/src/test/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverTest.java new file mode 100644 index 000000000..bf7abdc9d --- /dev/null +++ b/src/test/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverTest.java @@ -0,0 +1,43 @@ +package org.codehaus.plexus.archiver.dir; + +import java.io.File; +import java.io.IOException; +import org.junit.After; +import org.junit.Test; +import static org.junit.Assert.*; +import org.junit.Before; + +public class DirectoryArchiverTest { + + private static final File CURRENT_DIR = new File("."); + private static final File DEST_DIR = new File("target/output/testCreateDirsForSymlink"); + private static final File SYMLINK_FILE = new File(DEST_DIR, "testSymlink"); + + @Before + public void prepare() + { + SYMLINK_FILE.delete(); + DEST_DIR.delete(); + } + + @After + public void cleanUp() + { + prepare(); + } + + /** + * Test case for ISSUE-130 + * @throws IOException + */ + @Test + public void testSymlinkWithParentDirectory() + throws IOException + { + DirectoryArchiver archiver = new DirectoryArchiver(); + archiver.addSymlink(SYMLINK_FILE.getPath(), CURRENT_DIR.getPath()); + archiver.setDestFile(CURRENT_DIR); + archiver.execute(); + assertTrue(SYMLINK_FILE.isDirectory()); + } +} From 1ac8c067782ebf92df29613388045d43794c6a77 Mon Sep 17 00:00:00 2001 From: James Hanson Date: Sun, 2 Feb 2020 12:14:23 +0100 Subject: [PATCH 3/4] #130 Cleaned up DirectoryArchiverTest --- .../archiver/dir/DirectoryArchiverTest.java | 29 +++++++------------ 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/src/test/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverTest.java b/src/test/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverTest.java index bf7abdc9d..035d4c2d1 100644 --- a/src/test/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverTest.java @@ -2,10 +2,7 @@ import java.io.File; import java.io.IOException; -import org.junit.After; import org.junit.Test; -import static org.junit.Assert.*; -import org.junit.Before; public class DirectoryArchiverTest { @@ -13,19 +10,6 @@ public class DirectoryArchiverTest { private static final File DEST_DIR = new File("target/output/testCreateDirsForSymlink"); private static final File SYMLINK_FILE = new File(DEST_DIR, "testSymlink"); - @Before - public void prepare() - { - SYMLINK_FILE.delete(); - DEST_DIR.delete(); - } - - @After - public void cleanUp() - { - prepare(); - } - /** * Test case for ISSUE-130 * @throws IOException @@ -34,10 +18,17 @@ public void cleanUp() public void testSymlinkWithParentDirectory() throws IOException { + removeSymlink(); DirectoryArchiver archiver = new DirectoryArchiver(); - archiver.addSymlink(SYMLINK_FILE.getPath(), CURRENT_DIR.getPath()); - archiver.setDestFile(CURRENT_DIR); + archiver.addSymlink( SYMLINK_FILE.getPath(), CURRENT_DIR.getPath() ); + archiver.setDestFile( CURRENT_DIR ); archiver.execute(); - assertTrue(SYMLINK_FILE.isDirectory()); + removeSymlink(); + } + + private void removeSymlink() + { + SYMLINK_FILE.delete(); + DEST_DIR.delete(); } } From fdf57d2969373d45a1757f8fb16edd68a68d318b Mon Sep 17 00:00:00 2001 From: James Hanson Date: Mon, 3 Feb 2020 12:55:52 +0100 Subject: [PATCH 4/4] #130 Replaced DirectoryArchiverTest with addition to SymlinkTest --- .../codehaus/plexus/archiver/SymlinkTest.java | 2 ++ .../archiver/dir/DirectoryArchiverTest.java | 34 ------------------- 2 files changed, 2 insertions(+), 34 deletions(-) delete mode 100644 src/test/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverTest.java diff --git a/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java b/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java index ca55ebd45..1697e0066 100644 --- a/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java @@ -102,6 +102,8 @@ public void testSymlinkDirArchiver() final File archiveFile = new File( "target/output/dirarchiver-symlink" ); archiveFile.mkdirs(); archiver.setDestFile( archiveFile ); + archiver.addSymlink("target/output/dirarchiver-symlink/aNewDir/symlink", "."); + archiver.createArchive(); File symbolicLink = new File( "target/output/dirarchiver-symlink/symR" ); diff --git a/src/test/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverTest.java b/src/test/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverTest.java deleted file mode 100644 index 035d4c2d1..000000000 --- a/src/test/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.codehaus.plexus.archiver.dir; - -import java.io.File; -import java.io.IOException; -import org.junit.Test; - -public class DirectoryArchiverTest { - - private static final File CURRENT_DIR = new File("."); - private static final File DEST_DIR = new File("target/output/testCreateDirsForSymlink"); - private static final File SYMLINK_FILE = new File(DEST_DIR, "testSymlink"); - - /** - * Test case for ISSUE-130 - * @throws IOException - */ - @Test - public void testSymlinkWithParentDirectory() - throws IOException - { - removeSymlink(); - DirectoryArchiver archiver = new DirectoryArchiver(); - archiver.addSymlink( SYMLINK_FILE.getPath(), CURRENT_DIR.getPath() ); - archiver.setDestFile( CURRENT_DIR ); - archiver.execute(); - removeSymlink(); - } - - private void removeSymlink() - { - SYMLINK_FILE.delete(); - DEST_DIR.delete(); - } -}