mirror of
https://github.com/git/git.git
synced 2026-06-30 19:58:12 +00:00
Since test-lib.sh creates `$HOME/.gitconfig` when `WITH_BREAKING_CHANGES` is in effect, the file appears in `git status` output as either untracked (`?? .gitconfig`) or ignored (`!! .gitconfig` / `! .gitconfig`, depending on porcelain version), because the `.git/info/exclude` entry causes git to treat it as an ignored file rather than hiding it entirely. In t7061 and t7521, which are pervasively affected, introduce a `filter_gitconfig` helper that strips all status-prefix variants of `.gitconfig` from the output before comparison. In the remaining scripts (t7060, t7064, t7508), apply targeted adjustments. Assisted-by: Claude Opus 4.6 Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
344 lines
8.0 KiB
Bash
Executable File
344 lines
8.0 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='git-status ignored files'
|
|
|
|
. ./test-lib.sh
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
?? untracked/
|
|
!! untracked/ignored
|
|
EOF
|
|
|
|
test_expect_success 'status untracked directory with --ignored' '
|
|
echo "ignored" >.gitignore &&
|
|
mkdir untracked &&
|
|
: >untracked/ignored &&
|
|
: >untracked/uncommitted &&
|
|
git status --porcelain --ignored >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'same with gitignore starting with BOM' '
|
|
printf "\357\273\277ignored\n" >.gitignore &&
|
|
mkdir -p untracked &&
|
|
: >untracked/ignored &&
|
|
: >untracked/uncommitted &&
|
|
git status --porcelain --ignored >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'status untracked files --ignored with pathspec (no match)' '
|
|
git status --porcelain --ignored -- untracked/i >actual &&
|
|
test_must_be_empty actual &&
|
|
git status --porcelain --ignored -- untracked/u >actual &&
|
|
test_must_be_empty actual
|
|
'
|
|
|
|
test_expect_success 'status untracked files --ignored with pathspec (literal match)' '
|
|
git status --porcelain --ignored -- untracked/ignored >actual &&
|
|
echo "!! untracked/ignored" >expected &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual &&
|
|
git status --porcelain --ignored -- untracked/uncommitted >actual &&
|
|
echo "?? untracked/uncommitted" >expected &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'status untracked files --ignored with pathspec (glob match)' '
|
|
git status --porcelain --ignored -- untracked/i\* >actual &&
|
|
echo "!! untracked/ignored" >expected &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual &&
|
|
git status --porcelain --ignored -- untracked/u\* >actual &&
|
|
echo "?? untracked/uncommitted" >expected &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
?? untracked/uncommitted
|
|
!! untracked/ignored
|
|
EOF
|
|
|
|
test_expect_success 'status untracked directory with --ignored -u' '
|
|
git status --porcelain --ignored -u >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
cat >expected <<\EOF
|
|
?? untracked/
|
|
!! untracked/ignored
|
|
EOF
|
|
|
|
test_expect_success 'status of untracked directory with --ignored works with or without prefix' '
|
|
git status --porcelain --ignored >tmp &&
|
|
grep untracked/ tmp >actual &&
|
|
rm tmp &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual &&
|
|
|
|
git status --porcelain --ignored untracked/ >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? untracked/uncommitted
|
|
!! untracked/ignored
|
|
EOF
|
|
|
|
test_expect_success 'status prefixed untracked sub-directory with --ignored -u' '
|
|
git status --porcelain --ignored -u untracked/ >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
!! ignored/
|
|
EOF
|
|
|
|
test_expect_success 'status ignored directory with --ignore' '
|
|
rm -rf untracked &&
|
|
mkdir ignored &&
|
|
: >ignored/uncommitted &&
|
|
git status --porcelain --ignored >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
!! ignored/uncommitted
|
|
EOF
|
|
|
|
test_expect_success 'status ignored directory with --ignore -u' '
|
|
git status --porcelain --ignored -u >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
EOF
|
|
|
|
test_expect_success 'status empty untracked directory with --ignore' '
|
|
rm -rf ignored &&
|
|
mkdir untracked-ignored &&
|
|
mkdir untracked-ignored/test &&
|
|
git status --porcelain --ignored >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
EOF
|
|
|
|
test_expect_success 'status empty untracked directory with --ignore -u' '
|
|
git status --porcelain --ignored -u >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
!! untracked-ignored/
|
|
EOF
|
|
|
|
test_expect_success 'status untracked directory with ignored files with --ignore' '
|
|
: >untracked-ignored/ignored &&
|
|
: >untracked-ignored/test/ignored &&
|
|
git status --porcelain --ignored >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
!! untracked-ignored/ignored
|
|
!! untracked-ignored/test/ignored
|
|
EOF
|
|
|
|
test_expect_success 'status untracked directory with ignored files with --ignore -u' '
|
|
git status --porcelain --ignored -u >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
EOF
|
|
|
|
test_expect_success 'status ignored tracked directory with --ignore' '
|
|
rm -rf untracked-ignored &&
|
|
mkdir tracked &&
|
|
: >tracked/committed &&
|
|
git add tracked/committed &&
|
|
git commit -m. &&
|
|
echo "tracked" >.gitignore &&
|
|
git status --porcelain --ignored >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
EOF
|
|
|
|
test_expect_success 'status ignored tracked directory with --ignore -u' '
|
|
git status --porcelain --ignored -u >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
EOF
|
|
|
|
test_expect_success 'status ignored tracked directory and ignored file with --ignore' '
|
|
echo "committed" >>.gitignore &&
|
|
git status --porcelain --ignored >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
EOF
|
|
|
|
test_expect_success 'status ignored tracked directory and ignored file with --ignore -u' '
|
|
git status --porcelain --ignored -u >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
!! tracked/uncommitted
|
|
EOF
|
|
|
|
test_expect_success 'status ignored tracked directory and uncommitted file with --ignore' '
|
|
echo "tracked" >.gitignore &&
|
|
: >tracked/uncommitted &&
|
|
git status --porcelain --ignored >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
!! tracked/uncommitted
|
|
EOF
|
|
|
|
test_expect_success 'status ignored tracked directory and uncommitted file with --ignore -u' '
|
|
git status --porcelain --ignored -u >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
!! tracked/ignored/
|
|
EOF
|
|
|
|
test_expect_success 'status ignored tracked directory with uncommitted file in untracked subdir with --ignore' '
|
|
rm -rf tracked/uncommitted &&
|
|
mkdir tracked/ignored &&
|
|
: >tracked/ignored/uncommitted &&
|
|
git status --porcelain --ignored >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
!! tracked/ignored/uncommitted
|
|
EOF
|
|
|
|
test_expect_success 'status ignored tracked directory with uncommitted file in untracked subdir with --ignore -u' '
|
|
git status --porcelain --ignored -u >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
!! tracked/ignored/uncommitted
|
|
EOF
|
|
|
|
test_expect_success 'status ignored tracked directory with uncommitted file in tracked subdir with --ignore' '
|
|
: >tracked/ignored/committed &&
|
|
git add -f tracked/ignored/committed &&
|
|
git commit -m. &&
|
|
git status --porcelain --ignored >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
?? .gitignore
|
|
?? actual
|
|
?? expected
|
|
!! tracked/ignored/uncommitted
|
|
EOF
|
|
|
|
test_expect_success 'status ignored tracked directory with uncommitted file in tracked subdir with --ignore -u' '
|
|
git status --porcelain --ignored -u >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
cat >expected <<\EOF
|
|
!! tracked/submodule/
|
|
EOF
|
|
|
|
test_expect_success 'status ignores submodule in excluded directory' '
|
|
git init tracked/submodule &&
|
|
test_commit -C tracked/submodule initial &&
|
|
git status --porcelain --ignored -u tracked/submodule >actual &&
|
|
test_filter_gitconfig actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_done
|