Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Call log_delete() from delete_file() anytime that DEL_TERSE is
[rsync/rsync.git]
/
flist.c
diff --git
a/flist.c
b/flist.c
index
6f94e8c
..
e19b06a
100644
(file)
--- 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 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;
extern char *backup_dir;
extern char *backup_suffix;
extern int backup_suffix_len;
@@
-963,7
+962,7
@@
skip_filters:
file->mode = save_mode;
}
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;
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;
send_directory(ignore_filter_rules ? -2 : -1, dirlist, dirbuf, dlen);
recurse = save_recurse;
+ clean_flist(dirlist, 0, 0);
+
return dirlist;
}
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;
struct file_list *dirlist;
char buf[MAXPATHLEN];
int j, zap_dir, ok;
+ void *save_filters;
if (max_delete && deletion_count >= max_delete)
return -1;
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) {
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;
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) {
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;
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;
}
flags |= DEL_FORCE_RECURSE;
+ save_filters = push_local_filters(fname, strlen(fname));
+
dirlist = get_dirlist(fname, 0);
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) {
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);
}
flist_free(dirlist);
+ pop_local_filters(save_filters);
+
if (max_delete && deletion_count >= max_delete)
return -1;
if (do_rmdir(fname) == 0) {
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) {
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';
recurse = -1;
fbuf[dlen] = '\0';
+ clean_flist(dir_list, 0, 0);
+
if (verbose > 3)
output_flist(dir_list, "delete");
if (verbose > 3)
output_flist(dir_list, "delete");