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]

Reply via email to