Browse Source

Issue a warning message indicating that selectors within filesets

are not supported in the ftp task when the fileset is remote
(all actions except put)
PR: 18280


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275037 13f79535-47bb-0310-9956-ffa450edef68
master
Antoine Levy-Lambert 22 years ago
parent
commit
24f9da26b5
3 changed files with 62 additions and 23 deletions
  1. +22
    -0
      src/etc/testcases/taskdefs/optional/net/ftp.xml
  2. +5
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java
  3. +35
    -23
      src/testcases/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java

+ 22
- 0
src/etc/testcases/taskdefs/optional/net/ftp.xml View File

@@ -6,18 +6,40 @@
<property name="ftp.port" value="21" />
<property name="ftp.password" value="sunshine" />
<property name="tmp.dir" location="tmp"/>
<property name="tmp.get.dir" location="tmp.get"/>
<property name="ftp.filesep" value="/"/>
<fileset dir="${tmp.get.dir}" id="fileset-destination-with-selector">
<include name="alpha/**"/>
<filename name="**/alpha.xml" />
</fileset>
<fileset dir="${tmp.dir}" id="fileset-source-without-selector">
<include name="alpha/**"/>
</fileset>
<fileset dir="${tmp.get.dir}" id="fileset-destination-without-selector">
<include name="alpha/**"/>
</fileset>
<target name="setup">
<mkdir dir="${tmp.get.dir}"/>
<mkdir dir="${tmp.dir}/alpha/beta/gamma"/>
<touch file="${tmp.dir}/alpha/beta/gamma/gamma.xml"/>
<touch file="${tmp.dir}/alpha/beta/beta.xml"/>
</target>
<target name="ftp-get-with-selector">
<ftp action="get"
server="${ftp.host}"
userid="${ftp.user}"
password="${ftp.password}"
remotedir="${tmp.dir}">
<fileset refid="fileset-destination-with-selector"/>
</ftp>
</target>
<target name="children-of-excluded-dir-setup" depends="setup">
<mkdir dir="${tmp.dir}/delta"/>
<touch file="${tmp.dir}/delta/delta.xml"/>
</target>
<target name="cleanup">
<delete dir="${tmp.dir}" quiet="true"/>
<delete dir="${tmp.get.dir}" quiet="true"/>
</target>
<target name="symlink-setup" depends="setup">
<mkdir dir="${tmp.dir}/epsilon/gamma"/>


+ 5
- 0
src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java View File

@@ -667,6 +667,11 @@ public class FTP
if (action == SEND_FILES) {
ds = fs.getDirectoryScanner(getProject());
} else {
// warn that selectors are not supported
if (fs.getSelectors(getProject()).length != 0) {
getProject().log("selectors are not supported in remote filesets",
Project.MSG_WARN);
}
ds = new FTPDirectoryScanner(ftp);
fs.setupDirectoryScanner(ds, getProject());
ds.scan();


+ 35
- 23
src/testcases/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java View File

@@ -54,14 +54,16 @@
package org.apache.tools.ant.taskdefs.optional.net;

import org.apache.tools.ant.BuildFileTest;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.taskdefs.optional.net.FTP;
import org.apache.tools.ant.util.JavaEnvUtils;
import org.apache.tools.ant.taskdefs.condition.Os;

import java.io.File;
import java.io.IOException;
import java.util.TreeSet;
import java.util.Iterator;
import java.util.Arrays;
import org.apache.commons.net.ftp.FTPClient;

public class FTPTest extends BuildFileTest{
@@ -203,7 +205,27 @@ public class FTPTest extends BuildFileTest{
}
}
}

public void testGetWithSelector() {
expectLogContaining("ftp-get-with-selector",
"selectors are not supported in remote filesets");
FileSet fsDestination = (FileSet) getProject().getReference("fileset-destination-without-selector");
DirectoryScanner dsDestination = fsDestination.getDirectoryScanner(getProject());
dsDestination.scan();
String [] sortedDestinationDirectories = dsDestination.getIncludedDirectories();
String [] sortedDestinationFiles = dsDestination.getIncludedFiles();
for (int counter = 0; counter < sortedDestinationDirectories.length; counter++) {
sortedDestinationDirectories[counter] =
sortedDestinationDirectories[counter].replace(File.separatorChar, '/');
}
for (int counter = 0; counter < sortedDestinationFiles.length; counter++) {
sortedDestinationFiles[counter] =
sortedDestinationFiles[counter].replace(File.separatorChar, '/');
}
FileSet fsSource = (FileSet) getProject().getReference("fileset-source-without-selector");
DirectoryScanner dsSource = fsSource.getDirectoryScanner(getProject());
dsSource.scan();
compareFiles(dsSource, sortedDestinationFiles, sortedDestinationDirectories);
}
public void testAllowSymlinks() {
if (!supportsSymlinks) {
return;
@@ -501,7 +523,7 @@ public class FTPTest extends BuildFileTest{

}

private void compareFiles(FTP.FTPDirectoryScanner ds, String[] expectedFiles,
private void compareFiles(DirectoryScanner ds, String[] expectedFiles,
String[] expectedDirectories) {
String includedFiles[] = ds.getIncludedFiles();
String includedDirectories[] = ds.getIncludedDirectories();
@@ -510,30 +532,20 @@ public class FTPTest extends BuildFileTest{
assertEquals("directories present: ", expectedDirectories.length,
includedDirectories.length);

TreeSet files = new TreeSet();
for (int counter=0; counter < includedFiles.length; counter++) {
files.add(includedFiles[counter].replace(File.separatorChar, '/'));
includedFiles[counter] = includedFiles[counter].replace(File.separatorChar, '/');
}
TreeSet directories = new TreeSet();
Arrays.sort(includedFiles);
for (int counter=0; counter < includedDirectories.length; counter++) {
directories.add(includedDirectories[counter]
.replace(File.separatorChar, '/'));
includedDirectories[counter] = includedDirectories[counter]
.replace(File.separatorChar, '/');
}

String currentfile;
Iterator i = files.iterator();
int counter = 0;
while (i.hasNext()) {
currentfile = (String) i.next();
assertEquals(expectedFiles[counter], currentfile);
counter++;
Arrays.sort(includedDirectories);
for (int counter=0; counter < includedFiles.length; counter++) {
assertEquals(expectedFiles[counter], includedFiles[counter]);
}
String currentdirectory;
Iterator dirit = directories.iterator();
counter = 0;
while (dirit.hasNext()) {
currentdirectory = (String) dirit.next();
assertEquals(expectedDirectories[counter], currentdirectory);
for (int counter=0; counter < includedDirectories.length; counter++) {
assertEquals(expectedDirectories[counter], includedDirectories[counter]);
counter++;
}
}


Loading…
Cancel
Save