Merge branch 'jc/maint-column-doc-typofix'
[git] / t / t5538-push-shallow.sh
1 #!/bin/sh
2
3 test_description='push from/to a shallow clone'
4
5 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
6 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
7
8 . ./test-lib.sh
9
10 commit() {
11         echo "$1" >tracked &&
12         git add tracked &&
13         git commit -m "$1"
14 }
15
16 test_expect_success 'setup' '
17         git config --global transfer.fsckObjects true &&
18         commit 1 &&
19         commit 2 &&
20         commit 3 &&
21         commit 4 &&
22         git clone . full &&
23         (
24         git init full-abc &&
25         cd full-abc &&
26         commit a &&
27         commit b &&
28         commit c
29         ) &&
30         git clone --no-local --depth=2 .git shallow &&
31         git --git-dir=shallow/.git log --format=%s >actual &&
32         cat <<EOF >expect &&
33 4
34 3
35 EOF
36         test_cmp expect actual &&
37         git clone --no-local --depth=2 full-abc/.git shallow2 &&
38         git --git-dir=shallow2/.git log --format=%s >actual &&
39         cat <<EOF >expect &&
40 c
41 b
42 EOF
43         test_cmp expect actual
44 '
45
46 test_expect_success 'push from shallow clone' '
47         (
48         cd shallow &&
49         commit 5 &&
50         git push ../.git +main:refs/remotes/shallow/main
51         ) &&
52         git log --format=%s shallow/main >actual &&
53         git fsck &&
54         cat <<EOF >expect &&
55 5
56 4
57 3
58 2
59 1
60 EOF
61         test_cmp expect actual
62 '
63
64 test_expect_success 'push from shallow clone, with grafted roots' '
65         (
66         cd shallow2 &&
67         test_must_fail git push ../.git +main:refs/remotes/shallow2/main 2>err &&
68         grep "shallow2/main.*shallow update not allowed" err
69         ) &&
70         test_must_fail git rev-parse shallow2/main &&
71         git fsck
72 '
73
74 test_expect_success 'add new shallow root with receive.updateshallow on' '
75         test_config receive.shallowupdate true &&
76         (
77         cd shallow2 &&
78         git push ../.git +main:refs/remotes/shallow2/main
79         ) &&
80         git log --format=%s shallow2/main >actual &&
81         git fsck &&
82         cat <<EOF >expect &&
83 c
84 b
85 EOF
86         test_cmp expect actual
87 '
88
89 test_expect_success 'push from shallow to shallow' '
90         (
91         cd shallow &&
92         git --git-dir=../shallow2/.git config receive.shallowupdate true &&
93         git push ../shallow2/.git +main:refs/remotes/shallow/main &&
94         git --git-dir=../shallow2/.git config receive.shallowupdate false
95         ) &&
96         (
97         cd shallow2 &&
98         git log --format=%s shallow/main >actual &&
99         git fsck &&
100         cat <<EOF >expect &&
101 5
102 4
103 3
104 EOF
105         test_cmp expect actual
106         )
107 '
108
109 test_expect_success 'push from full to shallow' '
110         ! git --git-dir=shallow2/.git cat-file blob $(echo 1|git hash-object --stdin) &&
111         commit 1 &&
112         git push shallow2/.git +main:refs/remotes/top/main &&
113         (
114         cd shallow2 &&
115         git log --format=%s top/main >actual &&
116         git fsck &&
117         cat <<EOF >expect &&
118 1
119 4
120 3
121 EOF
122         test_cmp expect actual &&
123         git cat-file blob $(echo 1|git hash-object --stdin) >/dev/null
124         )
125 '
126 test_done