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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+