X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/94dcbf8367e98354b51435c8223dbf9ef170ec99..f08ca43472b518b93230acd853532d79b7e8a3a5:/flist.c diff --git a/flist.c b/flist.c index 6f94e8c5..e19b06ac 100644 --- a/flist.c +++ b/flist.c @@ -63,7 +63,6 @@ extern int force_delete; extern int orig_umask; extern int make_backups; extern unsigned int curr_dir_len; -extern char *log_format; extern char *backup_dir; extern char *backup_suffix; extern int backup_suffix_len; @@ -963,7 +962,7 @@ skip_filters: file->mode = save_mode; } - if (!S_ISDIR(st.st_mode)) + if (S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)) stats.total_size += st.st_size; return file; @@ -1767,6 +1766,8 @@ struct file_list *get_dirlist(const char *dirname, int ignore_filter_rules) send_directory(ignore_filter_rules ? -2 : -1, dirlist, dirbuf, dlen); recurse = save_recurse; + clean_flist(dirlist, 0, 0); + return dirlist; } @@ -1788,6 +1789,7 @@ int delete_file(char *fname, int mode, int flags) struct file_list *dirlist; char buf[MAXPATHLEN]; int j, zap_dir, ok; + void *save_filters; if (max_delete && deletion_count >= max_delete) return -1; @@ -1798,7 +1800,7 @@ int delete_file(char *fname, int mode, int flags) else ok = robust_unlink(fname) == 0; if (ok) { - if ((verbose || log_format) && !(flags & DEL_TERSE)) + if (!(flags & DEL_TERSE)) log_delete(fname, mode); deletion_count++; return 0; @@ -1821,7 +1823,7 @@ int delete_file(char *fname, int mode, int flags) else ok = do_rmdir(fname) == 0; if (ok) { - if ((verbose || log_format) && !(flags & DEL_TERSE)) + if (!(flags & DEL_TERSE)) log_delete(fname, mode); deletion_count++; return 0; @@ -1835,8 +1837,10 @@ int delete_file(char *fname, int mode, int flags) } flags |= DEL_FORCE_RECURSE; + save_filters = push_local_filters(fname, strlen(fname)); + dirlist = get_dirlist(fname, 0); - for (j = dirlist->count; j-- > 0; ) { + for (j = dirlist->count; j--; ) { struct file_struct *fp = dirlist->files[j]; f_name_to(fp, buf); if (delete_file(buf, fp->mode, flags & ~DEL_TERSE) != 0) { @@ -1846,11 +1850,13 @@ int delete_file(char *fname, int mode, int flags) } flist_free(dirlist); + pop_local_filters(save_filters); + if (max_delete && deletion_count >= max_delete) return -1; if (do_rmdir(fname) == 0) { - if ((verbose || log_format) && !(flags & DEL_TERSE)) + if (!(flags & DEL_TERSE)) log_delete(fname, mode); deletion_count++; } else if (errno != ENOTEMPTY && errno != ENOENT) { @@ -1945,6 +1951,8 @@ void delete_in_dir(struct file_list *flist, char *fbuf, recurse = -1; fbuf[dlen] = '\0'; + clean_flist(dir_list, 0, 0); + if (verbose > 3) output_flist(dir_list, "delete");