|
|
@@ -86,6 +86,8 @@ import org.apache.tools.ant.util.FileUtils; |
|
|
|
* <li> <strong>del</strong> - delete files from a remote server.</li> |
|
|
|
* <li> <strong>list</strong> - create a file listing.</li> |
|
|
|
* <li> <strong>chmod</strong> - change unix file permissions.</li> |
|
|
|
* <li> <strong>rmdir</strong> - remove directories, if empty, from a |
|
|
|
* remote server.</li> |
|
|
|
* </ul> |
|
|
|
* <strong>Note:</strong> Some FTP servers - notably the Solaris server - seem |
|
|
|
* to hold data ports open after a "retr" operation, allowing them to timeout |
|
|
@@ -109,6 +111,7 @@ public class FTP |
|
|
|
protected static final int LIST_FILES = 3; |
|
|
|
protected static final int MK_DIR = 4; |
|
|
|
protected static final int CHMOD = 5; |
|
|
|
protected static final int RM_DIR = 6; |
|
|
|
|
|
|
|
private String remotedir; |
|
|
|
private String server; |
|
|
@@ -139,7 +142,8 @@ public class FTP |
|
|
|
"deleting", |
|
|
|
"listing", |
|
|
|
"making directory", |
|
|
|
"chmod" |
|
|
|
"chmod", |
|
|
|
"removing" |
|
|
|
}; |
|
|
|
|
|
|
|
protected static final String[] COMPLETED_ACTION_STRS = { |
|
|
@@ -148,7 +152,18 @@ public class FTP |
|
|
|
"deleted", |
|
|
|
"listed", |
|
|
|
"created directory", |
|
|
|
"mode changed" |
|
|
|
"mode changed", |
|
|
|
"removed" |
|
|
|
}; |
|
|
|
|
|
|
|
protected static final String[] ACTION_TARGET_STRS = { |
|
|
|
"files", |
|
|
|
"files", |
|
|
|
"files", |
|
|
|
"files", |
|
|
|
"directory", |
|
|
|
"files", |
|
|
|
"directories" |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
@@ -212,11 +227,11 @@ public class FTP |
|
|
|
String name = vpath + file.getName(); |
|
|
|
if (isIncluded(name)) { |
|
|
|
if (!isExcluded(name)) { |
|
|
|
dirsIncluded.addElement(name); |
|
|
|
if (fast) { |
|
|
|
scandir(file.getName(), |
|
|
|
name + File.separator, fast); |
|
|
|
} |
|
|
|
dirsIncluded.addElement(name); |
|
|
|
} else { |
|
|
|
dirsExcluded.addElement(name); |
|
|
|
if (fast && couldHoldIncluded(name)) { |
|
|
@@ -486,7 +501,12 @@ public class FTP |
|
|
|
ds.scan(); |
|
|
|
} |
|
|
|
|
|
|
|
String[] dsfiles = ds.getIncludedFiles(); |
|
|
|
String[] dsfiles = null; |
|
|
|
if (action == RM_DIR) { |
|
|
|
dsfiles = ds.getIncludedDirectories(); |
|
|
|
} else { |
|
|
|
dsfiles = ds.getIncludedFiles(); |
|
|
|
} |
|
|
|
String dir = null; |
|
|
|
|
|
|
|
if ((ds.getBasedir() == null) |
|
|
@@ -545,6 +565,12 @@ public class FTP |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
case RM_DIR: |
|
|
|
{ |
|
|
|
rmDir(ftp, dsfiles[i]); |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
default: |
|
|
|
{ |
|
|
|
throw new BuildException("unknown ftp action " + action); |
|
|
@@ -583,10 +609,12 @@ public class FTP |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
log(transferred + " files " + COMPLETED_ACTION_STRS[action]); |
|
|
|
log(transferred + " " + ACTION_TARGET_STRS[action] + " " + |
|
|
|
COMPLETED_ACTION_STRS[action]); |
|
|
|
if (skipped != 0) { |
|
|
|
log(skipped + " files were not successfully " |
|
|
|
+ COMPLETED_ACTION_STRS[action]); |
|
|
|
log(skipped + " " + ACTION_TARGET_STRS[action] + |
|
|
|
" were not successfully " |
|
|
|
+ COMPLETED_ACTION_STRS[action]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -783,6 +811,29 @@ public class FTP |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** Delete a directory, if empty, from the remote host. */ |
|
|
|
protected void rmDir(FTPClient ftp, String dirname) |
|
|
|
throws IOException, BuildException { |
|
|
|
if (verbose) { |
|
|
|
log("removing " + dirname); |
|
|
|
} |
|
|
|
|
|
|
|
if (!ftp.removeDirectory(resolveFile(dirname))) { |
|
|
|
String s = "could not remove directory: " + ftp.getReplyString(); |
|
|
|
|
|
|
|
if (skipFailedTransfers == true) { |
|
|
|
log(s, Project.MSG_WARN); |
|
|
|
skipped++; |
|
|
|
} else { |
|
|
|
throw new BuildException(s); |
|
|
|
} |
|
|
|
} else { |
|
|
|
log("Directory " + dirname + " removed from " + server, |
|
|
|
Project.MSG_VERBOSE); |
|
|
|
transferred++; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Retrieve a single file to the remote host. <code>filename</code> may |
|
|
@@ -991,7 +1042,7 @@ public class FTP |
|
|
|
ftp.getReplyString()); |
|
|
|
} |
|
|
|
} |
|
|
|
log(ACTION_STRS[action] + " files"); |
|
|
|
log(ACTION_STRS[action] + " " + ACTION_TARGET_STRS[action]); |
|
|
|
transferFiles(ftp); |
|
|
|
} |
|
|
|
|
|
|
@@ -1013,13 +1064,14 @@ public class FTP |
|
|
|
|
|
|
|
/** |
|
|
|
* an action to perform, one of |
|
|
|
* "send", "put", "recv", "get", "del", "delete", "list", "mkdir", "chmod" |
|
|
|
* "send", "put", "recv", "get", "del", "delete", "list", "mkdir", "chmod", |
|
|
|
* "rmdir" |
|
|
|
*/ |
|
|
|
public static class Action extends EnumeratedAttribute { |
|
|
|
|
|
|
|
private static final String[] validActions = { |
|
|
|
"send", "put", "recv", "get", "del", "delete", "list", "mkdir", |
|
|
|
"chmod" |
|
|
|
"chmod", "rmdir" |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
@@ -1046,6 +1098,8 @@ public class FTP |
|
|
|
return CHMOD; |
|
|
|
} else if (actionL.equals("mkdir")) { |
|
|
|
return MK_DIR; |
|
|
|
} else if (actionL.equals("rmdir")) { |
|
|
|
return RM_DIR; |
|
|
|
} |
|
|
|
return SEND_FILES; |
|
|
|
} |
|
|
|