mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
When exclude_matches_pathspec() tries to determine if an otherwise excluded item matches the pathspec given, it goes through each pathspec element and declares a hit, without checking if the element is a negative ":(exclude)" element. Fix it be applying the usual "a path matches if it matches any one of positive pathspec element, and if it matches none of negative pathspec elements" rule in the function. Signed-off-by: Junio C Hamano <gitster@pobox.com>
110 lines
2.1 KiB
Bash
Executable File
110 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='giving ignored paths to git add'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success setup '
|
|
mkdir sub dir dir/sub &&
|
|
echo sub >.gitignore &&
|
|
echo ign >>.gitignore &&
|
|
for p in . sub dir dir/sub
|
|
do
|
|
>"$p/ign" &&
|
|
>"$p/file" || exit 1
|
|
done
|
|
'
|
|
|
|
for i in file dir/file dir 'd*'
|
|
do
|
|
test_expect_success "no complaints for unignored $i" '
|
|
rm -f .git/index &&
|
|
git add "$i" &&
|
|
git ls-files "$i" >out &&
|
|
test -s out
|
|
'
|
|
done
|
|
|
|
for i in ign dir/ign dir/sub dir/sub/*ign sub/file sub sub/*
|
|
do
|
|
test_expect_success "complaints for ignored $i" '
|
|
rm -f .git/index &&
|
|
test_must_fail git add "$i" 2>err &&
|
|
git ls-files "$i" >out &&
|
|
test_must_be_empty out
|
|
'
|
|
|
|
test_expect_success "complaints for ignored $i output" '
|
|
test_grep -e "Use -f if" err
|
|
'
|
|
|
|
test_expect_success "complaints for ignored $i with unignored file" '
|
|
rm -f .git/index &&
|
|
test_must_fail git add "$i" file 2>err &&
|
|
git ls-files "$i" >out &&
|
|
test_must_be_empty out
|
|
'
|
|
test_expect_success "complaints for ignored $i with unignored file output" '
|
|
test_grep -e "Use -f if" err
|
|
'
|
|
done
|
|
|
|
for i in sub sub/*
|
|
do
|
|
test_expect_success "complaints for ignored $i in dir" '
|
|
rm -f .git/index &&
|
|
(
|
|
cd dir &&
|
|
test_must_fail git add "$i" 2>err &&
|
|
git ls-files "$i" >out &&
|
|
test_must_be_empty out
|
|
)
|
|
'
|
|
|
|
test_expect_success "complaints for ignored $i in dir output" '
|
|
(
|
|
cd dir &&
|
|
test_grep -e "Use -f if" err
|
|
)
|
|
'
|
|
done
|
|
|
|
for i in ign file
|
|
do
|
|
test_expect_success "complaints for ignored $i in sub" '
|
|
rm -f .git/index &&
|
|
(
|
|
cd sub &&
|
|
test_must_fail git add "$i" 2>err &&
|
|
git ls-files "$i" >out &&
|
|
test_must_be_empty out
|
|
)
|
|
'
|
|
|
|
test_expect_success "complaints for ignored $i in sub output" '
|
|
(
|
|
cd sub &&
|
|
test_grep -e "Use -f if" err
|
|
)
|
|
'
|
|
done
|
|
|
|
test_expect_success "exclude magic would not interfere with .gitignore" '
|
|
test_write_lines dir file sub ign err out "*.o" >.gitignore &&
|
|
>foo.o &&
|
|
>foo.c &&
|
|
test_must_fail git add foo.o 2>err &&
|
|
test_grep "are ignored by one" err &&
|
|
test_grep "hint: Use -f" err &&
|
|
|
|
git add ":(exclude)foo.o" &&
|
|
git ls-files >actual &&
|
|
cat >expect <<-\EOF &&
|
|
.gitignore
|
|
foo.c
|
|
EOF
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_done
|