Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make sure that --delete-excluded does not elide a per-dir merge
[rsync/rsync.git]
/
exclude.c
diff --git
a/exclude.c
b/exclude.c
index
bc180f2
..
dc1a475
100644
(file)
--- a/
exclude.c
+++ b/
exclude.c
@@
-500,6
+500,8
@@
static int rule_matches(char *name, struct filter_struct *ex, int name_is_dir)
char *p, *pattern = ex->pattern;
const char *strings[16]; /* more than enough */
char *p, *pattern = ex->pattern;
const char *strings[16]; /* more than enough */
+ if (*name == '/')
+ name++;
if (!*name)
return 0;
if (!*name)
return 0;
@@
-531,8
+533,6
@@
static int rule_matches(char *name, struct filter_struct *ex, int name_is_dir)
if (*pattern == '/') {
anchored_match = 1;
pattern++;
if (*pattern == '/') {
anchored_match = 1;
pattern++;
- if (strings[0][0] == '/')
- strings[0]++;
}
if (!anchored_match && ex->u.slash_cnt
}
if (!anchored_match && ex->u.slash_cnt
@@
-1102,7
+1102,8
@@
static void send_rules(int f_out, struct filter_list_struct *flp)
elide = am_sender ? 1 : -1;
if (ent->match_flags & MATCHFLG_RECEIVER_SIDE)
elide = elide ? 0 : am_sender ? -1 : 1;
elide = am_sender ? 1 : -1;
if (ent->match_flags & MATCHFLG_RECEIVER_SIDE)
elide = elide ? 0 : am_sender ? -1 : 1;
- else if (delete_excluded && !elide)
+ else if (delete_excluded && !elide
+ && (!(ent->match_flags & MATCHFLG_PERDIR_MERGE) || ent->match_flags & MATCHFLG_CVS_IGNORE))
elide = am_sender ? 1 : -1;
if (elide < 0) {
if (prev)
elide = am_sender ? 1 : -1;
if (elide < 0) {
if (prev)