From b14e61f604f088f5522e8caa9c396da71e7b775e Mon Sep 17 00:00:00 2001 From: Antoine Levy-Lambert Date: Mon, 13 Oct 2003 19:53:01 +0000 Subject: [PATCH] Merge from ANT_16_BRANCH git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275463 13f79535-47bb-0310-9956-ffa450edef68 --- .../testcases/taskdefs/optional/net/ftp.xml | 23 ++++++++ .../tools/ant/taskdefs/optional/net/FTP.java | 52 ++++++++++--------- .../ant/taskdefs/optional/net/FTPTest.java | 7 ++- 3 files changed, 57 insertions(+), 25 deletions(-) diff --git a/src/etc/testcases/taskdefs/optional/net/ftp.xml b/src/etc/testcases/taskdefs/optional/net/ftp.xml index e9c7e59b4..9219db1f0 100644 --- a/src/etc/testcases/taskdefs/optional/net/ftp.xml +++ b/src/etc/testcases/taskdefs/optional/net/ftp.xml @@ -77,4 +77,27 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java b/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java index a78fecf72..9f9ef7f30 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java @@ -1357,30 +1357,34 @@ public class FTP } bw = new BufferedWriter(new FileWriter(listing)); } - - for (int i = 0; i < dsfiles.length; i++) { - switch (action) { - case SEND_FILES: - sendFile(ftp, dir, dsfiles[i]); - break; - case GET_FILES: - getFile(ftp, dir, dsfiles[i]); - break; - case DEL_FILES: - delFile(ftp, dsfiles[i]); - break; - case LIST_FILES: - listFile(ftp, bw, dsfiles[i]); - break; - case CHMOD: - doSiteCommand(ftp, "chmod " + chmod + " " + resolveFile(dsfiles[i])); - transferred++; - break; - case RM_DIR: - rmDir(ftp, dsfiles[i]); - break; - default: - throw new BuildException("unknown ftp action " + action); + if (action == RM_DIR) { + // to remove directories, start by the end of the list + // the trunk does not let itself be removed before the leaves + for (int i = dsfiles.length - 1; i >= 0; i--) { + rmDir(ftp, dsfiles[i]); + } + } else { + for (int i = 0; i < dsfiles.length; i++) { + switch (action) { + case SEND_FILES: + sendFile(ftp, dir, dsfiles[i]); + break; + case GET_FILES: + getFile(ftp, dir, dsfiles[i]); + break; + case DEL_FILES: + delFile(ftp, dsfiles[i]); + break; + case LIST_FILES: + listFile(ftp, bw, dsfiles[i]); + break; + case CHMOD: + doSiteCommand(ftp, "chmod " + chmod + " " + resolveFile(dsfiles[i])); + transferred++; + break; + default: + throw new BuildException("unknown ftp action " + action); + } } } } finally { diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java index be9539436..6dd7509a0 100644 --- a/src/testcases/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java @@ -570,7 +570,12 @@ public class FTPTest extends BuildFileTest{ new String[] {"alpha/beta", "alpha/beta/gamma", "delta"}); } - + /** + * this test is inspired by a user reporting that deletions of directories with the ftp task do not work + */ + public void testFTPDelete() { + getProject().executeTarget("ftp-delete"); + } private void compareFiles(DirectoryScanner ds, String[] expectedFiles, String[] expectedDirectories) { String includedFiles[] = ds.getIncludedFiles();