Progress reporting: N more to check
Jim Salter
jim at jrssystems.net
Tue Jan 13 06:40:09 GMT 2004
YES YES YES YES YES me likey me likey me ruv you rong time.
I've been wanting something like this forever. Who really gives a rat's
ass about the %age of the current file, most of the time; it's ALL about
the percentage of the total job done. I'd love to see this make a
point-release so we don't have to worry about patching it in.
-J
Wayne Davison wrote:
> A recent posting here got me thinking about having the --progress
> output tell the user about how many files were left to go in the
> transfer. I submit the attached patch which outputs an extra suffix
> onto the progress line at the end of each file's transfer (so it
> only appears once per file, not on every status update). The output
> would look like this:
>
> [...]
> flist.c
> 35671 100% 6.67MB/s 0:00:00 (#3; 262 more to check)
> flist.o
> 87288 100% 4.59MB/s 0:00:00 (#4; 261 more to check)
> log.c
> 13812 100% 12.50MB/s 0:00:00 (#5; 221 more to check)
> [...]
>
> The "to check" part is perhaps a little verbose, but it helps to
> alert the user that we're not talking about how many files are left
> to transfer (since we won't know that number until we check them)
> and the "more" number will often not go down to zero (if the final
> file in the list is up-to-date).
>
> Thoughts? Suggestions?
>
> ..wayne..
>
>
> ------------------------------------------------------------------------
>
> --- log.c 13 Jan 2004 04:50:45 -0000 1.69
> +++ log.c 13 Jan 2004 04:51:01 -0000
> @@ -191,6 +191,8 @@ void log_init(void)
> #ifndef LOG_NDELAY
> logit(LOG_INFO,"rsyncd started\n");
> #endif
> +
> + stats.current_file_index = -1;
> }
>
> void log_open(void)
> --- progress.c 13 Jan 2004 05:13:57 -0000 1.5
> +++ progress.c 13 Jan 2004 05:00:29 -0000
> @@ -21,6 +21,7 @@
>
> #include "rsync.h"
>
> +extern struct stats stats;
> extern int am_server;
>
> static OFF_T last_ofs;
> @@ -45,6 +46,7 @@ static unsigned long msdiff(struct timev
> static void rprint_progress(OFF_T ofs, OFF_T size, struct timeval *now,
> int is_last)
> {
> + char eol[256];
> int pct = (ofs == size) ? 100 : (int)((100.0*ofs)/size);
> unsigned long diff = msdiff(&start_time, now);
> double rate = diff ? (double) (ofs-start_ofs) * 1000.0 / diff / 1024.0 : 0;
> @@ -72,10 +74,16 @@ static void rprint_progress(OFF_T ofs, O
> remain_m = (int) (remain / 60.0) % 60;
> remain_h = (int) (remain / 3600.0);
>
> + if (is_last) {
> + int todo = stats.num_files - stats.num_untransferred_files
> + - stats.num_transferred_files;
> + snprintf(eol, sizeof eol, " (#%d; %d more to check)\n",
> + stats.num_transferred_files, todo);
> + } else
> + strcpy(eol, "\r");
> rprintf(FINFO, "%12.0f %3d%% %7.2f%s %4d:%02d:%02d%s",
> (double) ofs, pct, rate, units,
> - remain_h, remain_m, remain_s,
> - is_last ? "\n" : "\r");
> + remain_h, remain_m, remain_s, eol);
> }
>
> void end_progress(OFF_T size)
> --- receiver.c 8 Jan 2004 00:45:41 -0000 1.61
> +++ receiver.c 13 Jan 2004 06:19:41 -0000
> @@ -328,6 +328,9 @@ int recv_files(int f_in,struct file_list
>
> file = flist->files[i];
>
> + if (phase == 0)
> + stats.num_untransferred_files += i - stats.current_file_index - 1;
> + stats.current_file_index = i;
> stats.num_transferred_files++;
> stats.total_transferred_size += file->length;
> cleanup_got_literal = 0;
> --- rsync.h 12 Jan 2004 03:48:43 -0000 1.170
> +++ rsync.h 13 Jan 2004 06:17:50 -0000
> @@ -477,6 +477,8 @@ struct stats {
> int flist_size;
> int num_files;
> int num_transferred_files;
> + int num_untransferred_files;
> + int current_file_index;
> };
>
>
> --- sender.c 10 Jan 2004 20:16:18 -0000 1.32
> +++ sender.c 13 Jan 2004 06:19:53 -0000
> @@ -25,6 +25,7 @@ extern struct stats stats;
> extern int io_error;
> extern int dry_run;
> extern int am_server;
> +extern int do_progress;
>
>
> /**
> @@ -155,6 +156,9 @@ void send_files(struct file_list *flist,
>
> file = flist->files[i];
>
> + if (phase == 0)
> + stats.num_untransferred_files += i - stats.current_file_index - 1;
> + stats.current_file_index = i;
> stats.num_transferred_files++;
> stats.total_transferred_size += file->length;
>
>
More information about the rsync
mailing list