Files
git-mirror/t/t2204-add-ignored.sh
Junio C Hamano 97660b2cfe dir.c: do not be fooled by :(exclude) pathspec elements
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>
2025-11-04 14:12:24 -08:00

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