On Tue, Sep 27, 2005 at 07:10:31PM +0200, Guillaume Etorre wrote: > Is there any reason for --delete not to delete when used with --dirs?
It's a historical reason due to the original delete code only knowing how to handle a from-the-top recursion pass. When I improved the delete code in 2.6.4 (implementing --delete-during and making it more memory efficient), the new algorithm is now capable of handling deletions in individual directories, so all it would take to implement this is to tweak the options processing to not disable --delete when --dirs is enabled, and to properly mark directories whose content was sent as opposed to solo directories. The attached patch does this, and I don't think it has any unintended side-effects. Feel free to give it a try. ..wayne..
--- flist.c 17 Sep 2005 21:49:24 -0000 1.304 +++ flist.c 28 Sep 2005 17:02:58 -0000 @@ -650,7 +650,7 @@ static struct file_struct *receive_file_ if (basename_len == 1+1 && *basename == '.') /* +1 for '\0' */ file->dir.depth--; if (flags & XMIT_TOP_DIR) { - in_del_hier = 1; + in_del_hier = recurse; del_hier_name_len = file->dir.depth == 0 ? 0 : l1 + l2; if (relative_paths && del_hier_name_len > 2 && basename_len == 1+1 && *basename == '.') @@ -1228,10 +1228,11 @@ struct file_list *send_file_list(int f, if (one_file_system) filesystem_dev = st.st_dev; - if ((file = send_file_name(f, flist, fname, XMIT_TOP_DIR))) { - if (recurse || (xfer_dirs && is_dot_dir)) + if (recurse || (xfer_dirs && is_dot_dir)) { + if ((file = send_file_name(f, flist, fname, XMIT_TOP_DIR))) send_if_directory(f, flist, file); - } + } else + send_file_name(f, flist, fname, 0); if (olddir[0]) { flist_dir = NULL; --- options.c 21 Sep 2005 22:39:49 -0000 1.278 +++ options.c 28 Sep 2005 17:02:59 -0000 @@ -1022,7 +1022,7 @@ int parse_arguments(int *argc, const cha "You may not combine multiple --delete-WHEN options.\n"); return 0; } - if (!recurse) { + if (!recurse && !xfer_dirs) { delete_before = delete_during = delete_after = 0; delete_mode = delete_excluded = 0; } else if (delete_before || delete_during || delete_after)
-- To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/rsync Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html