- Use the new delete_before var.
[rsync/rsync.git] / receiver.c
index 10673ca..76508bf 100644 (file)
@@ -21,7 +21,6 @@
 #include "rsync.h"
 
 extern int verbose;
-extern int recurse;
 extern int delete_after;
 extern int max_delete;
 extern int csum_length;
@@ -32,6 +31,7 @@ extern int batch_gen_fd;
 extern int am_server;
 extern int protocol_version;
 extern int relative_paths;
+extern int keep_dirs;
 extern int keep_dirlinks;
 extern int preserve_hard_links;
 extern int preserve_perms;
@@ -57,29 +57,6 @@ extern int inplace;
 extern struct exclude_list_struct server_exclude_list;
 
 
-static void delete_one(char *fn, int is_dir)
-{
-       if (!is_dir) {
-               if (robust_unlink(fn) != 0) {
-                       rsyserr(FERROR, errno, "delete_one: unlink %s failed",
-                               full_fname(fn));
-               } else if (verbose)
-                       rprintf(FINFO, "deleting %s\n", safe_fname(fn));
-       } else {
-               if (do_rmdir(fn) != 0) {
-                       if (errno != ENOTEMPTY && errno != EEXIST) {
-                               rsyserr(FERROR, errno,
-                                       "delete_one: rmdir %s failed",
-                                       full_fname(fn));
-                       }
-               } else if (verbose) {
-                       rprintf(FINFO, "deleting directory %s\n",
-                               safe_fname(fn));
-               }
-       }
-}
-
-
 static int is_backup_file(char *fn)
 {
        int k = strlen(fn) - backup_suffix_len;
@@ -105,7 +82,7 @@ void delete_files(struct file_list *flist)
        }
 
        for (j = 0; j < flist->count; j++) {
-               if (!(flist->files[j]->flags & FLAG_TOP_DIR)
+               if (!(flist->files[j]->flags & FLAG_DEL_START)
                    || !S_ISDIR(flist->files[j]->mode))
                        continue;
 
@@ -132,8 +109,10 @@ void delete_files(struct file_list *flist)
                                                rprintf(FINFO, "deleting %s\n",
                                                        safe_fname(f));
                                        }
-                               } else
-                                       delete_one(f, S_ISDIR(mode) != 0);
+                               } else {
+                                       delete_file(f, S_ISDIR(mode)
+                                               ? DEL_DIR | DEL_RECURSE : 0);
+                               }
                                deletion_count++;
                        }
                }
@@ -621,7 +600,7 @@ int recv_files(int f_in, struct file_list *flist, char *local_name,
        }
        make_backups = save_make_backups;
 
-       if (delete_after && recurse && !local_name && flist->count > 0)
+       if (delete_after && keep_dirs && !local_name && flist->count > 0)
                delete_files(flist);
 
        if (verbose > 2)