3 test_description='git status ignored modes'
 
   7 test_expect_success 'setup initial commit and ignore file' '
 
   8         cat >.gitignore <<-\EOF &&
 
  14         git commit -m "Initial commit"
 
  17 test_expect_success 'Verify behavior of status on directories with ignored files' '
 
  18         test_when_finished "git clean -fdx" &&
 
  19         cat >expect <<-\EOF &&
 
  22         ! dir/ignored/ignored_1.ign
 
  23         ! dir/ignored/ignored_2.ign
 
  24         ! ignored/ignored_1.ign
 
  25         ! ignored/ignored_2.ign
 
  28         mkdir -p ignored dir/ignored &&
 
  29         touch ignored/ignored_1.ign ignored/ignored_2.ign \
 
  30                 dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
 
  32         git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
 
  33         test_i18ncmp expect output
 
  36 test_expect_success 'Verify status behavior on directory with tracked & ignored files' '
 
  37         test_when_finished "git clean -fdx && git reset HEAD~1 --hard" &&
 
  38         cat >expect <<-\EOF &&
 
  41         ! dir/tracked_ignored/ignored_1.ign
 
  42         ! dir/tracked_ignored/ignored_2.ign
 
  43         ! tracked_ignored/ignored_1.ign
 
  44         ! tracked_ignored/ignored_2.ign
 
  47         mkdir -p tracked_ignored dir/tracked_ignored &&
 
  48         touch tracked_ignored/tracked_1 tracked_ignored/tracked_2 \
 
  49                 tracked_ignored/ignored_1.ign tracked_ignored/ignored_2.ign \
 
  50                 dir/tracked_ignored/tracked_1 dir/tracked_ignored/tracked_2 \
 
  51                 dir/tracked_ignored/ignored_1.ign dir/tracked_ignored/ignored_2.ign &&
 
  53         git add tracked_ignored/tracked_1 tracked_ignored/tracked_2 \
 
  54                 dir/tracked_ignored/tracked_1 dir/tracked_ignored/tracked_2 &&
 
  55         git commit -m "commit tracked files" &&
 
  57         git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
 
  58         test_i18ncmp expect output
 
  61 test_expect_success 'Verify status behavior on directory with untracked and ignored files' '
 
  62         test_when_finished "git clean -fdx" &&
 
  63         cat >expect <<-\EOF &&
 
  64         ? dir/untracked_ignored/untracked_1
 
  65         ? dir/untracked_ignored/untracked_2
 
  68         ? untracked_ignored/untracked_1
 
  69         ? untracked_ignored/untracked_2
 
  70         ! dir/untracked_ignored/ignored_1.ign
 
  71         ! dir/untracked_ignored/ignored_2.ign
 
  72         ! untracked_ignored/ignored_1.ign
 
  73         ! untracked_ignored/ignored_2.ign
 
  76         mkdir -p untracked_ignored dir/untracked_ignored &&
 
  77         touch untracked_ignored/untracked_1 untracked_ignored/untracked_2 \
 
  78                 untracked_ignored/ignored_1.ign untracked_ignored/ignored_2.ign \
 
  79                 dir/untracked_ignored/untracked_1 dir/untracked_ignored/untracked_2 \
 
  80                 dir/untracked_ignored/ignored_1.ign dir/untracked_ignored/ignored_2.ign &&
 
  82         git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
 
  83         test_i18ncmp expect output
 
  86 test_expect_success 'Verify status matching ignored files on ignored directory' '
 
  87         test_when_finished "git clean -fdx" &&
 
  88         cat >expect <<-\EOF &&
 
  95         touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
 
  96                 ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign &&
 
  98         git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
 
  99         test_i18ncmp expect output
 
 102 test_expect_success 'Verify status behavior on ignored directory containing tracked file' '
 
 103         test_when_finished "git clean -fdx && git reset HEAD~1 --hard" &&
 
 104         cat >expect <<-\EOF &&
 
 107         ! ignored_dir/ignored_1
 
 108         ! ignored_dir/ignored_1.ign
 
 109         ! ignored_dir/ignored_2
 
 110         ! ignored_dir/ignored_2.ign
 
 114         touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
 
 115                 ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign \
 
 116                 ignored_dir/tracked &&
 
 117         git add -f ignored_dir/tracked &&
 
 118         git commit -m "Force add file in ignored directory" &&
 
 119         git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
 
 120         test_i18ncmp expect output
 
 123 test_expect_success 'Verify matching ignored files with --untracked-files=normal' '
 
 124         test_when_finished "git clean -fdx" &&
 
 125         cat >expect <<-\EOF &&
 
 130         ! ignored_files/ignored_1.ign
 
 131         ! ignored_files/ignored_2.ign
 
 134         mkdir ignored_dir ignored_files untracked_dir &&
 
 135         touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
 
 136                 ignored_files/ignored_1.ign ignored_files/ignored_2.ign \
 
 137                 untracked_dir/untracked &&
 
 138         git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
 
 139         test_i18ncmp expect output
 
 142 test_expect_success 'Verify matching ignored files with --untracked-files=normal' '
 
 143         test_when_finished "git clean -fdx" &&
 
 144         cat >expect <<-\EOF &&
 
 149         ! ignored_files/ignored_1.ign
 
 150         ! ignored_files/ignored_2.ign
 
 153         mkdir ignored_dir ignored_files untracked_dir &&
 
 154         touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
 
 155                 ignored_files/ignored_1.ign ignored_files/ignored_2.ign \
 
 156                 untracked_dir/untracked &&
 
 157         git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
 
 158         test_i18ncmp expect output
 
 161 test_expect_success 'Verify status behavior on ignored directory containing tracked file' '
 
 162         test_when_finished "git clean -fdx && git reset HEAD~1 --hard" &&
 
 163         cat >expect <<-\EOF &&
 
 166         ! ignored_dir/ignored_1
 
 167         ! ignored_dir/ignored_1.ign
 
 168         ! ignored_dir/ignored_2
 
 169         ! ignored_dir/ignored_2.ign
 
 173         touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
 
 174                 ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign \
 
 175                 ignored_dir/tracked &&
 
 176         git add -f ignored_dir/tracked &&
 
 177         git commit -m "Force add file in ignored directory" &&
 
 178         git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
 
 179         test_i18ncmp expect output
 
 182 test_expect_success 'Verify behavior of status with --ignored=no' '
 
 183         test_when_finished "git clean -fdx" &&
 
 184         cat >expect <<-\EOF &&
 
 189         mkdir -p ignored dir/ignored &&
 
 190         touch ignored/ignored_1.ign ignored/ignored_2.ign \
 
 191                 dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
 
 193         git status --porcelain=v2 --ignored=no --untracked-files=all >output &&
 
 194         test_i18ncmp expect output
 
 197 test_expect_success 'Verify behavior of status with --ignored=traditional and --untracked-files=all' '
 
 198         test_when_finished "git clean -fdx" &&
 
 199         cat >expect <<-\EOF &&
 
 202         ! dir/ignored/ignored_1.ign
 
 203         ! dir/ignored/ignored_2.ign
 
 204         ! ignored/ignored_1.ign
 
 205         ! ignored/ignored_2.ign
 
 208         mkdir -p ignored dir/ignored &&
 
 209         touch ignored/ignored_1.ign ignored/ignored_2.ign \
 
 210                 dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
 
 212         git status --porcelain=v2 --ignored=traditional --untracked-files=all >output &&
 
 213         test_i18ncmp expect output
 
 216 test_expect_success 'Verify behavior of status with --ignored=traditional and --untracked-files=normal' '
 
 217         test_when_finished "git clean -fdx" &&
 
 218         cat >expect <<-\EOF &&
 
 225         mkdir -p ignored dir/ignored &&
 
 226         touch ignored/ignored_1.ign ignored/ignored_2.ign \
 
 227                 dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
 
 229         git status --porcelain=v2 --ignored=traditional --untracked-files=normal >output &&
 
 230         test_i18ncmp expect output