Merge branch 'maint'
[git] / t / t7406-submodule-update.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2009 Red Hat, Inc.
4 #
5
6 test_description='Test updating submodules
7
8 This test verifies that "git submodule update" detaches the HEAD of the
9 submodule and "git submodule update --rebase" does not detach the HEAD.
10 '
11
12 . ./test-lib.sh
13
14
15 compare_head()
16 {
17     sha_master=`git-rev-list --max-count=1 master`
18     sha_head=`git-rev-list --max-count=1 HEAD`
19
20     test "$sha_master" = "$sha_head"
21 }
22
23
24 test_expect_success 'setup a submodule tree' '
25         echo file > file &&
26         git add file &&
27         test_tick &&
28         git commit -m upstream
29         git clone . super &&
30         git clone super submodule &&
31         (cd super &&
32          git submodule add ../submodule submodule &&
33          test_tick &&
34          git commit -m "submodule" &&
35          git submodule init submodule
36         ) &&
37         (cd submodule &&
38         echo "line2" > file &&
39         git add file &&
40         git commit -m "Commit 2"
41         ) &&
42         (cd super &&
43          (cd submodule &&
44           git pull --rebase origin
45          ) &&
46          git add submodule &&
47          git commit -m "submodule update"
48         )
49 '
50
51 test_expect_success 'submodule update detaching the HEAD ' '
52         (cd super/submodule &&
53          git reset --hard HEAD~1
54         ) &&
55         (cd super &&
56          (cd submodule &&
57           compare_head
58          ) &&
59          git submodule update submodule &&
60          cd submodule &&
61          ! compare_head
62         )
63 '
64
65 test_expect_success 'submodule update --rebase staying on master' '
66         (cd super/submodule &&
67           git checkout master
68         ) &&
69         (cd super &&
70          (cd submodule &&
71           compare_head
72          ) &&
73          git submodule update --rebase submodule &&
74          cd submodule &&
75          compare_head
76         )
77 '
78
79 test_expect_success 'submodule update - rebase in .git/config' '
80         (cd super &&
81          git config submodule.submodule.update rebase
82         ) &&
83         (cd super/submodule &&
84           git reset --hard HEAD~1
85         ) &&
86         (cd super &&
87          (cd submodule &&
88           compare_head
89          ) &&
90          git submodule update submodule &&
91          cd submodule &&
92          compare_head
93         )
94 '
95
96 test_expect_success 'submodule update - checkout in .git/config but --rebase given' '
97         (cd super &&
98          git config submodule.submodule.update checkout
99         ) &&
100         (cd super/submodule &&
101           git reset --hard HEAD~1
102         ) &&
103         (cd super &&
104          (cd submodule &&
105           compare_head
106          ) &&
107          git submodule update --rebase submodule &&
108          cd submodule &&
109          compare_head
110         )
111 '
112
113 test_expect_success 'submodule update - checkout in .git/config' '
114         (cd super &&
115          git config submodule.submodule.update checkout
116         ) &&
117         (cd super/submodule &&
118           git reset --hard HEAD^
119         ) &&
120         (cd super &&
121          (cd submodule &&
122           compare_head
123          ) &&
124          git submodule update submodule &&
125          cd submodule &&
126          ! compare_head
127         )
128 '
129
130 test_expect_success 'submodule init picks up rebase' '
131         (cd super &&
132          git config submodule.rebasing.url git://non-existing/git &&
133          git config submodule.rebasing.path does-not-matter &&
134          git config submodule.rebasing.update rebase &&
135          git submodule init rebasing &&
136          test "rebase" = $(git config submodule.rebasing.update)
137         )
138 '
139
140 test_done