You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@apache.org on 2001/07/04 17:05:21 UTC
cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/net FTP.java
bodewig 01/07/04 08:05:20
Modified: . WHATSNEW
src/main/org/apache/tools/ant/taskdefs/optional/net FTP.java
Log:
properly recurse remote directory in <ftp>
PR: 2285
Submitted by: Jean-Francois.Morneau@ift.ulaval.ca (Jean-Francois Morneau),
Roger Vaughn <ro...@yahoo.com>
make sure <ftp> disconnects from the server when it's done
Submitted by: Brian Rumple <br...@VALUBOND.COM>,
Roger Vaughn <ro...@yahoo.com>
Revision Changes Path
1.119 +4 -0 jakarta-ant/WHATSNEW
Index: WHATSNEW
===================================================================
RCS file: /home/cvs/jakarta-ant/WHATSNEW,v
retrieving revision 1.118
retrieving revision 1.119
diff -u -r1.118 -r1.119
--- WHATSNEW 2001/07/04 14:40:25 1.118
+++ WHATSNEW 2001/07/04 15:05:17 1.119
@@ -142,6 +142,10 @@
* <copy> will remove target file (if it exists) before writing to it -
this avoids problems with links on filesystems that support them.
+* <ftp> now properly recurses remote directories.
+
+* <ftp> closes remote connection when it's done.
+
Changes from Ant 1.2 to Ant 1.3
===========================================
1.6 +52 -40 jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java
Index: FTP.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- FTP.java 2001/01/11 11:53:52 1.5
+++ FTP.java 2001/07/04 15:05:19 1.6
@@ -71,6 +71,14 @@
* <li><strong>list</strong> - create a file listing.</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 instead of
+ * shutting them down cleanly. This happens in active or passive mode,
+ * and the ports will remain open even after ending the FTP session.
+ * FTP "send" operations seem to close ports immediately. This behavior
+ * may cause problems on some systems when downloading large sets of files.
+ *
* @author Roger Vaughn <a href="mailto:rvaughn@seaconinc.com">rvaughn@seaconinc.com</a>
* @author Glenn McAllister <a href="mailto:glennm@ca.ibm.com">glennm@ca.ibm.com</a>
*/
@@ -154,50 +162,55 @@
FTPFile[] newfiles = ftp.listFiles();
if (newfiles == null) {
- return; // no files in directory.
+ ftp.changeToParentDirectory();
+ return;
}
for (int i = 0; i < newfiles.length; i++) {
FTPFile file = newfiles[i];
- String name = vpath + file.getName();
- if (file.isDirectory()) {
- if (isIncluded(name)) {
- if (!isExcluded(name)) {
- dirsIncluded.addElement(name);
- if (fast) {
- scandir(name, name + File.separator, fast);
+ if (!file.getName().equals(".") && !file.getName().equals("..")) {
+ if (file.isDirectory()) {
+ String name = file.getName();
+ if (isIncluded(name)) {
+ if (!isExcluded(name)) {
+ dirsIncluded.addElement(name);
+ if (fast) {
+ scandir(name, vpath + name + File.separator, fast);
+ }
+ } else {
+ dirsExcluded.addElement(name);
}
} else {
- dirsExcluded.addElement(name);
+ dirsNotIncluded.addElement(name);
+ if (fast && couldHoldIncluded(name)) {
+ scandir(name, vpath + name + File.separator, fast);
+ }
}
- } else {
- dirsNotIncluded.addElement(name);
- if (fast && couldHoldIncluded(name)) {
- scandir(name, name + File.separator, fast);
+ if (!fast) {
+ scandir(name, vpath + name + File.separator, fast);
}
- }
- if (!fast) {
- scandir(name, name + File.separator, fast);
- }
- } else {
- if (file.isFile()) {
- if (isIncluded(name)) {
- if (!isExcluded(name)) {
- filesIncluded.addElement(name);
+ } else {
+ if (file.isFile()) {
+ String name = vpath + file.getName();
+ if (isIncluded(name)) {
+ if (!isExcluded(name)) {
+ filesIncluded.addElement(name);
+ } else {
+ filesExcluded.addElement(name);
+ }
} else {
- filesExcluded.addElement(name);
+ filesNotIncluded.addElement(name);
}
- } else {
- filesNotIncluded.addElement(name);
}
}
}
}
+ ftp.changeToParentDirectory();
} catch (IOException e) {
throw new BuildException("Error while communicating with FTP server: ", e);
}
}
- }
+ }
/**
* Sets the remote directory where files will be placed. This may
@@ -795,20 +808,19 @@
}
finally
{
- /*
- if (ftp != null && ftp.isConnected())
- {
- try
- {
- // this hangs - I don't know why.
- ftp.disconnect();
- }
- catch(IOException ex)
- {
- // ignore it
- }
- }
- */
+ if (ftp != null && ftp.isConnected())
+ {
+ try
+ {
+ log("disconnecting", Project.MSG_VERBOSE);
+ ftp.logout();
+ ftp.disconnect();
+ }
+ catch(IOException ex)
+ {
+ // ignore it
+ }
+ }
}
}
}