Git fork
at reftables-rust 244 lines 5.5 kB view raw
1#!/bin/sh 2 3test_description='Test handling of overwriting untracked files' 4 5. ./test-lib.sh 6 7test_setup_reset () { 8 git init reset_$1 && 9 ( 10 cd reset_$1 && 11 test_commit init && 12 13 git branch stable && 14 git branch work && 15 16 git checkout work && 17 test_commit foo && 18 19 git checkout stable 20 ) 21} 22 23test_expect_success 'reset --hard will nuke untracked files/dirs' ' 24 test_setup_reset hard && 25 ( 26 cd reset_hard && 27 git ls-tree -r stable && 28 git log --all --name-status --oneline && 29 git ls-tree -r work && 30 31 mkdir foo.t && 32 echo precious >foo.t/file && 33 echo foo >expect && 34 35 git reset --hard work && 36 37 # check that untracked directory foo.t/ was nuked 38 test_path_is_file foo.t && 39 test_cmp expect foo.t 40 ) 41' 42 43test_expect_success 'reset --merge will preserve untracked files/dirs' ' 44 test_setup_reset merge && 45 ( 46 cd reset_merge && 47 48 mkdir foo.t && 49 echo precious >foo.t/file && 50 cp foo.t/file expect && 51 52 test_must_fail git reset --merge work 2>error && 53 test_cmp expect foo.t/file && 54 grep "Updating .foo.t. would lose untracked files" error 55 ) 56' 57 58test_expect_success 'reset --keep will preserve untracked files/dirs' ' 59 test_setup_reset keep && 60 ( 61 cd reset_keep && 62 63 mkdir foo.t && 64 echo precious >foo.t/file && 65 cp foo.t/file expect && 66 67 test_must_fail git reset --merge work 2>error && 68 test_cmp expect foo.t/file && 69 grep "Updating.*foo.t.*would lose untracked files" error 70 ) 71' 72 73test_setup_checkout_m () { 74 git init checkout && 75 ( 76 cd checkout && 77 test_commit init && 78 79 test_write_lines file has some >filler && 80 git add filler && 81 git commit -m filler && 82 83 git branch stable && 84 85 git switch -c work && 86 echo stuff >notes.txt && 87 test_write_lines file has some words >filler && 88 git add notes.txt filler && 89 git commit -m filler && 90 91 git checkout stable 92 ) 93} 94 95test_expect_success 'checkout -m does not nuke untracked file' ' 96 test_setup_checkout_m && 97 ( 98 cd checkout && 99 100 # Tweak filler 101 test_write_lines this file has some >filler && 102 # Make an untracked file, save its contents in "expect" 103 echo precious >notes.txt && 104 cp notes.txt expect && 105 106 test_must_fail git checkout -m work && 107 test_cmp expect notes.txt 108 ) 109' 110 111test_setup_sequencing () { 112 git init sequencing_$1 && 113 ( 114 cd sequencing_$1 && 115 test_commit init && 116 117 test_write_lines this file has some words >filler && 118 git add filler && 119 git commit -m filler && 120 121 mkdir -p foo/bar && 122 test_commit foo/bar/baz && 123 124 git branch simple && 125 git branch fooey && 126 127 git checkout fooey && 128 git rm foo/bar/baz.t && 129 echo stuff >>filler && 130 git add -u && 131 git commit -m "changes" && 132 133 git checkout simple && 134 echo items >>filler && 135 echo newstuff >>newfile && 136 git add filler newfile && 137 git commit -m another 138 ) 139} 140 141test_expect_success 'git rebase --abort and untracked files' ' 142 test_setup_sequencing rebase_abort_and_untracked && 143 ( 144 cd sequencing_rebase_abort_and_untracked && 145 git checkout fooey && 146 test_must_fail git rebase simple && 147 148 cat init.t && 149 git rm init.t && 150 echo precious >init.t && 151 cp init.t expect && 152 git status --porcelain && 153 test_must_fail git rebase --abort && 154 test_cmp expect init.t 155 ) 156' 157 158test_expect_success 'git rebase fast forwarding and untracked files' ' 159 test_setup_sequencing rebase_fast_forward_and_untracked && 160 ( 161 cd sequencing_rebase_fast_forward_and_untracked && 162 git checkout init && 163 echo precious >filler && 164 cp filler expect && 165 test_must_fail git rebase init simple && 166 test_cmp expect filler 167 ) 168' 169 170test_expect_failure 'git rebase --autostash and untracked files' ' 171 test_setup_sequencing rebase_autostash_and_untracked && 172 ( 173 cd sequencing_rebase_autostash_and_untracked && 174 git checkout simple && 175 git rm filler && 176 mkdir filler && 177 echo precious >filler/file && 178 cp filler/file expect && 179 git rebase --autostash init && 180 test_path_is_file filler/file 181 ) 182' 183 184test_expect_failure 'git stash and untracked files' ' 185 test_setup_sequencing stash_and_untracked_files && 186 ( 187 cd sequencing_stash_and_untracked_files && 188 git checkout simple && 189 git rm filler && 190 mkdir filler && 191 echo precious >filler/file && 192 cp filler/file expect && 193 git status --porcelain && 194 git stash push && 195 git status --porcelain && 196 test_path_is_file filler/file 197 ) 198' 199 200test_expect_success 'git am --abort and untracked dir vs. unmerged file' ' 201 test_setup_sequencing am_abort_and_untracked && 202 ( 203 cd sequencing_am_abort_and_untracked && 204 git format-patch -1 --stdout fooey >changes.mbox && 205 test_must_fail git am --3way changes.mbox && 206 207 # Delete the conflicted file; we will stage and commit it later 208 rm filler && 209 210 # Put an unrelated untracked directory there 211 mkdir filler && 212 echo foo >filler/file1 && 213 echo bar >filler/file2 && 214 215 test_must_fail git am --abort 2>errors && 216 test_path_is_dir filler && 217 grep "Updating .filler. would lose untracked files in it" errors 218 ) 219' 220 221test_expect_success 'git am --skip and untracked dir vs deleted file' ' 222 test_setup_sequencing am_skip_and_untracked && 223 ( 224 cd sequencing_am_skip_and_untracked && 225 git checkout fooey && 226 git format-patch -1 --stdout simple >changes.mbox && 227 test_must_fail git am --3way changes.mbox && 228 229 # Delete newfile 230 rm newfile && 231 232 # Put an unrelated untracked directory there 233 mkdir newfile && 234 echo foo >newfile/file1 && 235 echo bar >newfile/file2 && 236 237 # Change our mind about resolutions, just skip this patch 238 test_must_fail git am --skip 2>errors && 239 test_path_is_dir newfile && 240 grep "Updating .newfile. would lose untracked files in it" errors 241 ) 242' 243 244test_done