make preserveleadingslashes work for tar
git-svn-id: https://svn.apache.org/repos/asf/ant/antlibs/compress/trunk@1195847 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/changes.xml b/changes.xml
index 530aae8..10e6b63 100644
--- a/changes.xml
+++ b/changes.xml
@@ -79,5 +79,9 @@
(like encrypted ZIP entries or sparse files in GNU tar
archives).
</action>
+ <action type="update">
+ The preserveLeadingSlashes attribute of the <tar> task
+ now works as expected.
+ </action>
</release>
</document>
diff --git a/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java b/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
index ac821ab..f520295 100644
--- a/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
+++ b/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
@@ -238,6 +238,15 @@
}
/**
+ * Flag to indicates whether leading `/'s should
+ * be preserved in the file names.
+ * @since Apache Compress Antlib 1.1
+ */
+ public boolean getPreserveLeadingSlashes() {
+ return preserveLeadingSlashes;
+ }
+
+ /**
* Sets behavior for when a duplicate file is about to be added -
* one of <code>add</code>, <code>preserve</code> or <code>fail</code>.
* Possible values are: <code>add</code> (keep both
diff --git a/src/main/org/apache/ant/compress/taskdefs/Tar.java b/src/main/org/apache/ant/compress/taskdefs/Tar.java
index 4230a91..f8d9584 100644
--- a/src/main/org/apache/ant/compress/taskdefs/Tar.java
+++ b/src/main/org/apache/ant/compress/taskdefs/Tar.java
@@ -55,10 +55,14 @@
new ArchiveBase.EntryBuilder() {
public ArchiveEntry buildEntry(ArchiveBase.ResourceWithFlags r) {
boolean isDir = r.getResource().isDirectory();
+ String name = r.getName();
+ if (isDir && !name.endsWith("/")) {
+ name += "/";
+ } else if (!isDir && name.endsWith("/")) {
+ name = name.substring(0, name.length() - 1);
+ }
TarArchiveEntry ent =
- new TarArchiveEntry(r.getName(),
- isDir ? TarConstants.LF_DIR
- : TarConstants.LF_NORMAL);
+ new TarArchiveEntry(name, getPreserveLeadingSlashes());
ent.setModTime(round(r.getResource().getLastModified(),
1000));
ent.setSize(isDir ? 0 : r.getResource().getSize());
diff --git a/src/tests/antunit/tar-test.xml b/src/tests/antunit/tar-test.xml
index bb0f938..bbe1904 100644
--- a/src/tests/antunit/tar-test.xml
+++ b/src/tests/antunit/tar-test.xml
@@ -356,9 +356,7 @@
</assertResourceDoesntExist>
</target>
- <!-- doesn't work because TarEntry strips leading slashes, will be
- fixed for Apache Commons Compress 1.1 -->
- <target name="fail-testPreserveLeadingSlashes" depends="setUp">
+ <target name="testPreserveLeadingSlashes" depends="setUp">
<cmp:tar destfile="${dest}" preserveleadingslashes="true">
<cmp:arfileset src="../resources/asf-logo.gif.ar"
fullpath="/logo.gif"