Fixed some failing hunks.
[rsync/rsync-patches.git] / cvs-entries.diff
CommitLineData
f891cd92
WD
1This patch causes the --cvs-exclude option to prefix the names listed
2in each dir's CVS/Entries file as per-dir includes before the dir's list
3of excludes taken from the .cvsignore file.
4
edea1111 5--- orig/exclude.c 2005-10-14 18:45:50
1f874579 6+++ exclude.c 2005-04-07 18:06:34
edea1111 7@@ -446,6 +446,14 @@ void *push_local_filters(const char *dir
f891cd92
WD
8 set_filter_dir(dir, dirlen);
9 }
10
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,
17+ XFLG_CVS_ENTRIES);
18+ }
19 if (strlcpy(dirbuf + dirbuf_len, ex->pattern,
20 MAXPATHLEN - dirbuf_len) < MAXPATHLEN - dirbuf_len) {
21 parse_filter_file(lp, dirbuf, ex->match_flags,
edea1111
WD
22@@ -962,6 +970,7 @@ void parse_filter_file(struct filter_lis
23 char line[BIGPATHBUFLEN];
f891cd92
WD
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;
27
28 if (!fname || !*fname)
29 return;
edea1111 30@@ -1006,6 +1015,29 @@ void parse_filter_file(struct filter_lis
f891cd92
WD
31 continue;
32 break;
33 }
34+ switch (slash_parse) {
35+ case 1:
36+ if (ch == '/') {
37+ s = line;
38+ slash_parse = 2;
39+ continue;
40+ }
41+ break;
42+ case 2:
43+ if (ch == '/') {
44+ slash_parse = 3;
45+ continue;
46+ }
47+ break;
48+ case 3:
49+ if (ch == '\n' || ch == '\r') {
50+ slash_parse = 1;
51+ goto double_break;
52+ }
53+ continue;
54+ default:
55+ break;
56+ }
57 if (word_split && isspace(ch))
58 break;
59 if (eol_nulls? !ch : (ch == '\n' || ch == '\r'))
edea1111 60@@ -1015,6 +1047,7 @@ void parse_filter_file(struct filter_lis
f891cd92
WD
61 else
62 overflow = 1;
63 }
64+ double_break:
65 if (overflow) {
66 rprintf(FERROR, "discarding over-long filter: %s...\n", line);
67 s = line;
edea1111
WD
68--- orig/rsync.h 2005-10-14 18:45:50
69+++ rsync.h 2005-10-14 19:17:51
70@@ -116,6 +116,7 @@
f891cd92
WD
71 #define XFLG_OLD_PREFIXES (1<<1)
72 #define XFLG_ANCHORED2ABS (1<<2)
edea1111
WD
73 #define XFLG_ABS_IF_SLASH (1<<3)
74+#define XFLG_CVS_ENTRIES (1<<4)
f891cd92
WD
75
76 #define PERMS_REPORT (1<<0)
77 #define PERMS_SKIP_MTIME (1<<1)