[
https://issues.apache.org/jira/browse/NET-324?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12867760#action_12867760
]
Kristof Neirynck commented on NET-324:
--------------------------------------
The problem is solved when I change line 425 in file FTP
from
{noformat}
if (remoteSensitivityChecked
&& remoteSystemCaseSensitive && isFollowSymlinks())
{
{noformat}
to
{noformat}
if (true) {
{noformat}
It seems to be a problem with AntFTPFile.getRelativePath not returning the
correct value
{noformat}
myfile.getFastRelativePath() = "a/a.txt"
myfile.getRelativePath() = "\\a\a.txt"
{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.