Junio C Hamano | 29796c6 | 2009-08-04 16:25:40 -0700 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | test_description='basic work tree status reporting' |
| 4 | |
Johannes Schindelin | 01dc813 | 2020-11-18 23:44:39 +0000 | [diff] [blame] | 5 | GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
Johannes Schindelin | 334afbc | 2020-11-18 23:44:19 +0000 | [diff] [blame] | 6 | export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
| 7 | |
Ævar Arnfjörð Bjarmason | 3e3b932 | 2022-07-28 01:13:41 +0200 | [diff] [blame] | 8 | TEST_PASSES_SANITIZE_LEAK=true |
Junio C Hamano | 29796c6 | 2009-08-04 16:25:40 -0700 | [diff] [blame] | 9 | . ./test-lib.sh |
| 10 | |
| 11 | test_expect_success setup ' |
Nguyễn Thái Ngọc Duy | 6a38ef2 | 2013-03-13 19:59:16 +0700 | [diff] [blame] | 12 | git config --global advice.statusuoption false && |
Junio C Hamano | 29796c6 | 2009-08-04 16:25:40 -0700 | [diff] [blame] | 13 | test_commit A && |
| 14 | test_commit B oneside added && |
| 15 | git checkout A^0 && |
| 16 | test_commit C oneside created |
| 17 | ' |
| 18 | |
| 19 | test_expect_success 'A/A conflict' ' |
| 20 | git checkout B^0 && |
| 21 | test_must_fail git merge C |
| 22 | ' |
| 23 | |
| 24 | test_expect_success 'Report path with conflict' ' |
| 25 | git diff --cached --name-status >actual && |
| 26 | echo "U oneside" >expect && |
| 27 | test_cmp expect actual |
| 28 | ' |
| 29 | |
| 30 | test_expect_success 'Report new path with conflict' ' |
| 31 | git diff --cached --name-status HEAD^ >actual && |
| 32 | echo "U oneside" >expect && |
| 33 | test_cmp expect actual |
| 34 | ' |
| 35 | |
Matthieu Moy | 1c7969c | 2013-09-06 19:43:08 +0200 | [diff] [blame] | 36 | test_expect_success 'M/D conflict does not segfault' ' |
| 37 | cat >expect <<EOF && |
| 38 | On branch side |
| 39 | You have unmerged paths. |
| 40 | (fix conflicts and run "git commit") |
Matthieu Moy | b0a61ab | 2016-07-21 14:58:37 +0200 | [diff] [blame] | 41 | (use "git merge --abort" to abort the merge) |
Matthieu Moy | 1c7969c | 2013-09-06 19:43:08 +0200 | [diff] [blame] | 42 | |
| 43 | Unmerged paths: |
| 44 | (use "git add/rm <file>..." as appropriate to mark resolution) |
Junio C Hamano | c7cb333 | 2014-03-12 13:43:51 -0700 | [diff] [blame] | 45 | deleted by us: foo |
Matthieu Moy | 1c7969c | 2013-09-06 19:43:08 +0200 | [diff] [blame] | 46 | |
Junio C Hamano | 4d4d572 | 2009-08-05 00:04:51 -0700 | [diff] [blame] | 47 | no changes added to commit (use "git add" and/or "git commit -a") |
| 48 | EOF |
Junio C Hamano | 4d4d572 | 2009-08-05 00:04:51 -0700 | [diff] [blame] | 49 | mkdir mdconflict && |
| 50 | ( |
| 51 | cd mdconflict && |
| 52 | git init && |
| 53 | test_commit initial foo "" && |
| 54 | test_commit modify foo foo && |
| 55 | git checkout -b side HEAD^ && |
| 56 | git rm foo && |
| 57 | git commit -m delete && |
Johannes Schindelin | 01dc813 | 2020-11-18 23:44:39 +0000 | [diff] [blame] | 58 | test_must_fail git merge main && |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 59 | test_must_fail git commit --dry-run >../actual && |
Ævar Arnfjörð Bjarmason | 1108cea | 2021-02-11 02:53:53 +0100 | [diff] [blame] | 60 | test_cmp ../expect ../actual && |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 61 | git status >../actual && |
Ævar Arnfjörð Bjarmason | 1108cea | 2021-02-11 02:53:53 +0100 | [diff] [blame] | 62 | test_cmp ../expect ../actual |
Junio C Hamano | 9e4b7ab | 2009-08-15 02:27:39 -0700 | [diff] [blame] | 63 | ) |
Junio C Hamano | 4d4d572 | 2009-08-05 00:04:51 -0700 | [diff] [blame] | 64 | ' |
| 65 | |
Martin von Zweigbergk | d7c9bf2 | 2011-03-23 22:41:01 -0400 | [diff] [blame] | 66 | test_expect_success 'rename & unmerged setup' ' |
| 67 | git rm -f -r . && |
| 68 | cat "$TEST_DIRECTORY/README" >ONE && |
| 69 | git add ONE && |
| 70 | test_tick && |
| 71 | git commit -m "One commit with ONE" && |
| 72 | |
| 73 | echo Modified >TWO && |
| 74 | cat ONE >>TWO && |
| 75 | cat ONE >>THREE && |
| 76 | git add TWO THREE && |
| 77 | sha1=$(git rev-parse :ONE) && |
| 78 | git rm --cached ONE && |
| 79 | ( |
| 80 | echo "100644 $sha1 1 ONE" && |
| 81 | echo "100644 $sha1 2 ONE" && |
| 82 | echo "100644 $sha1 3 ONE" |
| 83 | ) | git update-index --index-info && |
| 84 | echo Further >>THREE |
| 85 | ' |
| 86 | |
| 87 | test_expect_success 'rename & unmerged status' ' |
| 88 | git status -suno >actual && |
| 89 | cat >expect <<-EOF && |
| 90 | UU ONE |
| 91 | AM THREE |
| 92 | A TWO |
| 93 | EOF |
| 94 | test_cmp expect actual |
| 95 | ' |
| 96 | |
| 97 | test_expect_success 'git diff-index --cached shows 2 added + 1 unmerged' ' |
| 98 | cat >expected <<-EOF && |
| 99 | U ONE |
| 100 | A THREE |
| 101 | A TWO |
| 102 | EOF |
| 103 | git diff-index --cached --name-status HEAD >actual && |
| 104 | test_cmp expected actual |
| 105 | ' |
| 106 | |
| 107 | test_expect_success 'git diff-index --cached -M shows 2 added + 1 unmerged' ' |
| 108 | cat >expected <<-EOF && |
| 109 | U ONE |
| 110 | A THREE |
| 111 | A TWO |
| 112 | EOF |
Matthieu Prat | b894d3e | 2015-09-02 14:12:55 -0400 | [diff] [blame] | 113 | git diff-index --cached -M --name-status HEAD >actual && |
Martin von Zweigbergk | d7c9bf2 | 2011-03-23 22:41:01 -0400 | [diff] [blame] | 114 | test_cmp expected actual |
| 115 | ' |
| 116 | |
| 117 | test_expect_success 'git diff-index --cached -C shows 2 copies + 1 unmerged' ' |
| 118 | cat >expected <<-EOF && |
| 119 | U ONE |
| 120 | C ONE THREE |
| 121 | C ONE TWO |
| 122 | EOF |
| 123 | git diff-index --cached -C --name-status HEAD | |
| 124 | sed "s/^C[0-9]*/C/g" >actual && |
| 125 | test_cmp expected actual |
| 126 | ' |
| 127 | |
Lucien Kong | 83c750a | 2012-06-05 22:21:24 +0200 | [diff] [blame] | 128 | |
| 129 | test_expect_success 'status when conflicts with add and rm advice (deleted by them)' ' |
| 130 | git reset --hard && |
Johannes Schindelin | 01dc813 | 2020-11-18 23:44:39 +0000 | [diff] [blame] | 131 | git checkout main && |
Lucien Kong | 83c750a | 2012-06-05 22:21:24 +0200 | [diff] [blame] | 132 | test_commit init main.txt init && |
| 133 | git checkout -b second_branch && |
| 134 | git rm main.txt && |
| 135 | git commit -m "main.txt deleted on second_branch" && |
| 136 | test_commit second conflict.txt second && |
Johannes Schindelin | 01dc813 | 2020-11-18 23:44:39 +0000 | [diff] [blame] | 137 | git checkout main && |
Lucien Kong | 83c750a | 2012-06-05 22:21:24 +0200 | [diff] [blame] | 138 | test_commit on_second main.txt on_second && |
Johannes Schindelin | 01dc813 | 2020-11-18 23:44:39 +0000 | [diff] [blame] | 139 | test_commit main conflict.txt main && |
Lucien Kong | 83c750a | 2012-06-05 22:21:24 +0200 | [diff] [blame] | 140 | test_must_fail git merge second_branch && |
Matthieu Moy | 1c7969c | 2013-09-06 19:43:08 +0200 | [diff] [blame] | 141 | cat >expected <<\EOF && |
Johannes Schindelin | 01dc813 | 2020-11-18 23:44:39 +0000 | [diff] [blame] | 142 | On branch main |
Matthieu Moy | 1c7969c | 2013-09-06 19:43:08 +0200 | [diff] [blame] | 143 | You have unmerged paths. |
| 144 | (fix conflicts and run "git commit") |
Matthieu Moy | b0a61ab | 2016-07-21 14:58:37 +0200 | [diff] [blame] | 145 | (use "git merge --abort" to abort the merge) |
Matthieu Moy | 1c7969c | 2013-09-06 19:43:08 +0200 | [diff] [blame] | 146 | |
| 147 | Unmerged paths: |
| 148 | (use "git add/rm <file>..." as appropriate to mark resolution) |
Junio C Hamano | c7cb333 | 2014-03-12 13:43:51 -0700 | [diff] [blame] | 149 | both added: conflict.txt |
| 150 | deleted by them: main.txt |
Matthieu Moy | 1c7969c | 2013-09-06 19:43:08 +0200 | [diff] [blame] | 151 | |
| 152 | no changes added to commit (use "git add" and/or "git commit -a") |
| 153 | EOF |
Lucien Kong | 83c750a | 2012-06-05 22:21:24 +0200 | [diff] [blame] | 154 | git status --untracked-files=no >actual && |
Ævar Arnfjörð Bjarmason | 1108cea | 2021-02-11 02:53:53 +0100 | [diff] [blame] | 155 | test_cmp expected actual |
Lucien Kong | 83c750a | 2012-06-05 22:21:24 +0200 | [diff] [blame] | 156 | ' |
| 157 | |
| 158 | |
Lucien Kong | 96b0ec1 | 2012-06-05 22:21:26 +0200 | [diff] [blame] | 159 | test_expect_success 'prepare for conflicts' ' |
Lucien Kong | 83c750a | 2012-06-05 22:21:24 +0200 | [diff] [blame] | 160 | git reset --hard && |
| 161 | git checkout -b conflict && |
| 162 | test_commit one main.txt one && |
| 163 | git branch conflict_second && |
Johannes Schindelin | 01dc813 | 2020-11-18 23:44:39 +0000 | [diff] [blame] | 164 | git mv main.txt sub_main.txt && |
| 165 | git commit -m "main.txt renamed in sub_main.txt" && |
Lucien Kong | 83c750a | 2012-06-05 22:21:24 +0200 | [diff] [blame] | 166 | git checkout conflict_second && |
| 167 | git mv main.txt sub_second.txt && |
Lucien Kong | 96b0ec1 | 2012-06-05 22:21:26 +0200 | [diff] [blame] | 168 | git commit -m "main.txt renamed in sub_second.txt" |
| 169 | ' |
| 170 | |
| 171 | |
| 172 | test_expect_success 'status when conflicts with add and rm advice (both deleted)' ' |
Lucien Kong | 83c750a | 2012-06-05 22:21:24 +0200 | [diff] [blame] | 173 | test_must_fail git merge conflict && |
Matthieu Moy | 1c7969c | 2013-09-06 19:43:08 +0200 | [diff] [blame] | 174 | cat >expected <<\EOF && |
| 175 | On branch conflict_second |
| 176 | You have unmerged paths. |
| 177 | (fix conflicts and run "git commit") |
Matthieu Moy | b0a61ab | 2016-07-21 14:58:37 +0200 | [diff] [blame] | 178 | (use "git merge --abort" to abort the merge) |
Matthieu Moy | 1c7969c | 2013-09-06 19:43:08 +0200 | [diff] [blame] | 179 | |
| 180 | Unmerged paths: |
| 181 | (use "git add/rm <file>..." as appropriate to mark resolution) |
Junio C Hamano | c7cb333 | 2014-03-12 13:43:51 -0700 | [diff] [blame] | 182 | both deleted: main.txt |
Johannes Schindelin | 01dc813 | 2020-11-18 23:44:39 +0000 | [diff] [blame] | 183 | added by them: sub_main.txt |
Junio C Hamano | c7cb333 | 2014-03-12 13:43:51 -0700 | [diff] [blame] | 184 | added by us: sub_second.txt |
Matthieu Moy | 1c7969c | 2013-09-06 19:43:08 +0200 | [diff] [blame] | 185 | |
| 186 | no changes added to commit (use "git add" and/or "git commit -a") |
| 187 | EOF |
Lucien Kong | 83c750a | 2012-06-05 22:21:24 +0200 | [diff] [blame] | 188 | git status --untracked-files=no >actual && |
Ævar Arnfjörð Bjarmason | 1108cea | 2021-02-11 02:53:53 +0100 | [diff] [blame] | 189 | test_cmp expected actual |
Lucien Kong | 83c750a | 2012-06-05 22:21:24 +0200 | [diff] [blame] | 190 | ' |
| 191 | |
| 192 | |
Lucien Kong | 96b0ec1 | 2012-06-05 22:21:26 +0200 | [diff] [blame] | 193 | test_expect_success 'status when conflicts with only rm advice (both deleted)' ' |
| 194 | git reset --hard conflict_second && |
| 195 | test_must_fail git merge conflict && |
Johannes Schindelin | 01dc813 | 2020-11-18 23:44:39 +0000 | [diff] [blame] | 196 | git add sub_main.txt && |
Lucien Kong | 96b0ec1 | 2012-06-05 22:21:26 +0200 | [diff] [blame] | 197 | git add sub_second.txt && |
Matthieu Moy | 1c7969c | 2013-09-06 19:43:08 +0200 | [diff] [blame] | 198 | cat >expected <<\EOF && |
| 199 | On branch conflict_second |
| 200 | You have unmerged paths. |
| 201 | (fix conflicts and run "git commit") |
Matthieu Moy | b0a61ab | 2016-07-21 14:58:37 +0200 | [diff] [blame] | 202 | (use "git merge --abort" to abort the merge) |
Matthieu Moy | 1c7969c | 2013-09-06 19:43:08 +0200 | [diff] [blame] | 203 | |
| 204 | Changes to be committed: |
Johannes Schindelin | 01dc813 | 2020-11-18 23:44:39 +0000 | [diff] [blame] | 205 | new file: sub_main.txt |
Matthieu Moy | 1c7969c | 2013-09-06 19:43:08 +0200 | [diff] [blame] | 206 | |
| 207 | Unmerged paths: |
| 208 | (use "git rm <file>..." to mark resolution) |
Junio C Hamano | c7cb333 | 2014-03-12 13:43:51 -0700 | [diff] [blame] | 209 | both deleted: main.txt |
Matthieu Moy | 1c7969c | 2013-09-06 19:43:08 +0200 | [diff] [blame] | 210 | |
| 211 | Untracked files not listed (use -u option to show untracked files) |
| 212 | EOF |
Lucien Kong | 96b0ec1 | 2012-06-05 22:21:26 +0200 | [diff] [blame] | 213 | git status --untracked-files=no >actual && |
Ævar Arnfjörð Bjarmason | 1108cea | 2021-02-11 02:53:53 +0100 | [diff] [blame] | 214 | test_cmp expected actual && |
Lucien Kong | 96b0ec1 | 2012-06-05 22:21:26 +0200 | [diff] [blame] | 215 | git reset --hard && |
Johannes Schindelin | 01dc813 | 2020-11-18 23:44:39 +0000 | [diff] [blame] | 216 | git checkout main |
Lucien Kong | 96b0ec1 | 2012-06-05 22:21:26 +0200 | [diff] [blame] | 217 | ' |
| 218 | |
René Scharfe | baf0a3e | 2015-10-31 18:36:35 +0100 | [diff] [blame] | 219 | test_expect_success 'status --branch with detached HEAD' ' |
René Scharfe | 7ca8c18 | 2015-10-31 18:35:32 +0100 | [diff] [blame] | 220 | git reset --hard && |
Johannes Schindelin | 01dc813 | 2020-11-18 23:44:39 +0000 | [diff] [blame] | 221 | git checkout main^0 && |
René Scharfe | 7ca8c18 | 2015-10-31 18:35:32 +0100 | [diff] [blame] | 222 | git status --branch --porcelain >actual && |
| 223 | cat >expected <<-EOF && |
| 224 | ## HEAD (no branch) |
| 225 | ?? .gitconfig |
| 226 | ?? actual |
| 227 | ?? expect |
| 228 | ?? expected |
| 229 | ?? mdconflict/ |
| 230 | EOF |
Ævar Arnfjörð Bjarmason | 1108cea | 2021-02-11 02:53:53 +0100 | [diff] [blame] | 231 | test_cmp expected actual |
René Scharfe | 7ca8c18 | 2015-10-31 18:35:32 +0100 | [diff] [blame] | 232 | ' |
Lucien Kong | 96b0ec1 | 2012-06-05 22:21:26 +0200 | [diff] [blame] | 233 | |
Jeff Hostetler | c4f596b | 2016-08-05 18:00:28 -0400 | [diff] [blame] | 234 | ## Duplicate the above test and verify --porcelain=v1 arg parsing. |
| 235 | test_expect_success 'status --porcelain=v1 --branch with detached HEAD' ' |
| 236 | git reset --hard && |
Johannes Schindelin | 01dc813 | 2020-11-18 23:44:39 +0000 | [diff] [blame] | 237 | git checkout main^0 && |
Jeff Hostetler | c4f596b | 2016-08-05 18:00:28 -0400 | [diff] [blame] | 238 | git status --branch --porcelain=v1 >actual && |
| 239 | cat >expected <<-EOF && |
| 240 | ## HEAD (no branch) |
| 241 | ?? .gitconfig |
| 242 | ?? actual |
| 243 | ?? expect |
| 244 | ?? expected |
| 245 | ?? mdconflict/ |
| 246 | EOF |
Ævar Arnfjörð Bjarmason | 1108cea | 2021-02-11 02:53:53 +0100 | [diff] [blame] | 247 | test_cmp expected actual |
Jeff Hostetler | c4f596b | 2016-08-05 18:00:28 -0400 | [diff] [blame] | 248 | ' |
| 249 | |
| 250 | ## Verify parser error on invalid --porcelain argument. |
| 251 | test_expect_success 'status --porcelain=bogus' ' |
| 252 | test_must_fail git status --porcelain=bogus |
| 253 | ' |
| 254 | |
Junio C Hamano | 29796c6 | 2009-08-04 16:25:40 -0700 | [diff] [blame] | 255 | test_done |