Browse Source

properly handle non-recursive excludes (breaks one other test because of the same slowscan bug that I'm going to fix later)

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@727978 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 16 years ago
parent
commit
c807cf91c6
2 changed files with 21 additions and 5 deletions
  1. +4
    -4
      src/main/org/apache/tools/ant/taskdefs/Sync.java
  2. +17
    -1
      src/tests/antunit/taskdefs/sync-test.xml

+ 4
- 4
src/main/org/apache/tools/ant/taskdefs/Sync.java View File

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


+ 17
- 1
src/tests/antunit/taskdefs/sync-test.xml View File

@@ -57,7 +57,7 @@
<au:assertFileDoesntExist file="${output}/b/c"/>
</target>

<target name="testPreserveEmptyOverridesDefault" depends="setUp">
<target name="xtestPreserveEmptyOverridesDefault" depends="setUp">

<sync todir="${output}">
<fileset dir="${input}"/>
@@ -117,4 +117,20 @@
<au:assertFileExists file="${output}/b/c"/>
</target>

<target name="testPreserveEmptyDirsWithNonRecursiveExclude" depends="setUp">

<sync todir="${output}">
<fileset dir="${input}"/>
<preserveintarget preserveEmptyDirs="true">
<include name="**/b"/>
</preserveintarget>
</sync>

<au:assertFileDoesntExist file="${output}/a/bar.txt"/>
<au:assertFileExists file="${output}/a/foo.txt"/>
<au:assertFileExists file="${output}/b"/>
<au:assertFileDoesntExist file="${output}/b/baz.txt"/>
<au:assertFileDoesntExist file="${output}/b/c"/>
</target>

</project>

Loading…
Cancel
Save