Merge branch 'jc/maint-ls-tree' into maint
[git] / t / t2201-add-update-typechange.sh
1 #!/bin/sh
2
3 test_description='more git add -u'
4
5 . ./test-lib.sh
6
7 _z40=0000000000000000000000000000000000000000
8
9 test_expect_success setup '
10         >xyzzy &&
11         _empty=$(git hash-object --stdin <xyzzy) &&
12         >yomin &&
13         >caskly &&
14         ln -s frotz nitfol &&
15         mkdir rezrov &&
16         >rezrov/bozbar &&
17         git add caskly xyzzy yomin nitfol rezrov/bozbar &&
18
19         test_tick &&
20         git commit -m initial
21
22 '
23
24 test_expect_success modify '
25         rm -f xyzzy yomin nitfol caskly &&
26         # caskly disappears (not a submodule)
27         mkdir caskly &&
28         # nitfol changes from symlink to regular
29         >nitfol &&
30         # rezrov/bozbar disappears
31         rm -fr rezrov &&
32         ln -s xyzzy rezrov &&
33         # xyzzy disappears (not a submodule)
34         mkdir xyzzy &&
35         echo gnusto >xyzzy/bozbar &&
36         # yomin gets replaced with a submodule
37         mkdir yomin &&
38         >yomin/yomin &&
39         (
40                 cd yomin &&
41                 git init &&
42                 git add yomin &&
43                 git commit -m "sub initial"
44         ) &&
45         yomin=$(GIT_DIR=yomin/.git git rev-parse HEAD) &&
46         # yonk is added and then turned into a submodule
47         # this should appear as T in diff-files and as A in diff-index
48         >yonk &&
49         git add yonk &&
50         rm -f yonk &&
51         mkdir yonk &&
52         >yonk/yonk &&
53         (
54                 cd yonk &&
55                 git init &&
56                 git add yonk &&
57                 git commit -m "sub initial"
58         ) &&
59         yonk=$(GIT_DIR=yonk/.git git rev-parse HEAD) &&
60         # zifmia is added and then removed
61         # this should appear in diff-files but not in diff-index.
62         >zifmia &&
63         git add zifmia &&
64         rm -f zifmia &&
65         mkdir zifmia &&
66         {
67                 git ls-tree -r HEAD |
68                 sed -e "s/^/:/" -e "
69                         /       caskly/{
70                                 s/      caskly/ $_z40 D&/
71                                 s/blob/000000/
72                         }
73                         /       nitfol/{
74                                 s/      nitfol/ $_z40 T&/
75                                 s/blob/100644/
76                         }
77                         /       rezrov.bozbar/{
78                                 s/      rezrov.bozbar/ $_z40 D&/
79                                 s/blob/000000/
80                         }
81                         /       xyzzy/{
82                                 s/      xyzzy/ $_z40 D&/
83                                 s/blob/000000/
84                         }
85                         /       yomin/{
86                             s/  yomin/ $_z40 T&/
87                                 s/blob/160000/
88                         }
89                 "
90         } >expect &&
91         {
92                 cat expect
93                 echo ":100644 160000 $_empty $_z40 T    yonk"
94                 echo ":100644 000000 $_empty $_z40 D    zifmia"
95         } >expect-files &&
96         {
97                 cat expect
98                 echo ":000000 160000 $_z40 $_z40 A      yonk"
99         } >expect-index &&
100         {
101                 echo "100644 $_empty 0  nitfol"
102                 echo "160000 $yomin 0   yomin"
103                 echo "160000 $yonk 0    yonk"
104         } >expect-final
105 '
106
107 test_expect_success diff-files '
108         git diff-files --raw >actual &&
109         test_cmp expect-files actual
110 '
111
112 test_expect_success diff-index '
113         git diff-index --raw HEAD -- >actual &&
114         test_cmp expect-index actual
115 '
116
117 test_expect_success 'add -u' '
118         rm -f ".git/saved-index" &&
119         cp -p ".git/index" ".git/saved-index" &&
120         git add -u &&
121         git ls-files -s >actual &&
122         test_cmp expect-final actual
123 '
124
125 test_expect_success 'commit -a' '
126         if test -f ".git/saved-index"
127         then
128                 rm -f ".git/index" &&
129                 mv ".git/saved-index" ".git/index"
130         fi &&
131         git commit -m "second" -a &&
132         git ls-files -s >actual &&
133         test_cmp expect-final actual &&
134         rm -f .git/index &&
135         git read-tree HEAD &&
136         git ls-files -s >actual &&
137         test_cmp expect-final actual
138 '
139
140 test_done