*/
#include "rsync.h"
+#include "inums.h"
extern int dry_run;
extern int do_xfers;
extern int remove_source_files;
extern int delay_updates;
extern int update_only;
+extern int human_readable;
extern int ignore_existing;
extern int ignore_non_existing;
extern int inplace;
extern int max_delete;
extern int force_delete;
extern int one_file_system;
-extern int check_for_io_err;
extern struct stats stats;
extern dev_t filesystem_dev;
extern mode_t orig_umask;
int maybe_ATTRS_REPORT = 0;
static dev_t dev_zero;
-static int deletion_count = 0; /* used to implement --max-delete */
+static int skipped_deletes = 0;
static int deldelay_size = 0, deldelay_cnt = 0;
static char *deldelay_buf = NULL;
static int deldelay_fd = -1;
/* OK: try to delete the directory. */
}
- if (!(flags & DEL_MAKE_ROOM) && max_delete >= 0 && ++deletion_count > max_delete)
+ if (!(flags & DEL_MAKE_ROOM) && max_delete >= 0 && stats.deleted_files >= max_delete) {
+ skipped_deletes++;
return DR_AT_LIMIT;
+ }
if (S_ISDIR(mode)) {
what = "rmdir";
}
if (ok) {
- if (!(flags & DEL_MAKE_ROOM))
+ if (!(flags & DEL_MAKE_ROOM)) {
log_delete(fbuf, mode);
+ stats.deleted_files++;
+ if (S_ISREG(mode)) {
+ /* Nothing more to count */
+ } else if (S_ISDIR(mode))
+ stats.deleted_dirs++;
+#ifdef SUPPORT_LINKS
+ else if (S_ISLNK(mode))
+ stats.deleted_symlinks++;
+#endif
+ else if (IS_DEVICE(mode))
+ stats.deleted_symlinks++;
+ else
+ stats.deleted_specials++;
+ }
ret = DR_SUCCESS;
} else {
if (S_ISDIR(mode) && errno == ENOTEMPTY) {
rsyserr(FERROR, errno, "delete_file: %s(%s) failed",
what, fbuf);
ret = DR_FAILURE;
- } else {
- deletion_count--;
+ } else
ret = DR_SUCCESS;
- }
}
check_ret:
if (sum->count && DEBUG_GTE(DELTASUM, 2)) {
rprintf(FINFO,
"count=%s rem=%ld blength=%ld s2length=%d flength=%s\n",
- big_num(sum->count, 0), (long)sum->remainder, (long)sum->blength,
- sum->s2length, big_num(sum->flength, 0));
+ big_num(sum->count), (long)sum->remainder, (long)sum->blength,
+ sum->s2length, big_num(sum->flength));
}
}
if (DEBUG_GTE(DELTASUM, 3)) {
rprintf(FINFO,
"chunk[%s] offset=%s len=%ld sum1=%08lx\n",
- big_num(i, 0), big_num(offset - n1, 0), (long)n1,
+ big_num(i), big_num(offset - n1), (long)n1,
(unsigned long)sum1);
}
write_int(f_out, sum1);
{
char permbuf[PERMSTRING_SIZE];
int64 len;
+ int colwidth = human_readable ? 14 : 11;
if (!F_IS_ACTIVE(f)) {
/* this can happen if duplicate names were removed */
#ifdef SUPPORT_LINKS
if (preserve_links && S_ISLNK(f->mode)) {
- rprintf(FINFO, "%s %11s %s %s -> %s\n",
- permbuf, big_num(len, 0), timestring(f->modtime),
- f_name(f, NULL), F_SYMLINK(f));
+ rprintf(FINFO, "%s %*s %s %s -> %s\n",
+ permbuf, colwidth, comma_num(len),
+ timestring(f->modtime), f_name(f, NULL),
+ F_SYMLINK(f));
} else
#endif
{
- rprintf(FINFO, "%s %11s %s %s\n",
- permbuf, big_num(len, 0), timestring(f->modtime),
- f_name(f, NULL));
+ rprintf(FINFO, "%s %*s %s %s\n",
+ permbuf, colwidth, comma_num(len),
+ timestring(f->modtime), f_name(f, NULL));
}
}
if (DEBUG_GTE(DELTASUM, 3)) {
rprintf(FINFO, "gen mapped %s of size %s\n",
- fnamecmp, big_num(sx.st.st_size, 0));
+ fnamecmp, big_num(sx.st.st_size));
}
if (DEBUG_GTE(DELTASUM, 2))
dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp));
} else
dirdev = MAKEDEV(0, 0);
- /* We must be sure we've had a chance to receive an I/O
- * error for this directory before we delete in it. */
- while (check_for_io_err && !cur_flist->next && !flist_eof)
- wait_for_receiver();
delete_in_dir(fbuf, fp, &dirdev);
} else
change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp));
}
} while ((cur_flist = cur_flist->next) != NULL);
+ if (read_batch && inc_recurse)
+ write_ndx(f_out, NDX_DONE);
+
if (delete_during)
delete_in_dir(NULL, NULL, &dev_zero);
phase++;
rprintf(FINFO, "generate_files phase=%d\n", phase);
write_ndx(f_out, NDX_DONE);
+ write_del_stats(f_out);
+
/* Reduce round-trip lag-time for a useless delay-updates phase. */
if (protocol_version >= 29 && !delay_updates)
write_ndx(f_out, NDX_DONE);
&& dir_tweaking && (!inc_recurse || delete_during == 2))
touch_up_dirs(dir_flist, -1);
- if (max_delete >= 0 && deletion_count > max_delete) {
+ if (max_delete >= 0 && skipped_deletes) {
rprintf(FWARNING,
"Deletions stopped due to --max-delete limit (%d skipped)\n",
- deletion_count - max_delete);
+ skipped_deletes);
io_error |= IOERR_DEL_LIMIT;
}