Author: bodewig Date: Tue Aug 25 08:11:44 2009 New Revision: 807514 URL: http://svn.apache.org/viewvc?rev=807514&view=rev Log: The tar Ant task has a usecase where absolute paths inside archives are required - allow creation of such entries
Modified: commons/proper/compress/trunk/src/changes/changes.xml commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java (contents, props changed) Modified: commons/proper/compress/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/changes/changes.xml?rev=807514&r1=807513&r2=807514&view=diff ============================================================================== --- commons/proper/compress/trunk/src/changes/changes.xml (original) +++ commons/proper/compress/trunk/src/changes/changes.xml Tue Aug 25 08:11:44 2009 @@ -23,6 +23,11 @@ </properties> <body> <release version="1.1" date="as in SVN" description="Release 1.1"> + <action type="add" date="2009-08-25"> + A new constructor of TarArchiveEntry can create entries with + names that start with slashes - the default is to strip + leading slashes in order to create relative path names. + </action> <action issue="COMPRESS-83" type="fix" date="2009-08-01"> Delegate all read and write methods in GZip stream in order to speed up operations. Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java?rev=807514&r1=807513&r2=807514&view=diff ============================================================================== --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java (original) +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java Tue Aug 25 08:11:44 2009 @@ -167,9 +167,21 @@ * @param name the entry name */ public TarArchiveEntry(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 TarArchiveEntry(String name, boolean preserveLeadingSlashes) { this(); - name = normalizeFileName(name); + name = normalizeFileName(name, preserveLeadingSlashes); boolean isDir = name.endsWith("/"); this.devMajor = 0; @@ -208,7 +220,7 @@ * @param file The file that the entry represents. */ public TarArchiveEntry(File file) { - this(file, normalizeFileName(file.getPath())); + this(file, normalizeFileName(file.getPath(), false)); } /** @@ -320,7 +332,7 @@ * @param name This entry's new name. */ public void setName(String name) { - this.name = normalizeFileName(name); + this.name = normalizeFileName(name, false); } /** @@ -642,7 +654,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) { @@ -674,7 +687,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; Propchange: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java ------------------------------------------------------------------------------ --- svn:mergeinfo (added) +++ svn:mergeinfo Tue Aug 25 08:11:44 2009 @@ -0,0 +1,2 @@ +/ant/core/trunk/src/main/org/apache/tools/tar/TarArchiveEntry.java:741089 +/ant/core/trunk/src/main/org/apache/tools/tar/TarEntry.java:807513