Re: [PATCH] gitignore(5): Allow "foo/" in ignore list to match directory "foo"
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Jan 31, 2008, 11:38 UTC
- Message-ID
- <alpine.LSU.1.00.0801311128190.23907@racer.site>
- In-Reply-To
- <20080131104256.GF25546@coredump.intra.peff.net>
Hi,
On Thu, 31 Jan 2008, Jeff King wrote:
Show 14 quoted lines
> On Thu, Jan 31, 2008 at 02:35:33AM -0800, Junio C Hamano wrote: > > > Without "foo/", you do not have to pay the price, so I think that is a > > sane optimization, but at the same time it would make it worse if > > "foo/" is actually used. excluded_1() is called for the same pathname > > from a loop to check for a match and you would end up running lstat(2) > > three times (once each for EXC_CMDL, EXC_DIRS and EXC_FILE). > > > > But maybe people who want "foo/" deserve it. I dunno. > > Ah, I didn't look at it that closely. > > To do the laziness right, I think you would need to pass a pointer to > the dtype around, and just fill it in the first time it is needed.
Just to add my two eurocents: I think the patch is complicated enough that we could go the other way round: while parsing the ignore entries, we can plainly state that entries with a trailing slash are ignored:
-- snipsnap -- [PATCH] Warn if an ignore/exclude entry ends in a slash
Git does not like ignore entries ending in a slash; they will be ignored. So just be honest and warn the user about it.
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
---
dir.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/dir.c b/dir.c index 1b9cc7a..c3e9a0d 100644 --- a/dir.c +++ b/dir.c @@ -135,6 +135,11 @@ void add_exclude(const char *string, const char *base, } x->pattern = string; x->patternlen = strlen(string); + if (x->patternlen && x->pattern[x->patternlen - 1] == '/') { + warning("Ignoring ignore entry because of trailing slash: %s", + string); + return; + } x->base = base; x->baselen = baselen; x->flags = 0;