dir.c: fix ignore processing within not-ignored directories
authorKarsten Blees <karsten.blees@gmail.com>
Wed, 29 May 2013 20:32:36 +0000 (22:32 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sun, 2 Jun 2013 21:54:38 +0000 (14:54 -0700)
commitc3c327deeaf018e727a27f5ae88e140ff7a48595
treea5939e1d17f7ffe76c021fccf2ebe2369f0ed534
parent0aaf62b6e018484bad9cea47dc00644d57b7ad49
dir.c: fix ignore processing within not-ignored directories

As of 95c6f271 "dir.c: unify is_excluded and is_path_excluded APIs", the
is_excluded API no longer recurses into directories that match an ignore
pattern, and returns the directory's ignored state for all contained paths.

This is OK for normal ignore patterns, i.e. ignoring a directory affects
the entire contents recursively.

Unfortunately, this also "works" for negated ignore patterns ('!dir'), i.e.
the entire contents is "not-ignored" recursively, regardless of ignore
patterns that match the contents directly.

In prep_exclude, skip recursing into a directory only if it is really
ignored (i.e. the ignore pattern is not negated).

Signed-off-by: Karsten Blees <blees@dcon.de>
Tested-by: Øystein Walle <oystwa@gmail.com>
Reviewed-by: Duy Nguyen <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
dir.c
t/t3001-ls-files-others-exclude.sh