Repository: commons-compress Updated Branches: refs/heads/master 68db5fa9e -> 61db5ea79
Changes to allow byte-for-byte replication of Zip entries Two small changes required in order to do this are: - Read general purpose bit as raw flag - Support for reading versions made by and required This is for a general purpose library for doing deltas on JARs using a merkletree mechanism. Closes https://github.com/apache/commons-compress/pull/6 Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/61db5ea7 Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/61db5ea7 Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/61db5ea7 Branch: refs/heads/master Commit: 61db5ea79b6bb932c09b89812772eec67c05956a Parents: 68db5fa Author: Torsten Curdt <[email protected]> Authored: Wed Jan 27 12:58:33 2016 +0100 Committer: Torsten Curdt <[email protected]> Committed: Wed Jan 27 12:58:33 2016 +0100 ---------------------------------------------------------------------- RELEASE-NOTES.txt | 1 + .../compress/archivers/zip/ZipArchiveEntry.java | 27 ++++++++++++++++++++ .../commons/compress/archivers/zip/ZipFile.java | 6 ++++- 3 files changed, 33 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-compress/blob/61db5ea7/RELEASE-NOTES.txt ---------------------------------------------------------------------- diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index c33ba7f..3dc65a0 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -9,6 +9,7 @@ Release 1.11 (not yet released) ------------ Changes +o Allow byte-for-byte replication of Zip entries o TarArchiveEntry's preserveLeadingSlashes is now a property and used on later calls to setName, too. This behavior is a breaking change. http://git-wip-us.apache.org/repos/asf/commons-compress/blob/61db5ea7/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java index 13db0ce..ddb2ebc 100644 --- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java +++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java @@ -78,7 +78,10 @@ public class ZipArchiveEntry extends java.util.zip.ZipEntry private long size = SIZE_UNKNOWN; private int internalAttributes = 0; + private int versionRequired; + private int versionMadeBy; private int platform = PLATFORM_FAT; + private int rawFlag; private long externalAttributes = 0; private ZipExtraField[] extraFields; private UnparseableExtraFieldData unparseableExtra = null; @@ -799,4 +802,28 @@ public class ZipArchiveEntry extends java.util.zip.ZipEntry other.getLocalFileDataExtra()) && gpb.equals(other.gpb); } + + public void setVersionMadeBy(int versionMadeBy) { + this.versionMadeBy = versionMadeBy; + } + + public void setVersionRequired(int versionRequired) { + this.versionRequired = versionRequired; + } + + public int getVersionRequired() { + return versionRequired; + } + + public int getVersionMadeBy() { + return versionMadeBy; + } + + public int getRawFlag() { + return rawFlag; + } + + public void setRawFlag(int rawFlag) { + this.rawFlag = rawFlag; + } } http://git-wip-us.apache.org/repos/asf/commons-compress/blob/61db5ea7/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java index 0406433..a7e3091 100644 --- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java +++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java @@ -559,18 +559,22 @@ public class ZipFile implements Closeable { int versionMadeBy = ZipShort.getValue(CFH_BUF, off); off += SHORT; + ze.setVersionMadeBy(versionMadeBy); ze.setPlatform((versionMadeBy >> BYTE_SHIFT) & NIBLET_MASK); - off += SHORT; // skip version info + ze.setVersionRequired(ZipShort.getValue(CFH_BUF, off)); + off += SHORT; // version required final GeneralPurposeBit gpFlag = GeneralPurposeBit.parse(CFH_BUF, off); final boolean hasUTF8Flag = gpFlag.usesUTF8ForNames(); final ZipEncoding entryEncoding = hasUTF8Flag ? ZipEncodingHelper.UTF8_ZIP_ENCODING : zipEncoding; ze.setGeneralPurposeBit(gpFlag); + ze.setRawFlag(ZipShort.getValue(CFH_BUF, off)); off += SHORT; + //noinspection MagicConstant ze.setMethod(ZipShort.getValue(CFH_BUF, off)); off += SHORT;
