1 This patch causes the --cvs-exclude option to prefix the names listed
2 in each dir's CVS/Entries file as per-dir includes before the dir's list
3 of excludes taken from the .cvsignore file.
5 --- orig/exclude.c 2005-10-14 18:45:50
6 +++ exclude.c 2005-04-07 18:06:34
7 @@ -446,6 +446,14 @@ void *push_local_filters(const char *dir
8 set_filter_dir(dir, dirlen);
11 + if (ex->match_flags & MATCHFLG_CVS_IGNORE
12 + && strlcpy(dirbuf + dirbuf_len, "CVS/Entries",
13 + MAXPATHLEN - dirbuf_len) < MAXPATHLEN - dirbuf_len) {
14 + /* Start by adding include rules for all the names in CVS/Entries. */
15 + parse_filter_file(lp, dirbuf,
16 + MATCHFLG_NO_PREFIXES | MATCHFLG_INCLUDE,
19 if (strlcpy(dirbuf + dirbuf_len, ex->pattern,
20 MAXPATHLEN - dirbuf_len) < MAXPATHLEN - dirbuf_len) {
21 parse_filter_file(lp, dirbuf, ex->match_flags,
22 @@ -962,6 +970,7 @@ void parse_filter_file(struct filter_lis
23 char line[BIGPATHBUFLEN];
24 char *eob = line + sizeof line - 1;
25 int word_split = mflags & MATCHFLG_WORD_SPLIT;
26 + int slash_parse = xflags & XFLG_CVS_ENTRIES ? 1 : 0;
28 if (!fname || !*fname)
30 @@ -1006,6 +1015,29 @@ void parse_filter_file(struct filter_lis
34 + switch (slash_parse) {
49 + if (ch == '\n' || ch == '\r') {
57 if (word_split && isspace(ch))
59 if (eol_nulls? !ch : (ch == '\n' || ch == '\r'))
60 @@ -1015,6 +1047,7 @@ void parse_filter_file(struct filter_lis
66 rprintf(FERROR, "discarding over-long filter: %s...\n", line);
68 --- orig/rsync.h 2005-10-14 18:45:50
69 +++ rsync.h 2005-10-14 19:17:51
71 #define XFLG_OLD_PREFIXES (1<<1)
72 #define XFLG_ANCHORED2ABS (1<<2)
73 #define XFLG_ABS_IF_SLASH (1<<3)
74 +#define XFLG_CVS_ENTRIES (1<<4)
76 #define PERMS_REPORT (1<<0)
77 #define PERMS_SKIP_MTIME (1<<1)