Author: bodewig
Date: Thu Aug 27 03:06:55 2009
New Revision: 808265

URL: http://svn.apache.org/viewvc?rev=808265&view=rev
Log:
port keepCompression from <zip>

Modified:
    
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/resources/ZipResource.java
    
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
    
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Zip.java

Modified: 
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/resources/ZipResource.java
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/resources/ZipResource.java?rev=808265&r1=808264&r2=808265&view=diff
==============================================================================
--- 
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/resources/ZipResource.java
 (original)
+++ 
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/resources/ZipResource.java
 Thu Aug 27 03:06:55 2009
@@ -41,6 +41,7 @@
 public final class ZipResource extends CommonsCompressArchiveResource {
 
     private ZipExtraField[] extras;
+    private int method;
 
     /**
      * Default constructor.
@@ -153,6 +154,13 @@
     }
 
     /**
+     * The compression method that has been used.
+     */
+    public int getMethod() {
+        return method;
+    }
+
+    /**
      * fetches information from the named entry inside the archive.
      */
     protected void fetchEntry() {
@@ -177,7 +185,9 @@
     protected void setEntry(ArchiveEntry e) {
         super.setEntry(e);
         if (e != null) {
-            extras = ((ZipArchiveEntry) e).getExtraFields();
+            ZipArchiveEntry ze = (ZipArchiveEntry) e;
+            extras = ze.getExtraFields();
+            method = ze.getMethod();
         }
     }
 

Modified: 
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java?rev=808265&r1=808264&r2=808265&view=diff
==============================================================================
--- 
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
 (original)
+++ 
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
 Thu Aug 27 03:06:55 2009
@@ -373,7 +373,8 @@
                                              tr.getGroup());
                 } else if (r instanceof ZipResource) {
                     ZipResource zr = (ZipResource) r;
-                    return new ResourceFlags(zr.getMode(), 
zr.getExtraFields());
+                    return new ResourceFlags(zr.getMode(), zr.getExtraFields(),
+                                             zr.getMethod());
                 } else {
                     CommonsCompressArchiveResource cr =
                         (CommonsCompressArchiveResource) r;
@@ -414,7 +415,7 @@
                     }
                 }
 
-                return new ResourceFlags(zr.getMode(), ex);
+                return new ResourceFlags(zr.getMode(), ex, zr.getMethod());
             } else {
                 ArchiveResource ar = (ArchiveResource) r;
                 return new ResourceFlags(ar.getMode());
@@ -648,32 +649,36 @@
         private final ZipExtraField[] extraFields;
         private final String userName;
         private final String groupName;
+        private final int compressionMethod;
 
         public ResourceFlags() {
             this(-1);
         }
 
         public ResourceFlags(int mode) {
-            this(mode, new ZipExtraField[0]);
+            this(mode, new ZipExtraField[0], -1);
         }
 
-        public ResourceFlags(int mode, ZipExtraField[] extraFields) {
+        public ResourceFlags(int mode, ZipExtraField[] extraFields,
+                             int compressionMethod) {
             this(mode, extraFields, EntryHelper.UNKNOWN_ID,
-                 EntryHelper.UNKNOWN_ID, null, null);
+                 EntryHelper.UNKNOWN_ID, null, null,
+                 compressionMethod);
         }
 
         public ResourceFlags(int mode, int uid, int gid) {
-            this(mode, new ZipExtraField[0], uid, gid, null, null);
+            this(mode, new ZipExtraField[0], uid, gid, null, null, -1);
         }
 
         public ResourceFlags(int mode, int uid, int gid, String userName,
                              String groupName) {
-            this(mode, new ZipExtraField[0], uid, gid, userName, groupName);
+            this(mode, new ZipExtraField[0], uid, gid, userName, groupName, 
-1);
         }
 
         private ResourceFlags(int mode, ZipExtraField[] extraFields,
                               int uid, int gid,
-                              String userName, String groupName) {
+                              String userName, String groupName,
+                              int compressionMethod) {
             this.mode = mode;
             this.extraFields = extraFields;
             this.gid = gid;
@@ -682,6 +687,7 @@
             this.groupName = groupName;
             int m = mode & UnixStat.PERM_MASK;
             modeSet = mode >= 0 && (m > 0 || (m == 0 && preserve0permissions));
+            this.compressionMethod = compressionMethod;
         }
 
         public boolean hasModeBeenSet() { return modeSet; }
@@ -704,6 +710,9 @@
 
         public boolean hasGroupNameBeenSet() { return groupName != null; }
         public String getGroupName() { return groupName; }
+
+        public boolean hasCompressionMethod() { return compressionMethod >= 0; 
}
+        public int getCompressionMethod() { return compressionMethod; }
     }
 
     /**

Modified: 
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Zip.java
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Zip.java?rev=808265&r1=808264&r2=808265&view=diff
==============================================================================
--- 
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Zip.java
 (original)
+++ 
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/Zip.java
 Thu Aug 27 03:06:55 2009
@@ -35,6 +35,7 @@
 public class Zip extends ArchiveBase {
     private int level = Deflater.DEFAULT_COMPRESSION;
     private String comment = "";
+    private boolean keepCompression = false;
 
     public Zip() {
         setFactory(new ZipStreamFactory() {
@@ -75,6 +76,12 @@
                                            .getZipExtraFields());
                     }
  
+                    if (keepCompression
+                        && r.getResourceFlags().hasCompressionMethod()) {
+                        ent.setMethod(r.getResourceFlags()
+                                      .getCompressionMethod());
+                    }
+
                     return ent;
                 }
             });
@@ -97,4 +104,14 @@
     public void setComment(String comment) {
         this.comment = comment;
     }
+
+    /**
+     * Whether the original compression of entries coming from a ZIP
+     * archive should be kept (for example when updating an archive).
+     * Default is false.
+     * @param keep if true, keep the original compression
+     */
+    public void setKeepCompression(boolean keep) {
+        keepCompression = keep;
+    }
 }
\ No newline at end of file


Reply via email to