diff --git a/src/main/kotlin/io/quarkus/code/writer/CommonsZipProjectWriter.java b/src/main/kotlin/io/quarkus/code/writer/CommonsZipProjectWriter.java index f2261aa99..fed3cceca 100644 --- a/src/main/kotlin/io/quarkus/code/writer/CommonsZipProjectWriter.java +++ b/src/main/kotlin/io/quarkus/code/writer/CommonsZipProjectWriter.java @@ -4,13 +4,17 @@ import org.apache.commons.compress.archivers.ArchiveException; import org.apache.commons.compress.archivers.ArchiveOutputStream; import org.apache.commons.compress.archivers.ArchiveStreamFactory; +import org.apache.commons.compress.archivers.zip.X5455_ExtendedTimestamp; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipExtraField; +import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Date; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.Map; @@ -25,6 +29,7 @@ public class CommonsZipProjectWriter implements ProjectWriter { private final Set createdDirs = new HashSet<>(); private final Map archiveEntriesByPath = new LinkedHashMap<>(); private final Map contentByPath = new LinkedHashMap<>(); + private final Date creation = new Date(); private CommonsZipProjectWriter(final ArchiveOutputStream aos, final String basePath) { this.aos = aos; @@ -59,12 +64,15 @@ private void mkdirs(Path dirPath) throws IOException { if (!createdDirs.contains(dirPathText)) { ZipArchiveEntry ze = new ZipArchiveEntry(dirPathText + "/"); ze.setUnixMode(040755); + ze.setExtraFields(new ZipExtraField[]{getTimestamp()}); aos.putArchiveEntry(ze); aos.closeArchiveEntry(); createdDirs.add(dirPathText); } } + + public void write(String path, byte[] contentBytes, boolean allowExec) { Path filePath = Paths.get(this.basePath, "/", path); ZipArchiveEntry ze = new ZipArchiveEntry(filePath.toString()); @@ -73,6 +81,7 @@ public void write(String path, byte[] contentBytes, boolean allowExec) { } else { ze.setUnixMode(0100644); } + ze.setExtraFields(new ZipExtraField[]{getTimestamp()}); archiveEntriesByPath.put(filePath.toString(), ze); contentByPath.put(filePath.toString(), contentBytes); } @@ -99,4 +108,13 @@ public void close() throws IOException { aos.close(); } + @NotNull + private X5455_ExtendedTimestamp getTimestamp() { + X5455_ExtendedTimestamp timestamp = new X5455_ExtendedTimestamp(); + timestamp.setCreateJavaTime(creation); + timestamp.setModifyJavaTime(creation); + timestamp.setAccessJavaTime(creation); + return timestamp; + } + }