"Chris Zehner via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > - that begin with a hash. > + Put a backslash ("`\`") in front of each hash for patterns > + containing a hash. > + > + - A # after a pattern will be treated as the start of a comment. > + Put a backslash ("`\`") in front of each hash for patterns > + containing a hash. Besides being backward incompatible, this looks somewhat misdesigned by lacking a way to escape a backslash (i.e. what should a project do if they want a patttern with backslash followed by a hash literally in there?). > diff --git a/dir.c b/dir.c > index cab9c2a458..aeefe142bc 100644 > --- a/dir.c > +++ b/dir.c > @@ -658,6 +658,38 @@ void clear_pattern_list(struct pattern_list *pl) > memset(pl, 0, sizeof(*pl)); > } > > +static void trim_trailing_comments(char *buf) > +{ > + char *p, *last_hash = NULL; > + int escape_seq = 0; > + > + for (p = buf; *p; p++) > + { Style (see Documentation/CodingGuidelines). The opening parenthesis of a control structure like if/for/switch are placed on the same line, i.e. for (p = buf; *p; p++) { Do we even need a separate 'p', instead of scanning with 'buf' itself? > + if (!*p) > + return; What happens when an entry ends with '\' followed by an EOL? IOW, what if escape_seq is true here? > + switch (*p) { > + case '#': > + if (escape_seq) > + { > + escape_seq = 0; > + p++; > + break; > + } > + if (!last_hash) > + last_hash = p; > + break; > + case '\\': > + escape_seq = 1; > + break;