"Chris Zehner via GitGitGadget" <[email protected]> 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;