diff --git a/src/main/org/apache/tools/ant/taskdefs/Sync.java b/src/main/org/apache/tools/ant/taskdefs/Sync.java index fea357e12..064f148c6 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Sync.java +++ b/src/main/org/apache/tools/ant/taskdefs/Sync.java @@ -275,13 +275,12 @@ public class Sync extends Task { private int removeEmptyDirectories(File dir, boolean removeIfEmpty, Set preservedEmptyDirectories) { int removedCount = 0; - if (!preservedEmptyDirectories.contains(dir) && dir.isDirectory()) { + if (dir.isDirectory()) { File[] children = dir.listFiles(); for (int i = 0; i < children.length; ++i) { File file = children[i]; // Test here again to avoid method call for non-directories! - if (!preservedEmptyDirectories.contains(file) - && file.isDirectory()) { + if (file.isDirectory()) { removedCount += removeEmptyDirectories(file, true, preservedEmptyDirectories); @@ -292,7 +291,8 @@ public class Sync extends Task { // We need to re-query its children list! children = dir.listFiles(); } - if (children.length < 1 && removeIfEmpty) { + if (children.length < 1 && removeIfEmpty + && !preservedEmptyDirectories.contains(dir)) { log("Removing empty directory: " + dir, Project.MSG_DEBUG); dir.delete(); ++removedCount; diff --git a/src/tests/antunit/taskdefs/sync-test.xml b/src/tests/antunit/taskdefs/sync-test.xml index 4a708ba0d..1dbdbe5f2 100644 --- a/src/tests/antunit/taskdefs/sync-test.xml +++ b/src/tests/antunit/taskdefs/sync-test.xml @@ -57,7 +57,7 @@ - + @@ -117,4 +117,20 @@ + + + + + + + + + + + + + + + +