Author: bodewig
Date: Tue Dec 31 10:06:27 2013
New Revision: 1554392

URL: http://svn.apache.org/r1554392
Log:
import failed to import file specified as absolute path imported from an 
URI/jar - PR 50953

Modified:
    ant/core/trunk/WHATSNEW
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ImportTask.java
    ant/core/trunk/src/tests/antunit/taskdefs/import-url-test.xml

Modified: ant/core/trunk/WHATSNEW
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?rev=1554392&r1=1554391&r2=1554392&view=diff
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Tue Dec 31 10:06:27 2013
@@ -8,6 +8,10 @@ Changes that could break older environme
 Fixed bugs:
 -----------
 
+* <import>/<include> failed when the importing file was loaded from an
+  URI or a jar and it imported a file from the local file system via
+  an absolute path.
+  Bugzilla Report 50953
 
 Other changes:
 --------------

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ImportTask.java
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ImportTask.java?rev=1554392&r1=1554391&r2=1554392&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ImportTask.java 
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ImportTask.java Tue 
Dec 31 10:06:27 2013
@@ -248,6 +248,10 @@ public class ImportTask extends Task {
         // *not* the current directory (same as entity includes).
 
         if (file != null) {
+            if (isExistingAbsoluteFile(file)) {
+                return new FileResource(new File(file));
+            }
+
             File buildFile =
                 new File(getLocation().getFileName()).getAbsoluteFile();
             if (buildFile.exists()) {
@@ -271,6 +275,11 @@ public class ImportTask extends Task {
         return null;
     }
 
+    private boolean isExistingAbsoluteFile(String name) {
+        File f = new File(name);
+        return f.isAbsolute() && f.exists();
+    }
+
     /**
      * Whether the task is in include (as opposed to import) mode.
      *

Modified: ant/core/trunk/src/tests/antunit/taskdefs/import-url-test.xml
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/taskdefs/import-url-test.xml?rev=1554392&r1=1554391&r2=1554392&view=diff
==============================================================================
--- ant/core/trunk/src/tests/antunit/taskdefs/import-url-test.xml (original)
+++ ant/core/trunk/src/tests/antunit/taskdefs/import-url-test.xml Tue Dec 31 
10:06:27 2013
@@ -18,6 +18,7 @@
 <project default="antunit" xmlns:au="antlib:org.apache.ant.antunit">
   <import file="../antunit-base.xml" />
 
+  <mkdir dir="${output}"/>
   <mkdir dir="${input}/a/b"/>
   <mkdir dir="${input}/a/c"/>
   <echo file="${input}/a/b/outer.xml"><![CDATA[
@@ -40,6 +41,18 @@
   <echo file="${input}/a/c/test.properties"><![CDATA[
 foo=bar
 ]]></echo>
+  <echo file="${input}/a/b/external-import.xml"><![CDATA[
+<project name="external-import">
+  <import file="${output}/imported.xml"/>
+</project>
+]]></echo>
+  <echo file="${output}/imported.xml"><![CDATA[
+<project name="imported">
+  <target name="bar">
+    <echo>In imported</echo>
+  </target>
+</project>
+]]></echo>
   <jar destfile="${test.jar}">
     <fileset dir="${input}"/>
   </jar>
@@ -55,6 +68,11 @@ foo=bar
       <classpath location="${test.jar}"/>
     </javaresource>
   </import>
+  <import>
+    <javaresource name="a/b/external-import.xml">
+      <classpath location="${test.jar}"/>
+    </javaresource>
+  </import>
 
   <target name="testImportOfNestedFile" depends="foo">
     <au:assertLogContains text="In inner"/>
@@ -62,6 +80,11 @@ foo=bar
     <au:assertLogContains text="foo is bar"/>
   </target>
 
+  <target name="testImportOfNestedFileWithAbsolutePath" depends="bar"
+          
description="https://issues.apache.org/bugzilla/show_bug.cgi?id=50953";>
+    <au:assertLogContains text="In imported"/>
+  </target>
+
   <target name="tearDown">
     <taskdef name="close"
              classname="org.apache.tools.ant.taskdefs.CloseResources"/>
@@ -73,5 +96,6 @@ foo=bar
     <delete file="${test.jar}" quiet="true" deleteonexit="true"/>
     <!-- Calling antunit-base.tearDown sometimes causes ISEs in <import> in 
Ant-Build-Matrix: -->
     <delete dir="${input}"/>
+    <delete dir="${output}"/>
   </target>
 </project>


Reply via email to