X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/5dd14f0c3388f69932d521915e039e32b9e6d970..refs/heads/hacks/backup-whole-dirs:/generator.c diff --git a/generator.c b/generator.c index 85577408..a97ce207 100644 --- a/generator.c +++ b/generator.c @@ -182,7 +182,9 @@ static enum delret delete_item(char *fbuf, uint16 mode, uint16 flags) --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. */ } @@ -190,12 +192,14 @@ static enum delret delete_item(char *fbuf, uint16 mode, uint16 flags) 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;