X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/91f4b31fe1031adc3ec3e3066534c9d6be979d21..97bf86f8ee5794087e8627b04dd93c7506ae552f:/exclude.c diff --git a/exclude.c b/exclude.c index 0da15b23..dc1a4754 100644 --- 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 */ + if (*name == '/') + name++; 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 (strings[0][0] == '/') - strings[0]++; } if (!anchored_match && ex->u.slash_cnt @@ -861,7 +861,7 @@ static char default_cvsignore[] = " *.a *.olb *.o *.obj *.so *.exe" " *.Z *.elc *.ln core" /* The rest we added to suit ourself. */ - " .svn/"; + " .svn/ .bzr/"; static void get_cvs_excludes(uint32 mflags) { @@ -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; - 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)