add flag to keep the compression methods when updating 7z archives or adding files from sevenzfilesets
git-svn-id: https://svn.apache.org/repos/asf/ant/antlibs/compress/trunk@1576191 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/docs/archive.html b/docs/archive.html
index ffcf32e..e4c5bab 100644
--- a/docs/archive.html
+++ b/docs/archive.html
@@ -297,6 +297,15 @@
at all.</td>
<td valign="top" align="center">No, default is LZMA2.</td>
</tr>
+ <tr>
+ <td valign="top">keepcompression</td>
+ <td valign="top">For entries coming from existing archives (like
+ nested <em>sevenzfileset</em>s or while updating the archive), keep
+ the compression as it has been originally instead of using the
+ <em>contentCompression</em> attribute. Defaults to false.
+ <em>since 1.5</em></td>
+ <td align="center" valign="top">No</td>
+ </tr>
</table>
<h3><a name="tar">Tar</a></h3>
@@ -516,7 +525,7 @@
<td valign="top">For entries coming from existing archives (like
nested <em>zipfileset</em>s or while updating the archive), keep
the compression as it has been originally instead of using the
- <em>level</em> attribute. Defaults false.</td>
+ <em>level</em> attribute. Defaults to false.</td>
<td align="center" valign="top">No</td>
</tr>
<tr>
diff --git a/project-template.ivy.xml b/project-template.ivy.xml
index 1e61157..28a94fe 100644
--- a/project-template.ivy.xml
+++ b/project-template.ivy.xml
@@ -52,7 +52,7 @@
</publications>
<dependencies>
<dependency org="org.apache.commons" name="commons-compress"
- rev="1.7"/>
- <dependency org="org.tukaani" name="xz" rev="1.4"/>
+ rev="1.8"/>
+ <dependency org="org.tukaani" name="xz" rev="1.5"/>
</dependencies>
</ivy-module>
diff --git a/project-template.pom b/project-template.pom
index 380ef78..89b0a73 100644
--- a/project-template.pom
+++ b/project-template.pom
@@ -50,12 +50,12 @@
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
- <version>1.7</version>
+ <version>1.8</version>
</dependency>
<dependency>
<groupId>org.tukaani</groupId>
<artifactId>xz</artifactId>
- <version>1.4</version>
+ <version>1.5</version>
</dependency>
</dependencies>
</project>
diff --git a/src/main/org/apache/ant/compress/resources/SevenZResource.java b/src/main/org/apache/ant/compress/resources/SevenZResource.java
index 856a1ec..516d1aa 100644
--- a/src/main/org/apache/ant/compress/resources/SevenZResource.java
+++ b/src/main/org/apache/ant/compress/resources/SevenZResource.java
@@ -40,6 +40,8 @@
*/
public final class SevenZResource extends CommonsCompressArchiveResource {
+ private Iterable/*<? extends SevenZMethodConfiguration>*/ contentMethods;
+
/**
* Default constructor.
*/
@@ -142,6 +144,15 @@
}
/**
+ * Gets the (compression) methods to used for entry's content.
+ *
+ * @since 1.5
+ */
+ public Iterable/*<? extends SevenZMethodConfiguration>*/ getContentMethods() {
+ return contentMethods;
+ }
+
+ /**
* fetches information from the named entry inside the archive.
*/
protected void fetchEntry() {
@@ -177,4 +188,12 @@
}
}
+ protected void setEntry(ArchiveEntry e) {
+ super.setEntry(e);
+ if (e != null) {
+ SevenZArchiveEntry ze = (SevenZArchiveEntry) e;
+ contentMethods = ze.getContentMethods();
+ }
+ }
+
}
diff --git a/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java b/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
index f520295..afb8ea3 100644
--- a/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
+++ b/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
@@ -913,6 +913,8 @@
* Various flags a (archive) resource may hold in addition to
* being a plain resource.
*/
+ // FIXME this isn't really scaling if it wants to be a catch all
+ // for all relevant flags of all formats.
public class ResourceFlags {
private final int mode;
private final boolean modeSet;
@@ -922,6 +924,7 @@
private final String userName;
private final String groupName;
private final int compressionMethod;
+ private Iterable/*<? extends SevenZMethodConfiguration>*/ contentMethods;
public ResourceFlags() {
this(-1);
@@ -935,22 +938,28 @@
int compressionMethod) {
this(mode, extraFields, EntryHelper.UNKNOWN_ID,
EntryHelper.UNKNOWN_ID, null, null,
- compressionMethod);
+ compressionMethod, null);
}
public ResourceFlags(int mode, int uid, int gid) {
- this(mode, new ZipExtraField[0], uid, gid, null, null, -1);
+ this(mode, new ZipExtraField[0], uid, gid, null, null, -1, null);
}
public ResourceFlags(int mode, int uid, int gid, String userName,
String groupName) {
- this(mode, new ZipExtraField[0], uid, gid, userName, groupName, -1);
+ this(mode, new ZipExtraField[0], uid, gid, userName, groupName, -1, null);
+ }
+
+ public ResourceFlags(Iterable/*<? extends SevenZMethodConfiguration>*/ contentMethods) {
+ this(-1, new ZipExtraField[0], EntryHelper.UNKNOWN_ID,
+ EntryHelper.UNKNOWN_ID, null, null, -1, contentMethods);
}
private ResourceFlags(int mode, ZipExtraField[] extraFields,
int uid, int gid,
String userName, String groupName,
- int compressionMethod) {
+ int compressionMethod,
+ Iterable/*<? extends SevenZMethodConfiguration>*/ contentMethods) {
this.mode = mode;
this.extraFields = extraFields;
this.gid = gid;
@@ -960,6 +969,7 @@
int m = mode & UnixStat.PERM_MASK;
modeSet = mode >= 0 && (m > 0 || (m == 0 && preserve0permissions));
this.compressionMethod = compressionMethod;
+ this.contentMethods = contentMethods;
}
public boolean hasModeBeenSet() { return modeSet; }
@@ -985,6 +995,11 @@
public boolean hasCompressionMethod() { return compressionMethod >= 0; }
public int getCompressionMethod() { return compressionMethod; }
+
+ public boolean hasContentMethods() { return contentMethods != null; }
+ public Iterable/*<? extends SevenZMethodConfiguration>*/ getContentMethods() {
+ return contentMethods;
+ }
}
/**
diff --git a/src/main/org/apache/ant/compress/taskdefs/SevenZ.java b/src/main/org/apache/ant/compress/taskdefs/SevenZ.java
index f0b9435..355e6ae 100644
--- a/src/main/org/apache/ant/compress/taskdefs/SevenZ.java
+++ b/src/main/org/apache/ant/compress/taskdefs/SevenZ.java
@@ -38,6 +38,7 @@
*/
public class SevenZ extends ArchiveBase {
+ private boolean keepCompression = false;
private String contentCompression;
public SevenZ() {
@@ -66,6 +67,11 @@
entry.setLastModifiedDate(new Date(r.getResource()
.getLastModified()));
entry.setSize(r.getResource().getSize());
+ if (keepCompression
+ && r.getResourceFlags().hasContentMethods()) {
+ entry.setContentMethods(r.getResourceFlags()
+ .getContentMethods());
+ }
return entry;
}
});
@@ -88,4 +94,15 @@
public void setContentCompression(String method) {
this.contentCompression = method;
}
+
+ /**
+ * Whether the original compression of entries coming from a 7z
+ * archive should be kept (for example when updating an archive).
+ * Default is false.
+ * @param keep if true, keep the original compression
+ * @since 1.5
+ */
+ public void setKeepCompression(boolean keep) {
+ keepCompression = keep;
+ }
}