--- /dev/null
+This patch causes the --cvs-exclude option to prefix the names listed
+in each dir's CVS/Entries file as per-dir includes before the dir's list
+of excludes taken from the .cvsignore file.
+
+--- exclude.c 7 Apr 2005 18:06:06 -0000 1.115
++++ exclude.c 7 Apr 2005 18:06:34 -0000
+@@ -442,6 +442,14 @@ void *push_local_filters(const char *dir
+ set_filter_dir(dir, dirlen);
+ }
+
++ if (ex->match_flags & MATCHFLG_CVS_IGNORE
++ && strlcpy(dirbuf + dirbuf_len, "CVS/Entries",
++ MAXPATHLEN - dirbuf_len) < MAXPATHLEN - dirbuf_len) {
++ /* Start by adding include rules for all the names in CVS/Entries. */
++ parse_filter_file(lp, dirbuf,
++ MATCHFLG_NO_PREFIXES | MATCHFLG_INCLUDE,
++ XFLG_CVS_ENTRIES);
++ }
+ if (strlcpy(dirbuf + dirbuf_len, ex->pattern,
+ MAXPATHLEN - dirbuf_len) < MAXPATHLEN - dirbuf_len) {
+ parse_filter_file(lp, dirbuf, ex->match_flags,
+@@ -958,6 +966,7 @@ void parse_filter_file(struct filter_lis
+ char line[MAXPATHLEN+MAX_RULE_PREFIX+1]; /* +1 for trailing slash. */
+ char *eob = line + sizeof line - 1;
+ int word_split = mflags & MATCHFLG_WORD_SPLIT;
++ int slash_parse = xflags & XFLG_CVS_ENTRIES ? 1 : 0;
+
+ if (!fname || !*fname)
+ return;
+@@ -1002,6 +1011,29 @@ void parse_filter_file(struct filter_lis
+ continue;
+ break;
+ }
++ switch (slash_parse) {
++ case 1:
++ if (ch == '/') {
++ s = line;
++ slash_parse = 2;
++ continue;
++ }
++ break;
++ case 2:
++ if (ch == '/') {
++ slash_parse = 3;
++ continue;
++ }
++ break;
++ case 3:
++ if (ch == '\n' || ch == '\r') {
++ slash_parse = 1;
++ goto double_break;
++ }
++ continue;
++ default:
++ break;
++ }
+ if (word_split && isspace(ch))
+ break;
+ if (eol_nulls? !ch : (ch == '\n' || ch == '\r'))
+@@ -1011,6 +1043,7 @@ void parse_filter_file(struct filter_lis
+ else
+ overflow = 1;
+ }
++ double_break:
+ if (overflow) {
+ rprintf(FERROR, "discarding over-long filter: %s...\n", line);
+ s = line;
+--- rsync.h 28 Mar 2005 17:08:47 -0000 1.261
++++ rsync.h 7 Apr 2005 18:06:34 -0000
+@@ -115,6 +115,7 @@
+ #define XFLG_FATAL_ERRORS (1<<0)
+ #define XFLG_OLD_PREFIXES (1<<1)
+ #define XFLG_ANCHORED2ABS (1<<2)
++#define XFLG_CVS_ENTRIES (1<<3)
+
+ #define PERMS_REPORT (1<<0)
+ #define PERMS_SKIP_MTIME (1<<1)