diff --git a/src/etc/testcases/taskdefs/import/symlinks/d1/p1.xml b/src/etc/testcases/taskdefs/import/symlinks/d1/p1.xml new file mode 100644 index 000000000..c6378a8d5 --- /dev/null +++ b/src/etc/testcases/taskdefs/import/symlinks/d1/p1.xml @@ -0,0 +1,4 @@ + + + + diff --git a/src/etc/testcases/taskdefs/import/symlinks/d2/p2.xml b/src/etc/testcases/taskdefs/import/symlinks/d2/p2.xml new file mode 100644 index 000000000..b434ee832 --- /dev/null +++ b/src/etc/testcases/taskdefs/import/symlinks/d2/p2.xml @@ -0,0 +1 @@ + diff --git a/src/etc/testcases/taskdefs/import/symlinks/d3a/p3.xml b/src/etc/testcases/taskdefs/import/symlinks/d3a/p3.xml new file mode 100644 index 000000000..3080451b4 --- /dev/null +++ b/src/etc/testcases/taskdefs/import/symlinks/d3a/p3.xml @@ -0,0 +1 @@ + diff --git a/src/main/org/apache/tools/ant/taskdefs/ImportTask.java b/src/main/org/apache/tools/ant/taskdefs/ImportTask.java index 4ef227785..99b9e65e9 100644 --- a/src/main/org/apache/tools/ant/taskdefs/ImportTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/ImportTask.java @@ -131,8 +131,6 @@ public class ImportTask extends Task { } } - importedFile = new File(getPath(importedFile)); - if (importStack.contains(importedFile)) { getProject().log( "Skipped already imported file:\n " @@ -148,11 +146,4 @@ public class ImportTask extends Task { } } - private static String getPath(File file) { - try { - return file.getCanonicalPath(); - } catch (IOException e) { - return file.getAbsolutePath(); - } - } } diff --git a/src/testcases/org/apache/tools/ant/taskdefs/ImportTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ImportTest.java index 128f2cd54..946aa539c 100644 --- a/src/testcases/org/apache/tools/ant/taskdefs/ImportTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/ImportTest.java @@ -17,6 +17,9 @@ package org.apache.tools.ant.taskdefs; +import java.io.File; +import java.io.IOException; + import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildFileTest; import org.apache.tools.ant.Location; @@ -109,5 +112,34 @@ public class ImportTest extends BuildFileTest { "Did not see build exception", false); } -} + public void testSymlinkedImports() throws Exception { + String ln = "/usr/bin/ln"; + if (!new File(ln).exists()) { + ln = "/bin/ln"; + } + if (!new File(ln).exists()) { + // Running on Windows or something, so skip it. + return; + } + String symlink = "src/etc/testcases/taskdefs/import/symlinks/d3b"; + if (Runtime.getRuntime().exec(new String[] {ln, "-s", "d3a", symlink}).waitFor() != 0) { + throw new IOException("'" + ln + " -s d3a " + symlink + "' failed"); + } + try { + configureProject( + "src/etc/testcases/taskdefs/import/symlinks/d1/p1.xml"); + assertPropertyEquals( + "ant.file.p2", + new File("src/etc/testcases/taskdefs/import/symlinks/d2/p2.xml") + .getAbsolutePath()); + assertPropertyEquals( + "ant.file.p3", + new File("src/etc/testcases/taskdefs/import/symlinks/d3b/p3.xml") + .getAbsolutePath()); + } finally { + new File(symlink).delete(); + } + } + +}