X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/bc40a305032db262e72b92c938203fd2bd42e4c9..778124188914358b2a1d4e0046401acf6551ea76:/generator.c diff --git a/generator.c b/generator.c index cd67f0fc..4fad7f71 100644 --- a/generator.c +++ b/generator.c @@ -50,6 +50,7 @@ extern int delete_mode; extern int delete_before; extern int delete_during; extern int delete_after; +extern int delete_missing_args; extern int msgdone_cnt; extern int ignore_errors; extern int remove_source_files; @@ -96,7 +97,7 @@ extern mode_t orig_umask; extern uid_t our_uid; extern char *basis_dir[MAX_BASIS_DIRS+1]; extern struct file_list *cur_flist, *first_flist, *dir_flist; -extern struct filter_list_struct daemon_filter_list; +extern struct filter_list_struct filter_list, daemon_filter_list; int maybe_ATTRS_REPORT = 0; @@ -1030,7 +1031,11 @@ static void list_file_entry(struct file_struct *f) F_SYMLINK(f)); } else #endif - { + if (delete_missing_args && !f->mode) { + rprintf(FINFO, "%-*s %s\n", + colwidth + 31, "*missing", + f_name(f, NULL)); + } else { rprintf(FINFO, "%s %*s %s %s\n", permbuf, colwidth, comma_num(len), timestring(f->modtime), f_name(f, NULL)); @@ -1172,6 +1177,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, stat_errno = errno; } + if (delete_missing_args && file->mode == 0) { + if (filter_list.head && check_filter(&filter_list, FINFO, fname, is_dir) < 0) + return; + if (statret == 0) + delete_item(fname, sx.st.st_mode, del_opts); + return; + } + if (ignore_non_existing > 0 && statret == -1 && stat_errno == ENOENT) { if (is_dir) { if (is_dir < 0)