1#!/bin/sh 2 3test_description='checkout must not overwrite an untracked objects' 4. ./test-lib.sh 5 6test_expect_success 'setup' ' 7 8 mkdir -p a/b/c && 9 >a/b/c/d && 10 git add -A && 11 git commit -m base && 12 git tag start 13' 14 15test_expect_success 'create a commit where dir a/b changed to file' ' 16 17 git checkout -b file && 18 rm -rf a/b && 19 >a/b && 20 git add -A && 21 git commit -m "dir to file" 22' 23 24test_expect_success 'checkout commit with dir must not remove untracked a/b' ' 25 26 git rm --cached a/b && 27 git commit -m "un-track the file" && 28 test_must_fail git checkout start && 29 test -f a/b 30' 31 32test_expect_success 'create a commit where dir a/b changed to symlink' ' 33 34 rm -rf a/b && # cleanup if previous test failed 35 git checkout -f -b symlink start && 36 rm -rf a/b && 37 git add -A && 38 test_ln_s_add foo a/b && 39 git commit -m "dir to symlink" 40' 41 42test_expect_success 'checkout commit with dir must not remove untracked a/b' ' 43 44 git rm --cached a/b && 45 git commit -m "un-track the symlink" && 46 test_must_fail git checkout start 47' 48 49test_expect_success SYMLINKS 'the symlink remained' ' 50 51 test_when_finished "rm a/b" && 52 test -h a/b 53' 54 55test_expect_success SYMLINKS 'checkout -f must not follow symlinks when removing entries' ' 56 git checkout -f start && 57 mkdir dir && 58 >dir/f && 59 git add dir/f && 60 git commit -m "add dir/f" && 61 mv dir untracked && 62 ln -s untracked dir && 63 git checkout -f HEAD~ && 64 test_path_is_file untracked/f 65' 66 67test_done 68