X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/0c096e29aa0e89dd8b45ac1d898f142c2c2094de..b791d6802bad5c9403a6bb8aab8536c36ef90213:/flist.c diff --git a/flist.c b/flist.c index 109497d4..7c21f73e 100644 --- a/flist.c +++ b/flist.c @@ -66,6 +66,7 @@ extern int sanitize_paths; extern int munge_symlinks; extern int need_unsorted_flist; extern int output_needs_newline; +extern int sender_keeps_checksum; extern int unsort_ndx; extern struct stats stats; extern char *filesfrom_host; @@ -475,10 +476,15 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, xflags |= XMIT_HLINK_FIRST; } if (DEBUG_GTE(HLINK, 1)) { - rprintf(FINFO, "found %s dev:inode %s:%s (#%ld)\n", - xflags & XMIT_HLINK_FIRST ? "first" : "matching", - big_num(tmp_dev, 0), big_num(tmp_ino, 0), - (long)np->data - 1); + if (first_hlink_ndx >= 0) { + rprintf(FINFO, "[%s] #%d hard-links #%d (%sabbrev)\n", + who_am_i(), first_ndx + ndx, first_hlink_ndx, + first_hlink_ndx >= first_ndx ? "" : "un"); + } else if (DEBUG_GTE(HLINK, 3)) { + rprintf(FINFO, "[%s] dev:inode for #%d is %s:%s\n", + who_am_i(), first_ndx + ndx, + big_num(tmp_dev, 0), big_num(tmp_ino, 0)); + } } } else { if (tmp_dev == dev) { @@ -529,11 +535,8 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, #ifdef SUPPORT_HARD_LINKS if (first_hlink_ndx >= 0) { write_varint(f, first_hlink_ndx); - if (first_hlink_ndx >= first_ndx) { - if (DEBUG_GTE(HLINK, 2)) - rprintf(FINFO, "sending abbr. entry\n"); + if (first_hlink_ndx >= first_ndx) goto the_end; - } } #endif @@ -728,9 +731,9 @@ static struct file_struct *recv_file_entry(struct file_list *flist, first_hlink_ndx, flist->ndx_start + flist->used); exit_cleanup(RERR_PROTOCOL); } - if (DEBUG_GTE(HLINK, 2)) { - rprintf(FINFO, "hard-link reference #%d (%sabbr.)\n", - first_hlink_ndx, + if (DEBUG_GTE(HLINK, 1)) { + rprintf(FINFO, "[%s] #%d hard-links #%d (%sabbrev)\n", + who_am_i(), flist->used+flist->ndx_start, first_hlink_ndx, first_hlink_ndx >= flist->ndx_start ? "" : "un"); } if (first_hlink_ndx >= flist->ndx_start) { @@ -1207,6 +1210,12 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, extra_len += EXTRA_LEN; #endif + if (always_checksum && am_sender && S_ISREG(st.st_mode)) { + file_checksum(thisname, tmp_sum, st.st_size); + if (sender_keeps_checksum) + extra_len += SUM_EXTRA_CNT * EXTRA_LEN; + } + #if EXTRA_ROUNDING > 0 if (extra_len & (EXTRA_ROUNDING * EXTRA_LEN)) extra_len = (extra_len | (EXTRA_ROUNDING * EXTRA_LEN)) + EXTRA_LEN; @@ -1270,9 +1279,6 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, memcpy(bp + basename_len, linkname, linkname_len); #endif - if (always_checksum && am_sender && S_ISREG(st.st_mode)) - file_checksum(thisname, tmp_sum, st.st_size); - if (am_sender) F_PATHNAME(file) = pathname; else if (!pool) @@ -1303,6 +1309,9 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, return NULL; } + if (sender_keeps_checksum && S_ISREG(st.st_mode)) + memcpy(F_SUM(file), tmp_sum, checksum_len); + if (unsort_ndx) F_NDX(file) = dir_count; @@ -2208,12 +2217,13 @@ struct file_list *recv_file_list(int f) int dstart, flags; int64 start_read; - if (!first_flist) + if (!first_flist) { + if (show_filelist_p()) + start_filelist_progress("receiving file list"); + else if (inc_recurse && INFO_GTE(FLIST, 1) && !am_server) + rprintf(FCLIENT, "receiving incremental file list\n"); rprintf(FLOG, "receiving file list\n"); - if (show_filelist_p()) - start_filelist_progress("receiving file list"); - else if (inc_recurse && INFO_GTE(FLIST, 1) && !am_server && !first_flist) - rprintf(FCLIENT, "receiving incremental file list\n"); + } start_read = stats.total_read; @@ -2428,14 +2438,16 @@ struct file_list *flist_new(int flags, char *msg) if (flags & FLIST_TEMP) { if (!(flist->file_pool = pool_create(SMALL_EXTENT, 0, - out_of_memory, POOL_INTERN))) + out_of_memory, + POOL_INTERN))) out_of_memory(msg); } else { /* This is a doubly linked list with prev looping back to * the end of the list, but the last next pointer is NULL. */ if (!first_flist) { flist->file_pool = pool_create(NORMAL_EXTENT, 0, - out_of_memory, POOL_INTERN); + out_of_memory, + POOL_INTERN); if (!flist->file_pool) out_of_memory(msg);