From 33955e76c7e0bfff7c70659e0bbe89f11cde0758 Mon Sep 17 00:00:00 2001 From: Graham Date: Wed, 15 Jan 2020 21:12:53 +0000 Subject: [PATCH] Add DeterministicJarOutputStream.repack() function I'm going to use this to make jarsigner's output deterministic. --- .../common/io/DeterministicJarOutputStream.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/common/src/main/java/dev/openrs2/common/io/DeterministicJarOutputStream.kt b/common/src/main/java/dev/openrs2/common/io/DeterministicJarOutputStream.kt index fd19642d..11aee31e 100644 --- a/common/src/main/java/dev/openrs2/common/io/DeterministicJarOutputStream.kt +++ b/common/src/main/java/dev/openrs2/common/io/DeterministicJarOutputStream.kt @@ -1,7 +1,10 @@ package dev.openrs2.common.io import java.io.OutputStream +import java.nio.file.Files +import java.nio.file.Path import java.nio.file.attribute.FileTime +import java.util.jar.JarInputStream import java.util.jar.JarOutputStream import java.util.jar.Manifest import java.util.zip.ZipEntry @@ -27,5 +30,17 @@ class DeterministicJarOutputStream : JarOutputStream { DeterministicJarOutputStream(out) } } + + fun repack(src: Path, dest: Path) { + JarInputStream(Files.newInputStream(src)).use { `in` -> + create(Files.newOutputStream(dest), `in`.manifest).use { out -> + while (true) { + val entry = `in`.nextJarEntry ?: break + out.putNextEntry(entry) + `in`.copyTo(out) + } + } + } + } } }