Merge branch 'bc/object-id'
[git] / t / t5614-clone-submodules-shallow.sh
1 #!/bin/sh
2
3 test_description='Test shallow cloning of repos with submodules'
4
5 . ./test-lib.sh
6
7 pwd=$(pwd)
8
9 test_expect_success 'setup' '
10         git checkout -b master &&
11         test_commit commit1 &&
12         test_commit commit2 &&
13         mkdir sub &&
14         (
15                 cd sub &&
16                 git init &&
17                 test_commit subcommit1 &&
18                 test_commit subcommit2 &&
19                 test_commit subcommit3
20         ) &&
21         git submodule add "file://$pwd/sub" sub &&
22         git commit -m "add submodule"
23 '
24
25 test_expect_success 'nonshallow clone implies nonshallow submodule' '
26         test_when_finished "rm -rf super_clone" &&
27         git clone --recurse-submodules "file://$pwd/." super_clone &&
28         git -C super_clone log --oneline >lines &&
29         test_line_count = 3 lines &&
30         git -C super_clone/sub log --oneline >lines &&
31         test_line_count = 3 lines
32 '
33
34 test_expect_success 'shallow clone with shallow submodule' '
35         test_when_finished "rm -rf super_clone" &&
36         git clone --recurse-submodules --depth 2 --shallow-submodules "file://$pwd/." super_clone &&
37         git -C super_clone log --oneline >lines &&
38         test_line_count = 2 lines &&
39         git -C super_clone/sub log --oneline >lines &&
40         test_line_count = 1 lines
41 '
42
43 test_expect_success 'shallow clone does not imply shallow submodule' '
44         test_when_finished "rm -rf super_clone" &&
45         git clone --recurse-submodules --depth 2 "file://$pwd/." super_clone &&
46         git -C super_clone log --oneline >lines &&
47         test_line_count = 2 lines &&
48         git -C super_clone/sub log --oneline >lines &&
49         test_line_count = 3 lines
50 '
51
52 test_expect_success 'shallow clone with non shallow submodule' '
53         test_when_finished "rm -rf super_clone" &&
54         git clone --recurse-submodules --depth 2 --no-shallow-submodules "file://$pwd/." super_clone &&
55         git -C super_clone log --oneline >lines &&
56         test_line_count = 2 lines &&
57         git -C super_clone/sub log --oneline >lines &&
58         test_line_count = 3 lines
59 '
60
61 test_expect_success 'non shallow clone with shallow submodule' '
62         test_when_finished "rm -rf super_clone" &&
63         git clone --recurse-submodules --no-local --shallow-submodules "file://$pwd/." super_clone &&
64         git -C super_clone log --oneline >lines &&
65         test_line_count = 3 lines &&
66         git -C super_clone/sub log --oneline >lines &&
67         test_line_count = 1 lines
68 '
69
70 test_expect_success 'clone follows shallow recommendation' '
71         test_when_finished "rm -rf super_clone" &&
72         git config -f .gitmodules submodule.sub.shallow true &&
73         git add .gitmodules &&
74         git commit -m "recommed shallow for sub" &&
75         git clone --recurse-submodules --no-local "file://$pwd/." super_clone &&
76         (
77                 cd super_clone &&
78                 git log --oneline >lines &&
79                 test_line_count = 4 lines
80         ) &&
81         (
82                 cd super_clone/sub &&
83                 git log --oneline >lines &&
84                 test_line_count = 1 lines
85         )
86 '
87
88 test_expect_success 'get unshallow recommended shallow submodule' '
89         test_when_finished "rm -rf super_clone" &&
90         git clone --no-local "file://$pwd/." super_clone &&
91         (
92                 cd super_clone &&
93                 git submodule update --init --no-recommend-shallow &&
94                 git log --oneline >lines &&
95                 test_line_count = 4 lines
96         ) &&
97         (
98                 cd super_clone/sub &&
99                 git log --oneline >lines &&
100                 test_line_count = 3 lines
101         )
102 '
103
104 test_expect_success 'clone follows non shallow recommendation' '
105         test_when_finished "rm -rf super_clone" &&
106         git config -f .gitmodules submodule.sub.shallow false &&
107         git add .gitmodules &&
108         git commit -m "recommed non shallow for sub" &&
109         git clone --recurse-submodules --no-local "file://$pwd/." super_clone &&
110         (
111                 cd super_clone &&
112                 git log --oneline >lines &&
113                 test_line_count = 5 lines
114         ) &&
115         (
116                 cd super_clone/sub &&
117                 git log --oneline >lines &&
118                 test_line_count = 3 lines
119         )
120 '
121
122 test_done