X Tutup
Skip to content

Commit 415492b

Browse files
committed
Add symlinks as symlinks in tar archive
1 parent c5c8932 commit 415492b

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

src/main/java/com/github/dockerjava/core/util/CompressArchiveUtil.java

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
2020
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
21+
import org.apache.commons.compress.archivers.tar.TarConstants;
2122
import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream;
2223
import org.apache.commons.io.FileUtils;
2324

@@ -95,17 +96,27 @@ public static File archiveTARFiles(File base, Iterable<File> files, String archi
9596
new FileOutputStream(tarFile))))) {
9697
tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
9798
for (File file : files) {
98-
TarArchiveEntry tarEntry = new TarArchiveEntry(file);
99-
tarEntry.setName(relativize(base, file));
100-
101-
if (!file.isDirectory() && file.canExecute()) {
102-
tarEntry.setMode(tarEntry.getMode() | 0755);
103-
}
104-
105-
tos.putArchiveEntry(tarEntry);
106-
107-
if (!file.isDirectory()) {
108-
FileUtils.copyFile(file, tos);
99+
// If file is a symbolic link
100+
if (Files.isSymbolicLink(file.toPath())) {
101+
Path target = Files.readSymbolicLink(file.toPath());
102+
String targetEntryName = target.toFile().getName();
103+
TarArchiveEntry tarEntry = new TarArchiveEntry(relativize(base.toPath(), file.toPath()), TarConstants.LF_SYMLINK);
104+
tarEntry.setLinkName(targetEntryName);
105+
tos.putArchiveEntry(tarEntry);
106+
107+
} else {
108+
TarArchiveEntry tarEntry = new TarArchiveEntry(file);
109+
tarEntry.setName(relativize(base, file));
110+
111+
if (!file.isDirectory() && file.canExecute()) {
112+
tarEntry.setMode(tarEntry.getMode() | 0755);
113+
}
114+
115+
tos.putArchiveEntry(tarEntry);
116+
117+
if (!file.isDirectory()) {
118+
FileUtils.copyFile(file, tos);
119+
}
109120
}
110121
tos.closeArchiveEntry();
111122
}

0 commit comments

Comments
 (0)
X Tutup