X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/f3d6d4800b35fd65d2395defdb57fed16cea3e85..ab3d6c6025162c19c082602aa1e488f22e40d392:/receiver.c diff --git a/receiver.c b/receiver.c index 26ed3245..4afdfc59 100644 --- a/receiver.c +++ b/receiver.c @@ -3,7 +3,7 @@ * * Copyright (C) 1996-2000 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras - * Copyright (C) 2003, 2004, 2005, 2006 Wayne Davison + * Copyright (C) 2003, 2004, 2005, 2006, 2007 Wayne Davison * * 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 @@ -26,7 +26,7 @@ extern int verbose; extern int do_xfers; extern int am_server; extern int do_progress; -extern int incremental; +extern int inc_recurse; extern int log_before_transfer; extern int stdout_format_has_i; extern int logfile_format_has_i; @@ -49,7 +49,6 @@ extern int checksum_seed; extern int inplace; extern int delay_updates; extern struct stats stats; -extern char *stdout_format; extern char *tmpdir; extern char *partial_dir; extern char *basis_dir[]; @@ -57,7 +56,7 @@ extern struct file_list *cur_flist, *first_flist; extern struct filter_list_struct server_filter_list; static struct bitbag *delayed_bits = NULL; -static int phase = 0; +static int phase = 0, redoing = 0; /* We're either updating the basis file or an identical copy: */ static int updating_basis; @@ -314,12 +313,12 @@ static int get_next_gen_ndx(int fd, int next_gen_ndx, int desired_ndx) if (next_gen_ndx >= 0) { rprintf(FINFO, "(No batched update for%s \"%s\")\n", - phase ? " resend of" : "", + redoing ? " resend of" : "", f_name(cur_flist->files[next_gen_ndx], NULL)); } next_gen_ndx = read_int(fd); if (next_gen_ndx == -1) { - if (incremental) + if (inc_recurse) next_gen_ndx = first_flist->prev->count + first_flist->prev->ndx_start; else next_gen_ndx = cur_flist->count; @@ -366,13 +365,13 @@ int recv_files(int f_in, char *local_name) ndx = read_ndx_and_attrs(f_in, -1, &iflags, &fnamecmp_type, xname, &xlen); if (ndx == NDX_DONE) { - if (incremental && first_flist) { + if (inc_recurse && first_flist) { flist_free(first_flist); if (first_flist) continue; } if (read_batch && cur_flist) { - int high = incremental + int high = inc_recurse ? first_flist->prev->count + first_flist->prev->ndx_start : cur_flist->count; get_next_gen_ndx(batch_gen_fd, next_gen_ndx, high); @@ -412,6 +411,7 @@ int recv_files(int f_in, char *local_name) append_mode = -append_mode; sparse_files = -sparse_files; csum_length = SUM_LENGTH; + redoing = 1; } } else { if (csum_length != SHORT_SUM_LENGTH) { @@ -420,6 +420,7 @@ int recv_files(int f_in, char *local_name) append_mode = -append_mode; sparse_files = -sparse_files; csum_length = SHORT_SUM_LENGTH; + redoing = 0; } } @@ -663,11 +664,11 @@ int recv_files(int f_in, char *local_name) cleanup_disable(); if (recv_ok > 0) { - if (remove_source_files || incremental + if (remove_source_files || inc_recurse || (preserve_hard_links && F_IS_HLINKED(file))) send_msg_int(MSG_SUCCESS, ndx); } else if (!recv_ok) { - enum logcode msgtype = phase || read_batch ? FERROR : FINFO; + enum logcode msgtype = redoing || read_batch ? FERROR : FINFO; if (msgtype == FERROR || verbose) { char *errstr, *redostr, *keptstr; if (!(keep_partial && partialptr) && !inplace) @@ -687,10 +688,11 @@ int recv_files(int f_in, char *local_name) "%s: %s failed verification -- update %s%s.\n", errstr, fname, keptstr, redostr); } - if (!phase || incremental) { + if (!redoing) { send_msg_int(MSG_REDO, ndx); file->flags |= FLAG_FILE_SENT; - } + } else if (inc_recurse) + send_msg_int(MSG_NO_SEND, ndx); } } if (make_backups < 0)