From: Wayne Davison Date: Thu, 27 Jan 2022 16:31:24 +0000 (-0800) Subject: Add a CAUTION message to --debug=FILTER for trailing whitespace. X-Git-Tag: v3.2.4pre4~15 X-Git-Url: http://git.samba.org/?a=commitdiff_plain;h=81f71f6f29656325863d5da78f4fece991d1574d;p=rsync.git Add a CAUTION message to --debug=FILTER for trailing whitespace. --- diff --git a/NEWS.md b/NEWS.md index 3083ca3a..87abba21 100644 --- a/NEWS.md +++ b/NEWS.md @@ -138,6 +138,9 @@ - More ASM optimizations from Shark64. + - Using `--debug=FILTER` now outputs a caution message if a filter rule + has trailing whitespace. + - Transformed rrsync into a python script with improvements: - Security has been beefed up. - The known rsync options were updated to include recent additions. diff --git a/exclude.c b/exclude.c index e0957443..4ee06a84 100644 --- a/exclude.c +++ b/exclude.c @@ -152,13 +152,17 @@ static void add_rule(filter_rule_list *listp, const char *pat, unsigned int pat_ { const char *cp; unsigned int pre_len, suf_len, slash_cnt = 0; + char *mention_rule_suffix; - if (DEBUG_GTE(FILTER, 2)) { - rprintf(FINFO, "[%s] add_rule(%s%.*s%s)%s\n", + if (DEBUG_GTE(FILTER, 1) && pat_len && (pat[pat_len-1] == ' ' || pat[pat_len-1] == '\t')) + mention_rule_suffix = " -- CAUTION: trailing whitespace!"; + else + mention_rule_suffix = DEBUG_GTE(FILTER, 2) ? "" : NULL; + if (mention_rule_suffix) { + rprintf(FINFO, "[%s] add_rule(%s%.*s%s)%s%s\n", who_am_i(), get_rule_prefix(rule, pat, 0, NULL), - (int)pat_len, pat, - (rule->rflags & FILTRULE_DIRECTORY) ? "/" : "", - listp->debug_type); + (int)pat_len, pat, (rule->rflags & FILTRULE_DIRECTORY) ? "/" : "", + listp->debug_type, mention_rule_suffix); } /* These flags also indicate that we're reading a list that diff --git a/rsync.1.md b/rsync.1.md index b5685d3f..563f835b 100644 --- a/rsync.1.md +++ b/rsync.1.md @@ -3723,6 +3723,14 @@ first matching pattern is acted on: if it is an exclude pattern, then that file is skipped; if it is an include pattern then that filename is not skipped; if no matching pattern is found, then the filename is not skipped. +Aside: because the interactions of filter rules can be complex, it is useful to +use the `--debug=FILTER` option if things aren't working they way you expect. +The level-1 output (the default if no level number is specified) mentions the +filter rule that is first matched by each file in the transfer. It also warns +if a filter rule has trailing whitespace. The level-2 output mentions a lot +more filter events, including the definition of each rule and the handling of +per-directory filter files. + Rsync builds an ordered list of filter rules as specified on the command-line. Filter rules have the following syntax: