Fix per-directory exclude handing for "git add"
authorJunio C Hamano <gitster@pobox.com>
Fri, 16 Nov 2007 09:15:41 +0000 (01:15 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 16 Nov 2007 09:16:22 +0000 (01:16 -0800)
commit41a7aa588f449d3b139480b102f510abc5ef7f85
tree68ff89de7d7d1335a8c0e522bf5496104eab60fe
parentc1a95fa629b837fd291ca0e1428604710a2bc1dd
Fix per-directory exclude handing for "git add"

In "dir_struct", each exclusion element in the exclusion stack records a
base string (pointer to the beginning with length) so that we can tell
where it came from, but this pointer is just pointing at the parameter
that is given by the caller to the push_exclude_per_directory()
function.

While read_directory_recursive() runs, calls to excluded() makes use
the data in the exclusion elements, including this base string.  The
caller of read_directory_recursive() is not supposed to free the
buffer it gave to push_exclude_per_directory() earlier, until it
returns.

The test case Bruce Stephens gave in the mailing list discussion
was simplified and added to the t3700 test.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
dir.c
t/t3700-add.sh