From: Wayne Davison Date: Sat, 31 May 2008 18:27:13 +0000 (-0700) Subject: If an arg is excluded, don't include its implied dirs. X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/commitdiff_plain/d1f66d8d796965d90552db75d63bdbbf0b98c3f9?hp=cc911409d6561d66094c2303e9a79b41ea4f2ef5 If an arg is excluded, don't include its implied dirs. --- diff --git a/NEWS b/NEWS index c77da63b..9712609e 100644 --- a/NEWS +++ b/NEWS @@ -33,6 +33,9 @@ Changes since 3.0.2: (i.e. several hundred TB), warn the user and avoid sending an invalid checksum struct over the wire. + - If an source arg is excluded, --relative no longer adds the excluded + arg's implied dirs to the transfer. + - Use the overflow_exit() function for overflows, not out_of_memory(). ENHANCEMENTS: diff --git a/flist.c b/flist.c index b0b05dc9..bbba3eeb 100644 --- a/flist.c +++ b/flist.c @@ -2041,7 +2041,8 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) } if (inc_recurse && relative_paths && *fbuf) { - if ((p = strchr(fbuf+1, '/')) != NULL) { + if ((p = strchr(fbuf+1, '/')) != NULL + && !is_excluded(fbuf, S_ISDIR(st.st_mode) != 0, ALL_FILTERS)) { if (p - fbuf == 1 && *fbuf == '.') { if ((fn = strchr(p+1, '/')) != NULL) p = fn; @@ -2051,7 +2052,8 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) if (fn == p) continue; } - } else if (implied_dirs && (p=strrchr(fbuf,'/')) && p != fbuf) { + } else if (implied_dirs && (p=strrchr(fbuf,'/')) && p != fbuf + && !is_excluded(fbuf, S_ISDIR(st.st_mode) != 0, ALL_FILTERS)) { /* Send the implied directories at the start of the * source spec, so we get their permissions right. */ send_implied_dirs(f, flist, fbuf, fbuf, p, flags, 0);