Author: bodewig
Date: Tue Aug 25 08:04:14 2009
New Revision: 807513
URL: http://svn.apache.org/viewvc?rev=807513&view=rev
Log:
Make preserveLeadingSlashes in tar work again, was broken by revision 755231
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Tar.java
ant/core/trunk/src/main/org/apache/tools/tar/TarEntry.java
ant/core/trunk/src/tests/antunit/taskdefs/tar-test.xml
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Tar.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Tar.java?rev=807513&r1=807512&r2=807513&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Tar.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Tar.java Tue Aug 25
08:04:14 2009
@@ -361,6 +361,8 @@
return;
}
+ boolean preserveLeadingSlashes = false;
+
if (tarFileSet != null) {
String fullpath = tarFileSet.getFullpath(this.getProject());
if (fullpath.length() > 0) {
@@ -379,8 +381,9 @@
vPath = prefix + vPath;
}
- if (vPath.startsWith("/")
- && !tarFileSet.getPreserveLeadingSlashes()) {
+ preserveLeadingSlashes = tarFileSet.getPreserveLeadingSlashes();
+
+ if (vPath.startsWith("/") && !preserveLeadingSlashes) {
int l = vPath.length();
if (l <= 1) {
// we would end up adding "" to the archive
@@ -415,7 +418,7 @@
}
}
- TarEntry te = new TarEntry(vPath);
+ TarEntry te = new TarEntry(vPath, preserveLeadingSlashes);
te.setModTime(r.getLastModified());
// preserve permissions
if (r instanceof ArchiveResource) {
Modified: ant/core/trunk/src/main/org/apache/tools/tar/TarEntry.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/tar/TarEntry.java?rev=807513&r1=807512&r2=807513&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/tar/TarEntry.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/tar/TarEntry.java Tue Aug 25
08:04:14 2009
@@ -159,9 +159,21 @@
* @param name the entry name
*/
public TarEntry(String name) {
+ this(name, false);
+ }
+
+ /**
+ * Construct an entry with only a name. This allows the programmer
+ * to construct the entry's header "by hand". File is set to null.
+ *
+ * @param name the entry name
+ * @param preserveLeadingSlashes whether to allow leading slashes
+ * in the name.
+ */
+ public TarEntry(String name, boolean preserveLeadingSlashes) {
this();
- name = normalizeFileName(name);
+ name = normalizeFileName(name, preserveLeadingSlashes);
boolean isDir = name.endsWith("/");
this.devMajor = 0;
@@ -203,7 +215,7 @@
this.file = file;
- String fileName = normalizeFileName(file.getPath());
+ String fileName = normalizeFileName(file.getPath(), false);
this.linkName = new StringBuffer("");
this.name = new StringBuffer(fileName);
@@ -299,7 +311,7 @@
* @param name This entry's new name.
*/
public void setName(String name) {
- this.name = new StringBuffer(normalizeFileName(name));
+ this.name = new StringBuffer(normalizeFileName(name, false));
}
/**
@@ -608,7 +620,8 @@
* Strips Windows' drive letter as well as any leading slashes,
* turns path separators into forward slahes.
*/
- private static String normalizeFileName(String fileName) {
+ private static String normalizeFileName(String fileName,
+ boolean preserveLeadingSlashes) {
String osname = System.getProperty("os.name").toLowerCase(Locale.US);
if (osname != null) {
@@ -640,7 +653,7 @@
// No absolute pathnames
// Windows (and Posix?) paths can start with "\\NetworkDrive\",
// so we loop on starting /'s.
- while (fileName.startsWith("/")) {
+ while (!preserveLeadingSlashes && fileName.startsWith("/")) {
fileName = fileName.substring(1);
}
return fileName;
Modified: ant/core/trunk/src/tests/antunit/taskdefs/tar-test.xml
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/taskdefs/tar-test.xml?rev=807513&r1=807512&r2=807513&view=diff
==============================================================================
--- ant/core/trunk/src/tests/antunit/taskdefs/tar-test.xml (original)
+++ ant/core/trunk/src/tests/antunit/taskdefs/tar-test.xml Tue Aug 25 08:04:14
2009
@@ -17,6 +17,7 @@
-->
<project name="tar-test" default="antunit"
+ xmlns:cond="antlib:org.apache.tools.ant.types.conditions"
xmlns:au="antlib:org.apache.ant.antunit">
<import file="../antunit-base.xml" />
@@ -30,4 +31,45 @@
<tarfileset prefix="pre" refid="xml.fileset" />
</tar>
</target>
+
+ <target name="testRemoveLeadingSlashes" depends="setUp">
+ <tar destfile="${output}/testtar.tar">
+ <tarfileset file="${ant.file}" fullpath="/foo.xml"/>
+ </tar>
+ <au:assertTrue>
+ <cond:resourceexists>
+ <tarentry name="foo.xml">
+ <file file="${output}/testtar.tar"/>
+ </tarentry>
+ </cond:resourceexists>
+ </au:assertTrue>
+ <au:assertFalse>
+ <cond:resourceexists>
+ <tarentry name="/foo.xml">
+ <file file="${output}/testtar.tar"/>
+ </tarentry>
+ </cond:resourceexists>
+ </au:assertFalse>
+ </target>
+
+ <target name="testPreserveLeadingSlashes" depends="setUp">
+ <tar destfile="${output}/testtar.tar">
+ <tarfileset file="${ant.file}" fullpath="/foo.xml"
+ preserveleadingslashes="true"/>
+ </tar>
+ <au:assertTrue>
+ <cond:resourceexists>
+ <tarentry name="/foo.xml">
+ <file file="${output}/testtar.tar"/>
+ </tarentry>
+ </cond:resourceexists>
+ </au:assertTrue>
+ <au:assertFalse>
+ <cond:resourceexists>
+ <tarentry name="foo.xml">
+ <file file="${output}/testtar.tar"/>
+ </tarentry>
+ </cond:resourceexists>
+ </au:assertFalse>
+ </target>
</project>