diff --git a/core/ts.core/src/ts/utils/ZipUtils.java b/core/ts.core/src/ts/utils/ZipUtils.java index 1aa5d601..52bee783 100644 --- a/core/ts.core/src/ts/utils/ZipUtils.java +++ b/core/ts.core/src/ts/utils/ZipUtils.java @@ -102,6 +102,8 @@ public static void extractZip(File file, File destination) throws IOException { // Close the stream out.close(); + // Preserve original modification date + extracted.setLastModified(entry.getTime()); if (extracted.getParent().contains(BIN_FOLDER)) { extracted.setExecutable(true); } @@ -166,9 +168,13 @@ public static void extractTar(File file, File destination) throws IOException { // Close the stream out.close(); - if (extractedFile.getParent().contains(BIN_FOLDER)) { - extractedFile.setExecutable(true); - } + // Preserve original modification date + extractedFile.setLastModified(entry.getTime()); + long mode = entry.getMode(); + if ((mode & 00100) > 0) { + // Preserve execute permissions + extractedFile.setExecutable(true, (mode & 00001) == 0); + } break; case TarEntry.LINK: File linkFile = new File(destination, outFilename);