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;
 

Reply via email to