ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bode...@apache.org
Subject cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/net FTP.java
Date Mon, 15 Apr 2002 09:33:33 GMT
bodewig     02/04/15 02:33:33

  Modified:    src/main/org/apache/tools/ant/taskdefs/optional/net FTP.java
  Log:
  Make sure <ftp> closes the output stream when listing files.
  
  Cosmetics.
  
  Revision  Changes    Path
  1.18      +109 -83   jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java
  
  Index: FTP.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- FTP.java	21 Mar 2002 09:47:35 -0000	1.17
  +++ FTP.java	15 Apr 2002 09:33:33 -0000	1.18
  @@ -64,6 +64,7 @@
   import org.apache.tools.ant.Task;
   import org.apache.tools.ant.types.EnumeratedAttribute;
   import org.apache.tools.ant.types.FileSet;
  +import org.apache.tools.ant.util.FileUtils;
   
   import java.io.BufferedInputStream;
   import java.io.BufferedOutputStream;
  @@ -100,6 +101,8 @@
    * @author Roger Vaughn <a href="mailto:rvaughn@seaconinc.com">rvaughn@seaconinc.com</a>
    * @author Glenn McAllister <a href="mailto:glennm@ca.ibm.com">glennm@ca.ibm.com</a>
    * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
  + *
  + * @since Ant 1.3
    */
   public class FTP
       extends Task
  @@ -131,6 +134,7 @@
       private boolean ignoreNoncriticalErrors=false;
       private String chmod = null;
       private String umask = null;
  +    private FileUtils fileUtils = FileUtils.newFileUtils();
   
       protected final static String[] ACTION_STRS = {
           "sending",
  @@ -177,7 +181,8 @@
   
               try {
                   String cwd = ftp.printWorkingDirectory();
  -                scandir(".", "", true); // always start from the current ftp working dir
  +                // always start from the current ftp working dir
  +                scandir(".", "", true); 
                   ftp.changeWorkingDirectory(cwd);
               } catch (IOException e) {
                   throw new BuildException("Unable to scan FTP server: ", e);
  @@ -198,14 +203,17 @@
   
                   for (int i = 0; i < newfiles.length; i++) {
                       FTPFile file = newfiles[i];
  -                    if (!file.getName().equals(".") && !file.getName().equals(".."))
{
  +                    if (!file.getName().equals(".") 
  +                        && !file.getName().equals("..")) {
                           if (file.isDirectory()) {
                               String name = file.getName();
                               if (isIncluded(name)) {
                                   if (!isExcluded(name)) {
                                       dirsIncluded.addElement(name);
                                       if (fast) {
  -                                        scandir(name, vpath + name + File.separator, fast);
  +                                        scandir(name, 
  +                                                vpath + name + File.separator,
  +                                                fast);
                                       }
                                   } else {
                                       dirsExcluded.addElement(name);
  @@ -213,11 +221,14 @@
                               } else {
                                   dirsNotIncluded.addElement(name);
                                   if (fast && couldHoldIncluded(name)) {
  -                                    scandir(name, vpath + name + File.separator, fast);
  +                                    scandir(name, 
  +                                            vpath + name + File.separator, 
  +                                            fast);
                                   }
                               }
                               if (!fast) {
  -                                scandir(name, vpath + name + File.separator, fast);
  +                                scandir(name, vpath + name + File.separator, 
  +                                        fast);
                               }
                           } else {
                               if (file.isFile()) {
  @@ -237,7 +248,8 @@
                   }
                   ftp.changeToParentDirectory();
               } catch (IOException e) {
  -                throw new BuildException("Error while communicating with FTP server: ",
e);
  +                throw new BuildException("Error while communicating with FTP "
  +                                         + "server: ", e);
               }
           }
       }
  @@ -434,21 +446,24 @@
   
           if ((action == LIST_FILES) && (listing == null))
           {
  -            throw new BuildException("listing attribute must be set for list action!");
  +            throw new BuildException("listing attribute must be set for list "
  +                                     + "action!");
           }
   
           if (action == MK_DIR && remotedir == null) {
  -            throw new BuildException("remotedir attribute must be set for mkdir action!");
  +            throw new BuildException("remotedir attribute must be set for "
  +                                     + "mkdir action!");
           }
   
           if (action == CHMOD && chmod == null) {
  -            throw new BuildException("chmod attribute must be set for chmod action!");
  +            throw new BuildException("chmod attribute must be set for chmod "
  +                                     + "action!");
           }
       }
   
       /**
  -     * For each file in the fileset, do the appropriate action: send, get, delete,
  -     * or list.
  +     * For each file in the fileset, do the appropriate action: send,
  +     * get, delete, or list.
        */
       protected int transferFiles(FTPClient ftp, FileSet fs)
           throws IOException, BuildException
  @@ -465,8 +480,10 @@
   
           String[] dsfiles = ds.getIncludedFiles();
           String dir = null;
  -        if ((ds.getBasedir() == null) && ((action == SEND_FILES) || (action ==
GET_FILES))) {
  -            throw new BuildException( "the dir attribute must be set for send and get actions"
);
  +        if ((ds.getBasedir() == null) 
  +            && ((action == SEND_FILES) || (action == GET_FILES))) {
  +            throw new BuildException("the dir attribute must be set for send "
  +                                     + "and get actions" );
           } else {
               if ((action == SEND_FILES) || (action == GET_FILES)) {
                   dir = ds.getBasedir().getAbsolutePath();
  @@ -475,53 +492,54 @@
   
           // If we are doing a listing, we need the output stream created now.
           BufferedWriter bw = null;
  -        if (action == LIST_FILES) {
  -            File pd = new File(listing.getParent());
  -            if (!pd.exists()) {
  -                pd.mkdirs();
  -            }
  -            bw = new BufferedWriter(new FileWriter(listing));
  -        }
  -
  -        for (int i = 0; i < dsfiles.length; i++)
  -        {
  -            switch (action) {
  -            case SEND_FILES: {
  -                sendFile(ftp, dir, dsfiles[i]);
  -                break;
  -            }
  -
  -            case GET_FILES: {
  -                getFile(ftp, dir, dsfiles[i]);
  -                break;
  +        try {
  +            if (action == LIST_FILES) {
  +                File pd = fileUtils.getParentFile(listing);
  +                if (!pd.exists()) {
  +                    pd.mkdirs();
  +                }
  +                bw = new BufferedWriter(new FileWriter(listing));
               }
   
  -            case DEL_FILES: {
  -                delFile(ftp, dsfiles[i]);
  -                break;
  -            }
  +            for (int i = 0; i < dsfiles.length; i++) {
  +                switch (action) {
  +                case SEND_FILES: {
  +                    sendFile(ftp, dir, dsfiles[i]);
  +                    break;
  +                }
   
  -            case LIST_FILES: {
  -                listFile(ftp, bw, dsfiles[i]);
  -                break;
  -            }
  +                case GET_FILES: {
  +                    getFile(ftp, dir, dsfiles[i]);
  +                    break;
  +                }
   
  -            case CHMOD: {
  -                 doSiteCommand(ftp,"chmod " + chmod + " " + dsfiles[i]);
  -                 transferred++;
  -                 break;
  -            }
  +                case DEL_FILES: {
  +                    delFile(ftp, dsfiles[i]);
  +                    break;
  +                }
  +                    
  +                case LIST_FILES: {
  +                    listFile(ftp, bw, dsfiles[i]);
  +                    break;
  +                }
  +                    
  +                case CHMOD: {
  +                    doSiteCommand(ftp, "chmod " + chmod + " " + dsfiles[i]);
  +                    transferred++;
  +                    break;
  +                }
   
  -            default: {
  -                throw new BuildException("unknown ftp action " + action );
  +                default: {
  +                    throw new BuildException("unknown ftp action " + action );
  +                }
  +                }
               }
  +        } finally {
  +            if (bw != null) {
  +                bw.close();
               }
           }
   
  -        if (action == LIST_FILES) {
  -            bw.close();
  -        }
  -
           return dsfiles.length;
       }
   
  @@ -554,7 +572,8 @@
   
           log(transferred + " files " + COMPLETED_ACTION_STRS[action]);
           if(skipped!=0) {
  -            log(skipped + " files were not successfully "+ COMPLETED_ACTION_STRS[action]);
  +            log(skipped + " files were not successfully "
  +                + COMPLETED_ACTION_STRS[action]);
           }
       }
   
  @@ -619,7 +638,8 @@
        * Checks to see if the remote file is current as compared with the
        * local file.  Returns true if the remote file is up to date.
        */
  -    protected boolean isUpToDate(FTPClient ftp, File localFile, String remoteFile)
  +    protected boolean isUpToDate(FTPClient ftp, File localFile, 
  +                                 String remoteFile)
           throws IOException, BuildException
       {
           log("checking date for " + remoteFile, Project.MSG_VERBOSE);
  @@ -694,6 +714,7 @@
           InputStream instream = null;
           try
           {
  +            // XXX - why not simply new File(dir, filename)?
               File file = project.resolveFile(new File(dir, filename).getPath());
   
               if (newerOnly && isUpToDate(ftp, file, resolveFile(filename))) {
  @@ -725,10 +746,9 @@
               }
               else {
                   if (chmod != null) { // see if we should issue a chmod command
  -                  doSiteCommand(ftp,"chmod " + chmod + " " + filename);
  +                    doSiteCommand(ftp,"chmod " + chmod + " " + filename);
                   }
  -                log("File " + file.getAbsolutePath() +
  -                    " copied to " + server,
  +                log("File " + file.getAbsolutePath() + " copied to " + server,
                       Project.MSG_VERBOSE);
                   transferred++;
               }
  @@ -769,7 +789,8 @@
               }
           }
           else {
  -            log("File " + filename + " deleted from " + server, Project.MSG_VERBOSE);
  +            log("File " + filename + " deleted from " + server,
  +                Project.MSG_VERBOSE);
               transferred++;
           }
       }
  @@ -777,10 +798,11 @@
       /**
        * Retrieve a single file to the remote host.
        * <code>filename</code> may contain a relative path specification.
  -     * The file will then be retreived using the entire relative path spec -
  -     * no attempt is made to change directories.  It is anticipated that this may
  -     * eventually cause problems with some FTP servers, but it simplifies
  -     * the coding.
  +     *
  +     * <p>The file will then be retreived using the entire relative
  +     * path spec - no attempt is made to change directories.  It is
  +     * anticipated that this may eventually cause problems with some
  +     * FTP servers, but it simplifies the coding.</p>
        */
       protected void getFile(FTPClient ftp, String dir, String filename)
           throws IOException, BuildException
  @@ -796,11 +818,12 @@
   
               if (verbose)
               {
  -                log("transferring " + filename + " to " + file.getAbsolutePath());
  +                log("transferring " + filename + " to " 
  +                    + file.getAbsolutePath());
               }
   
   
  -            File pdir = new File(file.getParent());        // stay 1.1 compatible
  +            File pdir = fileUtils.getParentFile(file);
               if (!pdir.exists()) {
                   pdir.mkdirs();
               }
  @@ -820,8 +843,8 @@
   
               }
               else {
  -                log("File " + file.getAbsolutePath() + " copied from " + server,
  -                    Project.MSG_VERBOSE);
  +                log("File " + file.getAbsolutePath() + " copied from " 
  +                    + server, Project.MSG_VERBOSE);
                   transferred++;
               }
           }
  @@ -844,10 +867,11 @@
       /**
        * List information about a single file from the remote host.
        * <code>filename</code> may contain a relative path specification.
  -     * The file listing will then be retrieved using the entire relative path spec
  -     * - no attempt is made to change directories.  It is anticipated that this may
  -     * eventually cause problems with some FTP servers, but it simplifies
  -     * the coding.
  +     *
  +     * <p>The file listing will then be retrieved using the entire
  +     * relative path spec - no attempt is made to change directories.
  +     * It is anticipated that this may eventually cause problems with
  +     * some FTP servers, but it simplifies the coding.</p>
        */
       protected void listFile(FTPClient ftp, BufferedWriter bw, String filename)
           throws IOException, BuildException
  @@ -866,7 +890,8 @@
       /**
        * Create the specified directory on the remote host.
        * @param ftp The FTP client connection
  -     * @param dir The directory to create (format must be correct for host type)
  +     * @param dir The directory to create (format must be correct for
  +     * host type)
        */
       protected void makeRemoteDir( FTPClient ftp, String dir )
           throws IOException, BuildException
  @@ -881,7 +906,8 @@
               //  failed because the directory already exists.
   
               int rc = ftp.getReplyCode();
  -            if( !(ignoreNoncriticalErrors && (rc == 550 || rc == 553 || rc==521)))
{
  +            if( !(ignoreNoncriticalErrors 
  +                  && (rc == 550 || rc == 553 || rc==521))) {
                   throw new BuildException( "could not create directory: " +
                                             ftp.getReplyString() );
               }
  @@ -915,7 +941,8 @@
               ftp.connect(server, port);
               if (!FTPReply.isPositiveCompletion(ftp.getReplyCode()))
               {
  -                throw new BuildException("FTP connection failed: " + ftp.getReplyString());
  +                throw new BuildException("FTP connection failed: " 
  +                                         + ftp.getReplyString());
               }
   
               log("connected", Project.MSG_VERBOSE);
  @@ -933,8 +960,7 @@
                   ftp.setFileType(com.oroinc.net.ftp.FTP.IMAGE_FILE_TYPE);
                   if (!FTPReply.isPositiveCompletion(ftp.getReplyCode()))
                   {
  -                    throw new BuildException(
  -                                             "could not set transfer type: " +
  +                    throw new BuildException("could not set transfer type: " +
                                                ftp.getReplyString());
                   }
               }
  @@ -945,8 +971,8 @@
                   ftp.enterLocalPassiveMode();
                   if (!FTPReply.isPositiveCompletion(ftp.getReplyCode()))
                   {
  -                    throw new BuildException(
  -                                             "could not enter into passive mode: " +
  +                    throw new BuildException("could not enter into passive "
  +                                             + "mode: " +
                                                ftp.getReplyString());
                   }
               }
  @@ -955,11 +981,11 @@
               // created.
   
               if (umask != null) {
  -               doSiteCommand(ftp,"umask " + umask);
  +                doSiteCommand(ftp, "umask " + umask);
               }
   
  -            // If the action is MK_DIR, then the specified remote directory is the
  -            // directory to create.
  +            // If the action is MK_DIR, then the specified remote
  +            // directory is the directory to create.
   
               if( action == MK_DIR ) {
   
  @@ -972,8 +998,8 @@
                       ftp.changeWorkingDirectory(remotedir);
                       if (!FTPReply.isPositiveCompletion(ftp.getReplyCode()))
                       {
  -                        throw new BuildException(
  -                                                 "could not change remote directory: "
+
  +                        throw new BuildException("could not change remote "
  +                                                 + "directory: " +
                                                    ftp.getReplyString());
                       }
                   }
  @@ -1021,10 +1047,10 @@
                   actionL.equals("put")) {
                   return SEND_FILES;
               } else if (actionL.equals("recv") ||
  -                     actionL.equals("get")) {
  +                       actionL.equals("get")) {
                   return GET_FILES;
               } else if (actionL.equals("del") ||
  -                     actionL.equals("delete" )) {
  +                       actionL.equals("delete" )) {
                   return DEL_FILES;
               } else if (actionL.equals("list")) {
                   return LIST_FILES;
  
  
  

--
To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


Mime
View raw message