Author: bodewig
Date: Tue Dec 31 11:04:49 2013
New Revision: 1554400
URL: http://svn.apache.org/r1554400
Log:
put some more effort into detecting duplicate imports. PR 55097
Modified:
ant/core/trunk/WHATSNEW
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ImportTask.java
Modified: ant/core/trunk/WHATSNEW
URL:
http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?rev=1554400&r1=1554399&r2=1554400&view=diff
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Tue Dec 31 11:04:49 2013
@@ -8,10 +8,14 @@ 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
+ * <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
+
+ * <import> could import the same resource twice when imported via
+ different resource types.
+ Bugzilla Report 55097
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=1554400&r1=1554399&r2=1554400&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 11:04:49 2013
@@ -27,6 +27,7 @@ import org.apache.tools.ant.types.Resour
import org.apache.tools.ant.types.ResourceCollection;
import org.apache.tools.ant.types.resources.FileProvider;
import org.apache.tools.ant.types.resources.FileResource;
+import org.apache.tools.ant.types.resources.URLProvider;
import org.apache.tools.ant.types.resources.URLResource;
import org.apache.tools.ant.types.resources.Union;
import org.apache.tools.ant.util.FileUtils;
@@ -182,17 +183,8 @@ public class ImportTask extends Task {
}
}
- File importedFile = null;
- FileProvider fp = importedResource.as(FileProvider.class);
- if (fp != null) {
- importedFile = fp.getFile();
- }
-
if (!isInIncludeMode() &&
- (importStack.contains(importedResource)
- || (importedFile != null && importStack.contains(importedFile))
- )
- ) {
+ hasAlreadyBeenImported(importedResource, importStack)) {
getProject().log(
"Skipped already imported file:\n "
+ importedResource + "\n", Project.MSG_VERBOSE);
@@ -280,6 +272,49 @@ public class ImportTask extends Task {
return f.isAbsolute() && f.exists();
}
+ private boolean hasAlreadyBeenImported(Resource importedResource,
+ Vector<Object> importStack) {
+ File importedFile = null;
+ FileProvider fp = importedResource.as(FileProvider.class);
+ if (fp != null) {
+ importedFile = fp.getFile();
+ }
+ URL importedURL = null;
+ URLProvider up = importedResource.as(URLProvider.class);
+ if (up != null) {
+ importedURL = up.getURL();
+ }
+ for (Object o : importStack) {
+ if (isOneOf(o, importedResource, importedFile, importedURL)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean isOneOf(Object o, Resource importedResource,
+ File importedFile, URL importedURL) {
+ if (o.equals(importedResource) || o.equals(importedFile)
+ || o.equals(importedURL)) {
+ return true;
+ }
+ if (o instanceof Resource) {
+ if (importedFile != null) {
+ FileProvider fp = ((Resource) o).as(FileProvider.class);
+ if (fp != null && fp.getFile().equals(importedFile)) {
+ return true;
+ }
+ }
+ if (importedURL != null) {
+ URLProvider up = ((Resource) o).as(URLProvider.class);
+ if (up != null && up.getURL().equals(importedURL)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
/**
* Whether the task is in include (as opposed to import) mode.
*