#!/bin/sh test_description='git-status ignored files' TEST_PASSES_SANITIZE_LEAK=true . ./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_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_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_cmp expected actual && git status --porcelain --ignored -- untracked/uncommitted >actual && echo "?? untracked/uncommitted" >expected && 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_cmp expected actual && git status --porcelain --ignored -- untracked/u\* >actual && echo "?? untracked/uncommitted" >expected && 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_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_cmp expected actual && git status --porcelain --ignored untracked/ >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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_cmp expected actual ' test_done