# $Id: rsync-show_current_file.diff,v 1.1 2010/10/28 16:34:37 jcs Exp $ # # make rsync respond to SIGINFO and print the name of the file currently being # transferred. useful for investigating long-running jobs where -v or # --progress hasn't been specified. # # by joshua stein # --- main.c.orig Sat Dec 19 15:39:49 2009 +++ main.c Thu Oct 28 07:41:50 2010 @@ -75,6 +75,7 @@ extern char *shell_cmd; extern char *batch_name; extern char *password_file; +char *current_fname; extern char curr_dir[MAXPATHLEN]; extern struct file_list *first_flist; extern struct filter_list_struct daemon_filter_list; @@ -1298,6 +1299,14 @@ _exit(0); } +static RETSIGTYPE siginfo_handler(UNUSED(int val)) +{ + if (current_fname) + printf("currently transferring %s\n", current_fname); + else + printf("not transferring any file\n"); +} + RETSIGTYPE remember_children(UNUSED(int val)) { #ifdef WNOHANG @@ -1392,6 +1401,7 @@ SIGACTMASK(SIGUSR1, sigusr1_handler); SIGACTMASK(SIGUSR2, sigusr2_handler); SIGACTMASK(SIGCHLD, remember_children); + SIGACTMASK(SIGINFO, siginfo_handler); #ifdef MAINTAINER_MODE SIGACTMASK(SIGSEGV, rsync_panic_handler); SIGACTMASK(SIGFPE, rsync_panic_handler); Exit 1 --- receiver.c.orig Sun Apr 12 14:48:59 2009 +++ receiver.c Thu Oct 28 07:41:52 2010 @@ -54,6 +54,7 @@ extern char *tmpdir; extern char *partial_dir; extern char *basis_dir[]; +extern char *current_fname; extern struct file_list *cur_flist, *first_flist, *dir_flist; extern struct filter_list_struct daemon_filter_list; @@ -478,6 +479,8 @@ else file = dir_flist->files[cur_flist->parent_ndx]; fname = local_name ? local_name : f_name(file, fbuf); + + current_fname = fname; if (verbose > 2) rprintf(FINFO, "recv_files(%s)\n", fname); Exit 1 --- sender.c.orig Sat Dec 12 19:23:03 2009 +++ sender.c Thu Oct 28 07:41:53 2010 @@ -42,6 +42,7 @@ extern int inplace; extern int batch_fd; extern int write_batch; +extern char *current_fname; extern struct stats stats; extern struct file_list *cur_flist, *first_flist, *dir_flist; @@ -221,6 +222,8 @@ if (verbose > 2) rprintf(FINFO, "send_files(%d, %s%s%s)\n", ndx, path,slash,fname); + + current_fname = fname; #ifdef SUPPORT_XATTRS if (preserve_xattrs && iflags & ITEM_REPORT_XATTR && do_xfers)