Author: gscokart Date: Fri Mar 7 05:41:13 2008 New Revision: 634670 URL: http://svn.apache.org/viewvc?rev=634670&view=rev Log: IVY-759 : cachefileset doesn't support directory name starting with the same characters
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyCacheFileset.java ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyCacheFilesetTest.java Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyCacheFileset.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyCacheFileset.java?rev=634670&r1=634669&r2=634670&view=diff ============================================================================== --- ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyCacheFileset.java (original) +++ ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyCacheFileset.java Fri Mar 7 05:41:13 2008 @@ -19,6 +19,7 @@ import java.io.File; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import org.apache.ivy.core.report.ArtifactDownloadReport; @@ -110,22 +111,35 @@ * the file for which the new base directory should be returned. * @return the common base directory between a current base directory and a given file. */ - private File getBaseDir(File base, File file) { + File getBaseDir(File base, File file) { if (base == null) { - return file.getParentFile(); + return file.getParentFile().getAbsoluteFile(); } else { - String basePath = base.getAbsolutePath(); - String filePath = file.getAbsolutePath(); - for (int i = 0; i < basePath.length(); i++) { - if (i >= filePath.length()) { - return file.getParentFile(); - } - if (basePath.charAt(i) != filePath.charAt(i)) { - return new File(basePath.substring(0, i)); + Iterator bases = getParents(base).iterator(); + Iterator fileParents = getParents(file.getAbsoluteFile()).iterator(); + File result = null; + while (bases.hasNext() && fileParents.hasNext()) { + File next = (File) bases.next(); + if (next.equals(fileParents.next())) { + result = next; + } else { + break; } } - return base; + return result; + } + } + + /** + * @return a list of files, starting with the root and ending with the file itself + */ + private LinkedList/*<File>*/ getParents(File file) { + LinkedList r = new LinkedList(); + while (file != null) { + r.addFirst(file); + file = file.getParentFile(); } + return r; } } Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyCacheFilesetTest.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyCacheFilesetTest.java?rev=634670&r1=634669&r2=634670&view=diff ============================================================================== --- ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyCacheFilesetTest.java (original) +++ ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyCacheFilesetTest.java Fri Mar 7 05:41:13 2008 @@ -162,4 +162,16 @@ } } + + public void testGetBaseDir() { + File base = null; + base = fileset.getBaseDir(base, new File("x/aa/b/c")); + assertEquals(new File("x/aa/b").getAbsoluteFile(), base); + + base = fileset.getBaseDir(base, new File("x/aa/b/d/e")); + assertEquals(new File("x/aa/b").getAbsoluteFile(), base); + + base = fileset.getBaseDir(base, new File("x/ab/b/d")); + assertEquals(new File("x").getAbsoluteFile(), base); + } }