antoine 2003/08/22 04:23:48
Modified: src/main/org/apache/tools/ant/taskdefs/optional/net FTP.java
Log:
Fixes unsensitive searches on case sensitive remote file systems
Revision Changes Path
1.51 +39 -3
ant/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java
Index: FTP.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -r1.50 -r1.51
--- FTP.java 21 Aug 2003 16:56:12 -0000 1.50
+++ FTP.java 22 Aug 2003 11:23:48 -0000 1.51
@@ -660,17 +660,32 @@
this.client = parent.client;
Vector pathElements = SelectorUtils.tokenizePath(path);
try {
-
this.client.changeWorkingDirectory(parent.getAbsolutePath());
+ boolean result =
this.client.changeWorkingDirectory(parent.getAbsolutePath());
+ //this should not happen, except if parent has been
deleted by another process
+ if (!result) {
+ return;
+ }
this.curpwd = parent.getAbsolutePath();
} catch (IOException ioe) {
throw new BuildException("could not change working dir
to "
+ parent.curpwd);
}
for (int fcount = 0; fcount < pathElements.size() - 1;
fcount++) {
+ String currentPathElement = (String)
pathElements.elementAt(fcount);
try {
- this.client.changeWorkingDirectory((String)
pathElements.elementAt(fcount));
+ boolean result =
this.client.changeWorkingDirectory(currentPathElement);
+ if (!result && !isCaseSensitive()
+ && (remoteSystemCaseSensitive ||
!remoteSensitivityChecked)) {
+ currentPathElement =
findPathElementCaseUnsensitive(this.curpwd,
+ currentPathElement);
+ if (currentPathElement == null) {
+ return;
+ }
+ } else if (!result) {
+ return;
+ }
this.curpwd = this.curpwd + remoteFileSep
- + (String) pathElements.elementAt(fcount);
+ + currentPathElement;
} catch (IOException ioe) {
throw new BuildException("could not change working
dir to "
+ (String) pathElements.elementAt(fcount)
@@ -681,6 +696,27 @@
String lastpathelement = (String)
pathElements.elementAt(pathElements.size() - 1);
FTPFile [] theFiles = listFiles(this.curpwd);
this.ftpFile = getFile(theFiles, lastpathelement);
+ }
+ /**
+ * find a file in a directory in case unsensitive way
+ * @param parentPath where we are
+ * @param soughtPathElement what is being sought
+ * @return the first file found or null if not
found
+ */
+ private String findPathElementCaseUnsensitive(String parentPath,
+ String soughtPathElement) {
+ // we are already in the right path, so the second parameter
+ // is false
+ FTPFile[] theFiles = listFiles(parentPath, false);
+ if (theFiles == null) {
+ return null;
+ }
+ for (int icounter = 0; icounter < theFiles.length;
icounter++) {
+ if
(theFiles[icounter].getName().equalsIgnoreCase(soughtPathElement)) {
+ return theFiles[icounter].getName();
+ }
+ }
+ return null;
}
/**
* find out if the file exists
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]