[
https://issues.apache.org/jira/browse/NET-324?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12867774#action_12867774
]
Kristof Neirynck commented on NET-324:
--------------------------------------
This diff seems to fix it permanently.
{noformat}
diff --git
a/libs/apache-ant-1.8.1/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java
b/libs/apache-ant-1.8.1/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java
---
a/libs/apache-ant-1.8.1/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java
+++
b/libs/apache-ant-1.8.1/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java
@@ -834,8 +834,7 @@
} else if (!result) {
return;
}
- this.curpwd = this.curpwd + remoteFileSep
- + currentPathElement;
+ this.curpwd = getCurpwdPlusFileSep() +
currentPathElement;
} catch (IOException ioe) {
throw new BuildException("could not change working dir
to "
+ (String)
pathElements.elementAt(fcount)
@@ -895,7 +894,7 @@
* @return absolute path as string
*/
public String getAbsolutePath() {
- return curpwd + remoteFileSep + ftpFile.getName();
+ return getCurpwdPlusFileSep() + ftpFile.getName();
}
/**
* find out the relative path assuming that the path used to
construct
@@ -1036,6 +1035,17 @@
public String getCurpwd() {
return curpwd;
}
+
+ /**
+ * @return parent directory of the AntFTPFile with a remoteFileSep
appended
+ */
+ private String getCurpwdPlusFileSep() {
+ if (this.curpwd.endsWith(remoteFileSep)) {
+ return this.curpwd;
+ }
+ return this.curpwd + remoteFileSep;
+ }
+
/**
* find out if a symbolic link is encountered in the relative path
of this file
* from rootPath.
{noformat}
> ant ftp doesn't download files in subdirectories when remotedir is empty or
> root folder
> ---------------------------------------------------------------------------------------
>
> Key: NET-324
> URL: https://issues.apache.org/jira/browse/NET-324
> Project: Commons Net
> Issue Type: Bug
> Affects Versions: 2.0
> Environment: Windows 7, 64bit, apache-ant-1.8.1, commons-net-2.0,
> jakarta-oro-2.0.8, FileZilla Server version 0.9.34 beta
> Reporter: Kristof Neirynck
> Priority: Minor
>
> I'm trying to download files in subdirectories from an ftp server with ant.
> The exact set of files is known. Some of them are in subdirectories. Ant only
> seems to download the ones in the root directory. It does work if I download
> all files without listing them.
> At first I thought I was doing something wrong so I posted a question on
> stackoverflow.
> http://stackoverflow.com/questions/2790570/ant-ftp-doesnt-download-files-in-subdirectories
> You can see my scriptdef workaround in the answers there.
> The first ftp action should do the exact same thing as the second. Instead I
> get "Hidden file \\a\a.txt assumed to not be a symlink."
> {code:title=build.xml}
> <?xml version="1.0" encoding="utf-8"?>
> <project name="example" default="example" basedir=".">
> <taskdef name="ftp"
> classname="org.apache.tools.ant.taskdefs.optional.net.FTP" />
> <target name="example">
> <!-- doesn't work -->
> <ftp action="get" verbose="true"
> server="localhost" userid="example" password="example"
> remotedir="">
> <fileset dir="downloads" casesensitive="false"
> includes="a/a.txt,a/b/ab.txt,c/c.txt" />
> </ftp>
> <!-- works (but requires multiple ftp tasks) -->
> <ftp action="get" verbose="true"
> server="localhost" userid="example" password="example"
> remotedir="a">
> <fileset dir="downloads" casesensitive="false"
> includes="a.txt,b/ab.txt" />
> </ftp>
> <ftp action="get" verbose="true"
> server="localhost" userid="example" password="example"
> remotedir="c">
> <fileset dir="downloads" casesensitive="false"
> includes="c.txt" />
> </ftp>
> </target>
> </project>
> {code}
> {code:title=build-with-workaround.xml}
> <?xml version="1.0" encoding="utf-8"?>
> <project name="example" default="example" basedir=".">
> <taskdef name="ftp"
> classname="org.apache.tools.ant.taskdefs.optional.net.FTP" />
> <target name="example">
> <scriptdef name="my-ftp-get" language="javascript">
> <attribute name="server"/>
> <attribute name="userid"/>
> <attribute name="password"/>
> <attribute name="remotedir"/>
> <attribute name="fileset_dir"/>
> <attribute name="fileset_includes"/>
> <![CDATA[
> importClass(java.io.File);
> importClass(org.apache.tools.ant.taskdefs.optional.net.FTP);
> var local_basedir = "" + attributes.get("fileset_dir") + "/";
> var original_includes = "" + attributes.get("fileset_includes");
> var remotedir = "" + attributes.get("remotedir");
> local_basedir = local_basedir.replace(/\\/g, "/");
> original_includes = original_includes.replace(/\\/g, "/");
> remotedir = remotedir.replace(/\\/g, "/");
> var includes_arr = original_includes.split(",");
> var clean_includes = {};
> for (var i = 0; i < includes_arr.length; i++) {
> var directory = "/";
> var filename = includes_arr[i];
> var split_include = includes_arr[i].split("/");
> if (split_include.length > 1) {
> directory = split_include[0] + "/";
> filename = includes_arr[i].substring(directory.length);
> }
> if (!clean_includes.hasOwnProperty(directory)) {
> clean_includes[directory] = [];
> }
> clean_includes[directory].push(filename);
> }
> var get_files = new FTP.Action();
> get_files.setValue("get");
> for (var path in clean_includes) {
> var current_clean_includes = clean_includes[path].join(",");
> var fileset = project.createDataType("fileset");
> var ftp = self.project.createTask("ftp");
> ftp.setAction(get_files);
> ftp.setServer(attributes.get("server"));
> ftp.setUserid(attributes.get("userid"));
> ftp.setPassword(attributes.get("password"));
> ftp.setRemotedir(remotedir + path);
> fileset.setDir(new File(local_basedir + path));
> fileset.setIncludes(current_clean_includes);
> ftp.addFileset(fileset);
> ftp.perform();
> }
> ]]>
> </scriptdef>
> <my-ftp-get
> server="localhost" userid="example" password="example"
> remotedir=""
> fileset_dir="downloads" casesensitive="false"
> fileset_includes="a/a.txt,a/b/ab.txt,c/c.txt">
> </my-ftp-get>
> </target>
> </project>
> {code}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.