Merge git://git2.kernel.org/pub/scm/gitk/gitk
[git] / t / t7201-co.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2006 Junio C Hamano
4 #
5
6 test_description='git-checkout tests.'
7
8 . ./test-lib.sh
9
10 fill () {
11         for i
12         do
13                 echo "$i"
14         done
15 }
16
17
18 test_expect_success setup '
19
20         fill 1 2 3 4 5 6 7 8 >one &&
21         fill a b c d e >two &&
22         git add one two &&
23         git commit -m "Initial A one, A two" &&
24
25         git checkout -b renamer &&
26         rm -f one &&
27         fill 1 3 4 5 6 7 8 >uno &&
28         git add uno &&
29         fill a b c d e f >two &&
30         git commit -a -m "Renamer R one->uno, M two" &&
31
32         git checkout -b side master &&
33         fill 1 2 3 4 5 6 7 >one &&
34         fill A B C D E >three &&
35         rm -f two &&
36         git update-index --add --remove one two three &&
37         git commit -m "Side M one, D two, A three" &&
38
39         git checkout master
40 '
41
42 test_expect_success "checkout from non-existing branch" '
43
44         git checkout -b delete-me master &&
45         rm .git/refs/heads/delete-me &&
46         test refs/heads/delete-me = "$(git symbolic-ref HEAD)" &&
47         git checkout master &&
48         test refs/heads/master = "$(git symbolic-ref HEAD)"
49 '
50
51 test_expect_success "checkout with dirty tree without -m" '
52
53         fill 0 1 2 3 4 5 6 7 8 >one &&
54         if git checkout side
55         then
56                 echo Not happy
57                 false
58         else
59                 echo "happy - failed correctly"
60         fi
61
62 '
63
64 test_expect_success "checkout -m with dirty tree" '
65
66         git checkout -f master &&
67         git clean &&
68
69         fill 0 1 2 3 4 5 6 7 8 >one &&
70         git checkout -m side &&
71
72         test "$(git symbolic-ref HEAD)" = "refs/heads/side" &&
73
74         fill "M one" "A three" "D       two" >expect.master &&
75         git diff --name-status master >current.master &&
76         diff expect.master current.master &&
77
78         fill "M one" >expect.side &&
79         git diff --name-status side >current.side &&
80         diff expect.side current.side &&
81
82         : >expect.index &&
83         git diff --cached >current.index &&
84         diff expect.index current.index
85 '
86
87 test_expect_success "checkout -m with dirty tree, renamed" '
88
89         git checkout -f master && git clean &&
90
91         fill 1 2 3 4 5 7 8 >one &&
92         if git checkout renamer
93         then
94                 echo Not happy
95                 false
96         else
97                 echo "happy - failed correctly"
98         fi &&
99
100         git checkout -m renamer &&
101         fill 1 3 4 5 7 8 >expect &&
102         diff expect uno &&
103         ! test -f one &&
104         git diff --cached >current &&
105         ! test -s current
106
107 '
108
109 test_expect_success 'checkout -m with merge conflict' '
110
111         git checkout -f master && git clean &&
112
113         fill 1 T 3 4 5 6 S 8 >one &&
114         if git checkout renamer
115         then
116                 echo Not happy
117                 false
118         else
119                 echo "happy - failed correctly"
120         fi &&
121
122         git checkout -m renamer &&
123
124         git diff master:one :3:uno |
125         sed -e "1,/^@@/d" -e "/^ /d" -e "s/^-/d/" -e "s/^+/a/" >current &&
126         fill d2 aT d7 aS >expect &&
127         diff current expect &&
128         git diff --cached two >current &&
129         ! test -s current
130 '
131
132 test_done