Dump an extraneous empty line.
[rsync/rsync.git] / generator.c
index b209812..7c329f2 100644 (file)
@@ -97,7 +97,7 @@ extern char *backup_dir;
 extern char *backup_suffix;
 extern int backup_suffix_len;
 extern struct file_list *cur_flist, *first_flist, *dir_flist;
-extern struct filter_list_struct server_filter_list;
+extern struct filter_list_struct daemon_filter_list;
 
 int ignore_perishable = 0;
 int non_perishable_cnt = 0;
@@ -557,10 +557,13 @@ static void do_delete_pass(void)
        for (j = 0; j < cur_flist->used; j++) {
                struct file_struct *file = cur_flist->sorted[j];
 
-               if (!(file->flags & FLAG_CONTENT_DIR))
+               f_name(file, fbuf);
+
+               if (!(file->flags & FLAG_CONTENT_DIR)) {
+                       change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(file));
                        continue;
+               }
 
-               f_name(file, fbuf);
                if (verbose > 1 && file->flags & FLAG_TOP_DIR)
                        rprintf(FINFO, "deleting in %s\n", fbuf);
 
@@ -1268,19 +1271,21 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                return;
        }
 
-       if (skip_dir && is_below(file, skip_dir)) {
-               if (is_dir)
-                       file->flags |= FLAG_MISSING_DIR;
+       if (skip_dir) {
+               if (is_below(file, skip_dir)) {
+                       if (is_dir)
+                               file->flags |= FLAG_MISSING_DIR;
 #ifdef SUPPORT_HARD_LINKS
-               else if (F_IS_HLINKED(file))
-                       handle_skipped_hlink(file, itemizing, code, f_out);
+                       else if (F_IS_HLINKED(file))
+                               handle_skipped_hlink(file, itemizing, code, f_out);
 #endif
-               return;
-       } else
+                       return;
+               }
                skip_dir = NULL;
+       }
 
-       if (server_filter_list.head) {
-               if (check_filter(&server_filter_list, fname, is_dir) < 0) {
+       if (daemon_filter_list.head) {
+               if (check_filter(&daemon_filter_list, FLOG, fname, is_dir) < 0) {
                        if (is_dir < 0)
                                return;
 #ifdef SUPPORT_HARD_LINKS
@@ -1312,8 +1317,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                statret = -1;
                stat_errno = ENOENT;
        } else {
-               dry_missing_dir = NULL;
                const char *dn = file->dirname ? file->dirname : ".";
+               dry_missing_dir = NULL;
                if (parent_dirname != dn && strcmp(parent_dirname, dn) != 0) {
                        if (relative_paths && !implied_dirs
                         && do_stat(dn, &sx.st) < 0) {
@@ -1409,7 +1414,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                        statret = -1;
                }
                if (dry_run && statret != 0) {
-                       dry_missing_dir = file;
+                       if (!dry_missing_dir)
+                               dry_missing_dir = file;
                        file->flags |= FLAG_MISSING_DIR;
                }
                real_ret = statret;
@@ -1477,8 +1483,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                        }
                }
                else if (delete_during && f_out != -1 && !phase
-                   && BITS_SETnUNSET(file->flags, FLAG_CONTENT_DIR, FLAG_MISSING_DIR))
-                       delete_in_dir(fname, file, &real_sx.st.st_dev);
+                   && !(file->flags & FLAG_MISSING_DIR)) {
+                       if (file->flags & FLAG_CONTENT_DIR)
+                               delete_in_dir(fname, file, &real_sx.st.st_dev);
+                       else
+                               change_local_filter_dir(fname, strlen(fname), F_DEPTH(file));
+               }
                goto cleanup;
        }
 
@@ -2172,16 +2182,18 @@ void generate_files(int f_out, const char *local_name)
                        f_name(fp, fbuf);
                        ndx = cur_flist->ndx_start - 1;
                        recv_generator(fbuf, fp, ndx, itemizing, code, f_out);
-                       if (delete_during && dry_run < 2 && !list_only) {
-                               if (BITS_SETnUNSET(fp->flags, FLAG_CONTENT_DIR, FLAG_MISSING_DIR)) {
+                       if (delete_during && dry_run < 2 && !list_only
+                        && !(fp->flags & FLAG_MISSING_DIR)) {
+                               if (fp->flags & FLAG_CONTENT_DIR) {
                                        dev_t dirdev;
                                        if (one_file_system) {
                                                uint32 *devp = F_DIR_DEV_P(fp);
                                                dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp));
                                        } else
                                                dirdev = MAKEDEV(0, 0);
-                                       delete_in_dir(f_name(fp, fbuf), fp, &dirdev);
-                               }
+                                       delete_in_dir(fbuf, fp, &dirdev);
+                               } else
+                                       change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp));
                        }
                }
                for (i = cur_flist->low; i <= cur_flist->high; i++) {