[ 
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.

Reply via email to