You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2009/11/05 05:38:17 UTC
svn commit: r832990 - in /ant/core/trunk/src:
main/org/apache/tools/ant/helper/ProjectHelper2.java
main/org/apache/tools/ant/taskdefs/ImportTask.java
tests/antunit/taskdefs/import-test.xml
tests/antunit/taskdefs/include-test.xml
Author: bodewig
Date: Thu Nov 5 04:38:16 2009
New Revision: 832990
URL: http://svn.apache.org/viewvc?rev=832990&view=rev
Log:
allow import of FileProvider or URLProvider resources
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ImportTask.java
ant/core/trunk/src/tests/antunit/taskdefs/import-test.xml
ant/core/trunk/src/tests/antunit/taskdefs/include-test.xml
Modified: ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java?rev=832990&r1=832989&r2=832990&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java Thu Nov 5 04:38:16 2009
@@ -28,6 +28,7 @@
import org.apache.tools.ant.Task;
import org.apache.tools.ant.UnknownElement;
import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.resources.FileProvider;
import org.apache.tools.ant.types.resources.URLProvider;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.JAXPUtils;
@@ -197,14 +198,27 @@
if (source instanceof File) {
buildFile = (File) source;
+ } else if (source instanceof URL) {
+ url = (URL) source;
+ } else if (source instanceof Resource) {
+ FileProvider fp =
+ (FileProvider) ((Resource) source).as(FileProvider.class);
+ if (fp != null) {
+ buildFile = fp.getFile();
+ } else {
+ URLProvider up =
+ (URLProvider) ((Resource) source).as(URLProvider.class);
+ if (up != null) {
+ url = up.getURL();
+ }
+ }
+ }
+ if (buildFile != null) {
buildFile = FILE_UTILS.normalize(buildFile.getAbsolutePath());
context.setBuildFile(buildFile);
buildFileName = buildFile.toString();
-// } else if (source instanceof InputStream ) {
- } else if (source instanceof URL) {
- url = (URL) source;
+ } else if (url != null) {
buildFileName = url.toString();
-// } else if (source instanceof InputSource ) {
} else {
throw new BuildException("Source " + source.getClass().getName()
+ " not supported by this plugin");
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=832990&r1=832989&r2=832990&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 Thu Nov 5 04:38:16 2009
@@ -22,6 +22,8 @@
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.resources.FileResource;
import org.apache.tools.ant.util.FileUtils;
import java.io.File;
@@ -57,6 +59,7 @@
private boolean optional;
private String targetPrefix;
private String prefixSeparator = ".";
+ private Resource resource = null;
private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
/**
@@ -99,9 +102,19 @@
prefixSeparator = s;
}
+ /**
+ * The resource to import.
+ *
+ * @since Ant 1.8.0
+ */
+ public void add(Resource r) {
+ resource = r;
+ }
+
public void execute() {
- if (file == null) {
- throw new BuildException("import requires file attribute");
+ if (file == null && resource == null) {
+ throw new BuildException("import requires file attribute or"
+ + " nested resource");
}
if (getOwningTarget() == null
|| !"".equals(getOwningTarget().getName())) {
@@ -129,21 +142,27 @@
throw new BuildException("Unable to get location of import task");
}
+ Resource importedResource = resource;
+ File importedFile = null;
+ if (resource == null) {
+
File buildFile = new File(getLocation().getFileName()).getAbsoluteFile();
// Paths are relative to the build file they're imported from,
// *not* the current directory (same as entity includes).
File buildFileParent = new File(buildFile.getParent());
- File importedFile = FILE_UTILS.resolveFile(buildFileParent, file);
+ importedFile = FILE_UTILS.resolveFile(buildFileParent, file);
+ importedResource = new FileResource(importedFile);
+ }
- getProject().log("Importing file " + importedFile + " from "
- + buildFile.getAbsolutePath(), Project.MSG_VERBOSE);
+ getProject().log("Importing file " + importedResource + " from "
+ + getLocation().getFileName(), Project.MSG_VERBOSE);
- if (!importedFile.exists()) {
+ if (!importedResource.isExists()) {
String message =
- "Cannot find " + file + " imported from "
- + buildFile.getAbsolutePath();
+ "Cannot find " + importedResource + " imported from "
+ + getLocation().getFileName();
if (optional) {
getProject().log(message, Project.MSG_VERBOSE);
return;
@@ -152,10 +171,14 @@
}
}
- if (!isInIncludeMode() && importStack.contains(importedFile)) {
+ if (!isInIncludeMode() &&
+ (importStack.contains(importedResource)
+ || (importedFile != null && importStack.contains(importedFile))
+ )
+ ) {
getProject().log(
"Skipped already imported file:\n "
- + importedFile + "\n", Project.MSG_VERBOSE);
+ + importedResource + "\n", Project.MSG_VERBOSE);
return;
}
@@ -173,7 +196,7 @@
setProjectHelperProps(prefix, prefixSeparator,
isInIncludeMode());
- helper.parse(getProject(), importedFile);
+ helper.parse(getProject(), importedResource);
} catch (BuildException ex) {
throw ProjectHelper.addLocationToBuildException(
ex, getLocation());
Modified: ant/core/trunk/src/tests/antunit/taskdefs/import-test.xml
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/taskdefs/import-test.xml?rev=832990&r1=832989&r2=832990&view=diff
==============================================================================
--- ant/core/trunk/src/tests/antunit/taskdefs/import-test.xml (original)
+++ ant/core/trunk/src/tests/antunit/taskdefs/import-test.xml Thu Nov 5 04:38:16 2009
@@ -18,7 +18,9 @@
<project default="antunit" xmlns:au="antlib:org.apache.ant.antunit">
<import file="../antunit-base.xml" />
- <import file="importtests/a.xml"/>
+ <import>
+ <file file="importtests/a.xml"/>
+ </import>
<import file="importtests/b.xml" as="c"/>
<target name="testNoExplicitPrefix" depends="a.a">
@@ -37,7 +39,11 @@
<au:assertEquals expected="baz" actual="${foo}"/>
</target>
- <import file="importtests/override.xml"/>
+ <import>
+ <javaresource name="override.xml">
+ <classpath location="importtests"/>
+ </javaresource>
+ </import>
<target name="setProperty">
<property name="prop" value="in including/importing"/>
Modified: ant/core/trunk/src/tests/antunit/taskdefs/include-test.xml
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/taskdefs/include-test.xml?rev=832990&r1=832989&r2=832990&view=diff
==============================================================================
--- ant/core/trunk/src/tests/antunit/taskdefs/include-test.xml (original)
+++ ant/core/trunk/src/tests/antunit/taskdefs/include-test.xml Thu Nov 5 04:38:16 2009
@@ -18,7 +18,9 @@
<project default="antunit" xmlns:au="antlib:org.apache.ant.antunit">
<import file="../antunit-base.xml" />
- <include file="importtests/a.xml"/>
+ <include>
+ <file file="importtests/a.xml"/>
+ </include>
<include file="importtests/b.xml" as="c"/>
<target name="testNoExplicitPrefix" depends="a.a">
@@ -39,7 +41,11 @@
<au:assertEquals expected="in included/imported" actual="${prop}"/>
</target>
- <include file="importtests/nested.xml" as="nested"/>
+ <include as="nested">
+ <javaresource name="nested.xml">
+ <classpath location="importtests"/>
+ </javaresource>
+ </include>
<!-- really only tests that the targets have the expected names by
forcing an exception if the dependencies don't exist -->