*/
#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 always_checksum;
extern int checksum_len;
extern char *partial_dir;
-extern char *basis_dir[];
extern int compare_dest;
extern int copy_dest;
extern int link_dest;
extern char *backup_dir;
extern char *backup_suffix;
extern int backup_suffix_len;
+extern char *basis_dir[MAX_BASIS_DIRS+1];
extern struct file_list *cur_flist, *first_flist, *dir_flist;
extern struct filter_list_struct daemon_filter_list;
--file_extra_cnt;
uid_ndx = 0;
}
- if (ret == DR_NOT_EMPTY || ret == DR_AT_LIMIT)
+ /* In Peach's use case, we want to move a deleted directory
+ * even if it contains (protected) previous backup files. */
+ if (make_backups < 2 && (ret == DR_NOT_EMPTY || ret == DR_AT_LIMIT))
goto check_ret;
/* OK: try to delete the directory. */
}
if (!(flags & DEL_MAKE_ROOM) && max_delete >= 0 && ++deletion_count > max_delete)
return DR_AT_LIMIT;
- if (S_ISDIR(mode)) {
- what = "rmdir";
- ok = do_rmdir(fbuf) == 0;
- } else if (make_backups > 0 && (backup_dir || !is_backup_file(fbuf))) {
+ if (make_backups > 0 && (backup_dir || !is_backup_file(fbuf))
+ /* Allow a dir to be backed up as a whole? */
+ && (make_backups >= 2 || !S_ISDIR(mode))) {
what = "make_backup";
ok = make_backup(fbuf);
+ } else if (S_ISDIR(mode)) {
+ what = "rmdir";
+ ok = do_rmdir(fbuf) == 0;
} else {
what = "unlink";
ok = robust_unlink(fbuf) == 0;
if ((int64)sum->count != l)
sum->count = -1;
- if (sum->count && DEBUG_GTE(CHKSUM, 2)) {
+ 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));
}
}
sum1 = get_checksum1(map, n1);
get_checksum2(map, n1, sum2);
- if (DEBUG_GTE(CHKSUM, 3)) {
+ 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));
}
}
fnamecmp_type = FNAMECMP_BACKUP;
}
- if (DEBUG_GTE(CHKSUM, 3)) {
+ 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(CHKSUM, 2))
+ if (DEBUG_GTE(DELTASUM, 2))
rprintf(FINFO, "generating and sending sums for %d\n", ndx);
notify_others:
while (1) {
#ifdef SUPPORT_HARD_LINKS
if (preserve_hard_links && (ndx = get_hlink_num()) != -1) {
- flist = flist_for_ndx(ndx);
- assert(flist != NULL);
+ flist = flist_for_ndx(ndx, "check_for_finished_files.1");
file = flist->files[ndx - flist->ndx_start];
assert(file->flags & FLAG_HLINKED);
finish_hard_link(file, f_name(file, fbuf), ndx, NULL, itemizing, code, -1);
ignore_times++;
flist = cur_flist;
- cur_flist = flist_for_ndx(ndx);
+ cur_flist = flist_for_ndx(ndx, "check_for_finished_files.2");
file = cur_flist->files[ndx - cur_flist->ndx_start];
if (solo_file)
touch_up_dirs(dir_flist, -1);
if (max_delete >= 0 && deletion_count > max_delete) {
- rprintf(FINFO,
+ rprintf(FWARNING,
"Deletions stopped due to --max-delete limit (%d skipped)\n",
deletion_count - max_delete);
io_error |= IOERR_DEL_LIMIT;