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();
+ }
+ }
+
+}