@matheusbsbs / matheus-bagliano / commits / 2fe26b775c
Fork 0

Demonstrate breakage: checkout overwrites untracked symlink with directory

This adds tests where an untracked file and an untracked symlink are in the way where a directory should be created by 'git checkout'. Commit b1735b1a (do not overwrite files in leading path, 2010-12-14) fixed the case where a file is in the way, but the untracked symlink is still removed silently. Signed-off-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Johannes Sixt committed Feb 5, 2011 at 19:18 UTC 2fe26b775cfa298a0b4bc3c53011ca6da7c6c298
1 file changed +50
t/t2021-checkout-overwrite.sh new
+50
@@ -0,0 +1,50 @@
1 +#!/bin/sh
2 +
3 +test_description='checkout must not overwrite an untracked objects'
4 +. ./test-lib.sh
5 +
6 +test_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 +
15 +test_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 +
24 +test_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 +
32 +test_expect_success SYMLINKS '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 + ln -s foo a/b &&
38 + git add -A &&
39 + git commit -m "dir to symlink"
40 +'
41 +
42 +test_expect_failure SYMLINKS '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 + test -h a/b
48 +'
49 +
50 +test_done