Diff for /embedaddon/rsync/progress.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2012/02/17 15:09:30 version 1.1.1.2, 2013/10/14 07:51:14
Line 4 Line 4
  * Copyright (C) 1996-2000 Andrew Tridgell   * Copyright (C) 1996-2000 Andrew Tridgell
  * Copyright (C) 1996 Paul Mackerras   * Copyright (C) 1996 Paul Mackerras
  * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>   * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
 * Copyright (C) 2003-2009 Wayne Davison * Copyright (C) 2003-2013 Wayne Davison
  *   *
  * This program is free software; you can redistribute it and/or modify   * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by   * it under the terms of the GNU General Public License as published by
Line 21 Line 21
  */   */
   
 #include "rsync.h"  #include "rsync.h"
   #include "inums.h"
   
 extern int am_server;  extern int am_server;
   extern int flist_eof;
 extern int need_unsorted_flist;  extern int need_unsorted_flist;
   extern int output_needs_newline;
 extern struct stats stats;  extern struct stats stats;
 extern struct file_list *cur_flist;  extern struct file_list *cur_flist;
   
Line 40  struct progress_history { Line 43  struct progress_history {
         OFF_T ofs;          OFF_T ofs;
 };  };
   
 int progress_is_active = 0;  
   
 static struct progress_history ph_start;  static struct progress_history ph_start;
 static struct progress_history ph_list[PROGRESS_HISTORY_SECS];  static struct progress_history ph_list[PROGRESS_HISTORY_SECS];
 static int newest_hpos, oldest_hpos;  static int newest_hpos, oldest_hpos;
Line 66  static void rprint_progress(OFF_T ofs, OFF_T size, str Line 67  static void rprint_progress(OFF_T ofs, OFF_T size, str
 {  {
         char rembuf[64], eol[128];          char rembuf[64], eol[128];
         const char *units;          const char *units;
         int pct = ofs == size ? 100 : (int) (100.0 * ofs / size);  
         unsigned long diff;          unsigned long diff;
         double rate, remain;          double rate, remain;
           int pct;
   
         if (is_last) {          if (is_last) {
                   int len = snprintf(eol, sizeof eol,
                           " (xfr#%d, %s-chk=%d/%d)\n",
                           stats.xferred_files, flist_eof ? "to" : "ir",
                           stats.num_files - current_file_index - 1,
                           stats.num_files);
                   if (INFO_GTE(PROGRESS, 2)) {
                           static int last_len = 0;
                           /* Drop \n and pad with spaces if line got shorter. */
                           if (last_len < --len)
                                   last_len = len;
                           eol[last_len] = '\0';
                           while (last_len > len)
                                   eol[--last_len] = ' ';
                           is_last = 0;
                   }
                 /* Compute stats based on the starting info. */                  /* Compute stats based on the starting info. */
                 if (!ph_start.time.tv_sec                  if (!ph_start.time.tv_sec
                     || !(diff = msdiff(&ph_start.time, now)))                      || !(diff = msdiff(&ph_start.time, now)))
Line 79  static void rprint_progress(OFF_T ofs, OFF_T size, str Line 95  static void rprint_progress(OFF_T ofs, OFF_T size, str
                 /* Switch to total time taken for our last update. */                  /* Switch to total time taken for our last update. */
                 remain = (double) diff / 1000.0;                  remain = (double) diff / 1000.0;
         } else {          } else {
                   strlcpy(eol, "  ", sizeof eol);
                 /* Compute stats based on recent progress. */                  /* Compute stats based on recent progress. */
                 if (!(diff = msdiff(&ph_list[oldest_hpos].time, now)))                  if (!(diff = msdiff(&ph_list[oldest_hpos].time, now)))
                         diff = 1;                          diff = 1;
Line 106  static void rprint_progress(OFF_T ofs, OFF_T size, str Line 123  static void rprint_progress(OFF_T ofs, OFF_T size, str
                          (int) remain % 60);                           (int) remain % 60);
         }          }
   
        if (is_last) {        output_needs_newline = 0;
                snprintf(eol, sizeof eol, " (xfer#%d, to-check=%d/%d)\n",        pct = ofs == size ? 100 : (int) (100.0 * ofs / size);
                        stats.num_transferred_files,        rprintf(FCLIENT, "\r%15s %3d%% %7.2f%s %s%s",
                        stats.num_files - current_file_index - 1, 
                        stats.num_files); 
        } else 
                strlcpy(eol, "\r", sizeof eol); 
        progress_is_active = 0; 
        rprintf(FCLIENT, "%12s %3d%% %7.2f%s %s%s", 
                 human_num(ofs), pct, rate, units, rembuf, eol);                  human_num(ofs), pct, rate, units, rembuf, eol);
        if (!is_last)        if (!is_last) {
                progress_is_active = 1;                output_needs_newline = 1;
                 rflush(FCLIENT);
         }
 }  }
   
 void set_current_file_index(struct file_struct *file, int ndx)  void set_current_file_index(struct file_struct *file, int ndx)
 {  {
        if (need_unsorted_flist)        if (!file)
                 current_file_index = cur_flist->used + cur_flist->ndx_start - 1;
         else if (need_unsorted_flist)
                 current_file_index = flist_find(cur_flist, file) + cur_flist->ndx_start;                  current_file_index = flist_find(cur_flist, file) + cur_flist->ndx_start;
         else          else
                 current_file_index = ndx;                  current_file_index = ndx;
Line 134  void end_progress(OFF_T size) Line 149  void end_progress(OFF_T size)
         if (!am_server) {          if (!am_server) {
                 struct timeval now;                  struct timeval now;
                 gettimeofday(&now, NULL);                  gettimeofday(&now, NULL);
                rprint_progress(size, size, &now, True);                if (INFO_GTE(PROGRESS, 2)) {
                         rprint_progress(stats.total_transferred_size,
                                         stats.total_size, &now, True);
                 } else {
                         rprint_progress(size, size, &now, True);
                         memset(&ph_start, 0, sizeof ph_start);
                 }
         }          }
         memset(&ph_start, 0, sizeof ph_start);  
 }  }
   
 void show_progress(OFF_T ofs, OFF_T size)  void show_progress(OFF_T ofs, OFF_T size)
Line 192  void show_progress(OFF_T ofs, OFF_T size) Line 212  void show_progress(OFF_T ofs, OFF_T size)
                 return;                  return;
 #endif  #endif
   
        rprint_progress(ofs, size, &now, False);        if (INFO_GTE(PROGRESS, 2)) {
                 rprint_progress(stats.total_transferred_size,
                                 stats.total_size, &now, False);
         } else
                 rprint_progress(ofs, size, &now, False);
 }  }

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>