#include "rsync.h"
extern int verbose;
-extern int recurse;
extern int delete_after;
extern int max_delete;
extern int csum_length;
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;
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;
}
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;
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++;
}
}
}
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)