X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/cda2ae84b3b0f78387c5937094b4f5525c92fc19..1347d5126a4d89718544d976f64943dfa93dd8c4:/receiver.c diff --git a/receiver.c b/receiver.c index 49d1bf22..890fadd1 100644 --- a/receiver.c +++ b/receiver.c @@ -303,14 +303,18 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen) int phase=0; int recv_ok; extern struct stats stats; + extern int preserve_perms; + extern int delete_after; struct stats initial_stats; if (verbose > 2) { rprintf(FINFO,"recv_files(%d) starting\n",flist->count); } - if (recurse && delete_mode && !local_name && flist->count>0) { - delete_files(flist); + if (!delete_after) { + if (recurse && delete_mode && !local_name && flist->count>0) { + delete_files(flist); + } } while (1) { @@ -383,6 +387,13 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen) continue; } + if (fd1 != -1 && !preserve_perms) { + /* if the file exists already and we aren't perserving + presmissions then act as though the remote end sent + us the file permissions we already have */ + file->mode = st.st_mode; + } + if (fd1 != -1 && st.st_size > 0) { buf = map_file(fd1,st.st_size); if (verbose > 2) @@ -470,6 +481,12 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen) } } + if (delete_after) { + if (recurse && delete_mode && !local_name && flist->count>0) { + delete_files(flist); + } + } + if (preserve_hard_links) do_hard_links(flist);