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