.gitignore support both positive and negative patterns. One may negate the other. Current code works well if both patterns target files in the same directory. When a pattern targets a directory and an opposite pattern targets some files/directories within that directory, we need to descend in the directory until we're clear which ones are matched and which are not. excluded_from_list() fails to handle this case. It too eagerly decides the fate of the whole directory without looking further in. Signed-off-by: Nguyán ThÃi Ngác Duy <pclouds@xxxxxxxxx> --- Sorry, forgot the test name. t/t3700-add.sh | 16 ++++++++++++++++ 1 files changed, 16 insertions(+), 0 deletions(-) diff --git a/t/t3700-add.sh b/t/t3700-add.sh index 7de42fa..c9f3a28 100755 --- a/t/t3700-add.sh +++ b/t/t3700-add.sh @@ -295,4 +295,20 @@ test_expect_success C_LOCALE_OUTPUT 'git add --dry-run --ignore-missing of non-e test_cmp expect.err actual.err ' +cat >expected <<EOF +add 'test/.gitignore' +add 'test/out/in' +EOF + +test_expect_failure C_LOCALE_OUTPUT 'positive/negative patterns at different dir levels' ' + mkdir -p test/out && + touch test/out/in test/out/out && + cat >test/.gitignore <<EOF && +out +!out/in +EOF + git add --dry-run test >actual && + test_cmp expected actual +' + test_done -- 1.7.4.74.g639db -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html