bodewig     2004/04/07 06:30:30

  Modified:    .        CONTRIBUTORS
               src/main/org/apache/tools/ant/taskdefs/optional/ssh
                        AbstractSshMessage.java SSHBase.java Scp.java
                        ScpFromMessage.java ScpToMessage.java
  Log:
  Add progress report to <scp>.
  
  Submitted by: Rami Ojares
  
  Revision  Changes    Path
  1.9       +2 -1      ant/CONTRIBUTORS
  
  Index: CONTRIBUTORS
  ===================================================================
  RCS file: /home/cvs/ant/CONTRIBUTORS,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- CONTRIBUTORS      7 Apr 2004 12:13:30 -0000       1.8
  +++ CONTRIBUTORS      7 Apr 2004 13:30:30 -0000       1.9
  @@ -148,8 +148,9 @@
   Phillip Wells
   Pierre Delisle
   Pierre Dittgen
  -Raphael Pierquin
   R Handerson
  +Rami Ojares
  +Raphael Pierquin
   Richard Evans
   Rick Beton
   Robert Anderson
  
  
  
  1.9       +38 -0     
ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/AbstractSshMessage.java
  
  Index: AbstractSshMessage.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/AbstractSshMessage.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- AbstractSshMessage.java   9 Feb 2004 21:05:34 -0000       1.8
  +++ AbstractSshMessage.java   7 Apr 2004 13:30:30 -0000       1.9
  @@ -32,6 +32,7 @@
   public abstract class AbstractSshMessage {
   
       private Session session;
  +    private boolean verbose;
       private LogListener listener = new LogListener() {
           public void log(String message) {
               // do nothing;
  @@ -39,6 +40,14 @@
       };
   
       public AbstractSshMessage(Session session) {
  +        this(false, session);
  +    }
  +
  +    /**
  +     * @since Ant 1.6.2
  +     */
  +    public AbstractSshMessage(boolean verbose, Session session) {
  +        this.verbose = verbose;
           this.session = session;
       }
   
  @@ -114,4 +123,33 @@
               + " Average Rate: " + format.format(totalLength / duration)
               + " B/s");
       }
  +
  +    /**
  +     * @since Ant 1.6.2
  +     */
  +    protected final boolean getVerbose() {
  +        return verbose;
  +    }
  +
  +    /*
  +     * Track progress every 10% if 100kb < filesize < 1mb. For larger
  +     * files track progress for every percent transmitted.
  +     */
  +    protected final int trackProgress(int filesize, int totalLength, 
  +                                      int percentTransmitted) {
  +
  +        int percent = (int) Math.round(Math.floor((totalLength 
  +                                                   / (double)filesize) 
  +                                                  * 100));
  +        if (percent > percentTransmitted) {
  +            if (filesize < 1048576 && (percent % 10 != 0)) {
  +                // do not track between tenths
  +            } else {
  +                log("" + percent + "%");
  +            }
  +        }
  +
  +        return percent;
  +    }
  +
   }
  
  
  
  1.11      +15 -0     
ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHBase.java
  
  Index: SSHBase.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHBase.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- SSHBase.java      9 Mar 2004 16:48:37 -0000       1.10
  +++ SSHBase.java      7 Apr 2004 13:30:30 -0000       1.11
  @@ -40,6 +40,7 @@
       private String knownHosts;
       private int port = SSH_PORT;
       private boolean failOnError = true;
  +    private boolean verbose;
       private SSHUserInfo userInfo;
   
       /**
  @@ -69,6 +70,20 @@
   
       public boolean getFailonerror() {
           return failOnError;
  +    }
  +
  +    /**
  +     * @since Ant 1.6.2
  +     */
  +    public void setVerbose(boolean failure) {
  +        verbose = failure;
  +    }
  +
  +    /**
  +     * @since Ant 1.6.2
  +     */
  +    public boolean getVerbose() {
  +        return verbose;
       }
   
       /**
  
  
  
  1.15      +5 -4      
ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/Scp.java
  
  Index: Scp.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/Scp.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- Scp.java  9 Mar 2004 16:48:37 -0000       1.14
  +++ Scp.java  7 Apr 2004 13:30:30 -0000       1.15
  @@ -140,7 +140,7 @@
           try {
               session = openSession();
               ScpFromMessage message =
  -                new ScpFromMessage(session, file,
  +                new ScpFromMessage(getVerbose(), session, file,
                                      getProject().resolveFile(toPath),
                                      fromSshUri.endsWith("*"));
               log("Receiving file: " + file);
  @@ -169,7 +169,8 @@
               }
               if (!list.isEmpty()) {
                   session = openSession();
  -                ScpToMessage message = new ScpToMessage(session, list, file);
  +                ScpToMessage message = new ScpToMessage(getVerbose(), 
session,
  +                                                        list, file);
                   message.setLogListener(this);
                   message.execute();
               }
  @@ -188,8 +189,8 @@
           try {
               session = openSession();
               ScpToMessage message =
  -                new ScpToMessage(session, getProject().resolveFile(fromPath),
  -                                 file);
  +                new ScpToMessage(getVerbose(), session, 
  +                                 getProject().resolveFile(fromPath), file);
               message.setLogListener(this);
               message.execute();
           } finally {
  
  
  
  1.8       +29 -4     
ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpFromMessage.java
  
  Index: ScpFromMessage.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpFromMessage.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ScpFromMessage.java       9 Feb 2004 21:05:34 -0000       1.7
  +++ ScpFromMessage.java       7 Apr 2004 13:30:30 -0000       1.8
  @@ -38,14 +38,25 @@
       private File localFile;
       private boolean isRecursive = false;
   
  +    /**
  +     * @since Ant 1.6.2
  +     */
  +    public ScpFromMessage(boolean verbose,
  +                          Session session,
  +                          String aRemoteFile,
  +                          File aLocalFile,
  +                          boolean recursive) {
  +        super(verbose, session);
  +        this.remoteFile = aRemoteFile;
  +        this.localFile = aLocalFile;
  +        this.isRecursive = recursive;
  +    }
  +
       public ScpFromMessage(Session session,
                              String aRemoteFile,
                              File aLocalFile,
                              boolean recursive) {
  -        super(session);
  -        this.remoteFile = aRemoteFile;
  -        this.localFile = aLocalFile;
  -        this.isRecursive = recursive;
  +        this(false, session, aRemoteFile, aLocalFile, recursive);
       }
   
       public void execute() throws IOException, JSchException {
  @@ -153,6 +164,14 @@
           int length;
           int totalLength = 0;
           long startTime = System.currentTimeMillis();
  +
  +        // only track progress for files larger than 100kb in verbose mode
  +        boolean trackProgress = getVerbose() && filesize > 102400;
  +        // since filesize keeps on decreasing we have to store the
  +        // initial filesize
  +        int initFilesize = filesize;
  +        int percentTransmitted = 0;
  +
           try {
               while (true) {
                   length = in.read(buf, 0,
  @@ -165,6 +184,12 @@
                   totalLength += length;
                   if (filesize == 0) {
                       break;
  +                }
  +
  +                if (trackProgress) {
  +                    percentTransmitted = trackProgress(initFilesize, 
  +                                                       totalLength, 
  +                                                       percentTransmitted);
                   }
               }
           } finally {
  
  
  
  1.9       +48 -6     
ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpToMessage.java
  
  Index: ScpToMessage.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpToMessage.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ScpToMessage.java 9 Feb 2004 21:05:34 -0000       1.8
  +++ ScpToMessage.java 7 Apr 2004 13:30:30 -0000       1.9
  @@ -36,22 +36,50 @@
       private String remotePath;
       private List directoryList;
   
  -    public ScpToMessage(Session session,
  +    /**
  +     * @since Ant 1.6.2
  +     */
  +    public ScpToMessage(boolean verbose,
  +                        Session session,
                           File aLocalFile,
                           String aRemotePath) {
  -        super(session);
  +        this(verbose, session, aRemotePath);
   
           this.localFile = aLocalFile;
  +    }
  +
  +    /**
  +     * @since Ant 1.6.2
  +     */
  +    public ScpToMessage(boolean verbose,
  +                        Session session,
  +                        List aDirectoryList,
  +                        String aRemotePath) {
  +        this(verbose, session, aRemotePath);
  +
  +        this.directoryList = aDirectoryList;
  +    }
  +
  +    /**
  +     * @since Ant 1.6.2
  +     */
  +    private ScpToMessage(boolean verbose,
  +                         Session session,
  +                         String aRemotePath) {
  +        super(verbose, session);
           this.remotePath = aRemotePath;
       }
   
       public ScpToMessage(Session session,
  +                        File aLocalFile,
  +                        String aRemotePath) {
  +        this(false, session, aLocalFile, aRemotePath);
  +    }
  +
  +    public ScpToMessage(Session session,
                            List aDirectoryList,
                            String aRemotePath) {
  -        super(session);
  -
  -        this.directoryList = aDirectoryList;
  -        this.remotePath = aRemotePath;
  +        this(false, session, aDirectoryList, aRemotePath);
       }
   
       public void execute() throws IOException, JSchException {
  @@ -150,6 +178,14 @@
           byte[] buf = new byte[BUFFER_SIZE];
           long startTime = System.currentTimeMillis();
           int totalLength = 0;
  +
  +        // only track progress for files larger than 100kb in verbose mode
  +        boolean trackProgress = getVerbose() && filesize > 102400;
  +        // since filesize keeps on decreasing we have to store the
  +        // initial filesize
  +        int initFilesize = filesize;
  +        int percentTransmitted = 0;
  +
           try {
               log("Sending: " + localFile.getName() + " : " + 
localFile.length());
               while (true) {
  @@ -159,6 +195,12 @@
                   }
                   out.write(buf, 0, len);
                   totalLength += len;
  +
  +                if (trackProgress) {
  +                    percentTransmitted = trackProgress(initFilesize, 
  +                                                       totalLength, 
  +                                                       percentTransmitted);
  +                }
               }
               out.flush();
               sendAck(out);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to