]>
Commit | Line | Data |
---|---|---|
bdf25142 LT |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2005 Junio C Hamano | |
4 | # | |
5 | ||
6 | test_description='See why rewinding head breaks send-pack | |
7 | ||
8 | ' | |
9 | . ./test-lib.sh | |
10 | ||
04509738 | 11 | cnt=64 |
bdf25142 | 12 | test_expect_success setup ' |
04509738 JH |
13 | test_tick && |
14 | mkdir mozart mozart/is && | |
15 | echo "Commit #0" >mozart/is/pink && | |
5be60078 JH |
16 | git update-index --add mozart/is/pink && |
17 | tree=$(git write-tree) && | |
18 | commit=$(echo "Commit #0" | git commit-tree $tree) && | |
bdf25142 LT |
19 | zero=$commit && |
20 | parent=$zero && | |
04509738 JH |
21 | i=0 && |
22 | while test $i -le $cnt | |
bdf25142 | 23 | do |
04509738 JH |
24 | i=$(($i+1)) && |
25 | test_tick && | |
26 | echo "Commit #$i" >mozart/is/pink && | |
5be60078 JH |
27 | git update-index --add mozart/is/pink && |
28 | tree=$(git write-tree) && | |
29 | commit=$(echo "Commit #$i" | git commit-tree $tree -p $parent) && | |
30 | git update-ref refs/tags/commit$i $commit && | |
4d9d62fa | 31 | parent=$commit || return 1 |
bdf25142 | 32 | done && |
5be60078 | 33 | git update-ref HEAD "$commit" && |
3604e7c5 | 34 | git clone ./. victim && |
acd2a45b | 35 | ( cd victim && git config receive.denyCurrentBranch warn && git log ) && |
5be60078 | 36 | git update-ref HEAD "$zero" && |
bdf25142 | 37 | parent=$zero && |
04509738 JH |
38 | i=0 && |
39 | while test $i -le $cnt | |
bdf25142 | 40 | do |
04509738 JH |
41 | i=$(($i+1)) && |
42 | test_tick && | |
43 | echo "Rebase #$i" >mozart/is/pink && | |
5be60078 JH |
44 | git update-index --add mozart/is/pink && |
45 | tree=$(git write-tree) && | |
46 | commit=$(echo "Rebase #$i" | git commit-tree $tree -p $parent) && | |
47 | git update-ref refs/tags/rebase$i $commit && | |
4d9d62fa | 48 | parent=$commit || return 1 |
bdf25142 | 49 | done && |
5be60078 | 50 | git update-ref HEAD "$commit" && |
bdf25142 | 51 | echo Rebase && |
5be60078 | 52 | git log' |
bdf25142 | 53 | |
04509738 JH |
54 | test_expect_success 'pack the source repository' ' |
55 | git repack -a -d && | |
026aa938 | 56 | git prune |
04509738 JH |
57 | ' |
58 | ||
59 | test_expect_success 'pack the destination repository' ' | |
2f334155 | 60 | ( |
04509738 JH |
61 | cd victim && |
62 | git repack -a -d && | |
2f334155 JH |
63 | git prune |
64 | ) | |
04509738 JH |
65 | ' |
66 | ||
2f334155 JH |
67 | test_expect_success 'refuse pushing rewound head without --force' ' |
68 | pushed_head=$(git rev-parse --verify master) && | |
69 | victim_orig=$(cd victim && git rev-parse --verify master) && | |
70 | test_must_fail git send-pack ./victim master && | |
71 | victim_head=$(cd victim && git rev-parse --verify master) && | |
72 | test "$victim_head" = "$victim_orig" && | |
bdf25142 | 73 | # this should update |
2f334155 JH |
74 | git send-pack --force ./victim master && |
75 | victim_head=$(cd victim && git rev-parse --verify master) && | |
76 | test "$victim_head" = "$pushed_head" | |
bdf25142 | 77 | ' |
da7bc9b0 | 78 | |
d4f694ba JH |
79 | test_expect_success \ |
80 | 'push can be used to delete a ref' ' | |
2f334155 JH |
81 | ( cd victim && git branch extra master ) && |
82 | git send-pack ./victim :extra master && | |
83 | ( cd victim && | |
84 | test_must_fail git rev-parse --verify extra ) | |
d4f694ba JH |
85 | ' |
86 | ||
2f334155 JH |
87 | test_expect_success 'refuse deleting push with denyDeletes' ' |
88 | ( | |
89 | cd victim && | |
90 | ( git branch -D extra || : ) && | |
91 | git config receive.denyDeletes true && | |
92 | git branch extra master | |
93 | ) && | |
94 | test_must_fail git send-pack ./victim :extra master | |
a240de11 | 95 | ' |
a240de11 | 96 | |
655e8d9c JN |
97 | test_expect_success 'cannot override denyDeletes with git -c send-pack' ' |
98 | ( | |
99 | cd victim && | |
100 | test_might_fail git branch -D extra && | |
101 | git config receive.denyDeletes true && | |
102 | git branch extra master | |
103 | ) && | |
104 | test_must_fail git -c receive.denyDeletes=false \ | |
105 | send-pack ./victim :extra master | |
106 | ' | |
107 | ||
108 | test_expect_success 'override denyDeletes with git -c receive-pack' ' | |
109 | ( | |
110 | cd victim && | |
111 | test_might_fail git branch -D extra && | |
112 | git config receive.denyDeletes true && | |
113 | git branch extra master | |
114 | ) && | |
115 | git send-pack \ | |
116 | --receive-pack="git -c receive.denyDeletes=false receive-pack" \ | |
117 | ./victim :extra master | |
118 | ' | |
119 | ||
2f334155 JH |
120 | test_expect_success 'denyNonFastforwards trumps --force' ' |
121 | ( | |
122 | cd victim && | |
123 | ( git branch -D extra || : ) && | |
124 | git config receive.denyNonFastforwards true | |
125 | ) && | |
126 | victim_orig=$(cd victim && git rev-parse --verify master) && | |
127 | test_must_fail git send-pack --force ./victim master^:master && | |
128 | victim_head=$(cd victim && git rev-parse --verify master) && | |
129 | test "$victim_orig" = "$victim_head" | |
199a9218 JS |
130 | ' |
131 | ||
60109d0e | 132 | test_expect_success 'push --all excludes remote-tracking hierarchy' ' |
2f334155 JH |
133 | mkdir parent && |
134 | ( | |
135 | cd parent && | |
136 | git init && : >file && git add file && git commit -m add | |
137 | ) && | |
138 | git clone parent child && | |
139 | ( | |
140 | cd child && git push --all | |
141 | ) && | |
142 | ( | |
143 | cd parent && | |
144 | test -z "$(git for-each-ref refs/remotes/origin)" | |
145 | ) | |
5c633a4c JK |
146 | ' |
147 | ||
5eb73581 JK |
148 | rewound_push_setup() { |
149 | rm -rf parent child && | |
2f334155 JH |
150 | mkdir parent && |
151 | ( | |
152 | cd parent && | |
153 | git init && | |
154 | echo one >file && git add file && git commit -m one && | |
acd2a45b | 155 | git config receive.denyCurrentBranch warn && |
2f334155 JH |
156 | echo two >file && git commit -a -m two |
157 | ) && | |
158 | git clone parent child && | |
159 | ( | |
160 | cd child && git reset --hard HEAD^ | |
161 | ) | |
5eb73581 JK |
162 | } |
163 | ||
164 | rewound_push_succeeded() { | |
165 | cmp ../parent/.git/refs/heads/master .git/refs/heads/master | |
166 | } | |
167 | ||
168 | rewound_push_failed() { | |
169 | if rewound_push_succeeded | |
170 | then | |
171 | false | |
172 | else | |
173 | true | |
174 | fi | |
175 | } | |
176 | ||
2f334155 | 177 | test_expect_success 'pushing explicit refspecs respects forcing' ' |
5eb73581 | 178 | rewound_push_setup && |
2f334155 JH |
179 | parent_orig=$(cd parent && git rev-parse --verify master) && |
180 | ( | |
181 | cd child && | |
182 | test_must_fail git send-pack ../parent \ | |
183 | refs/heads/master:refs/heads/master | |
184 | ) && | |
185 | parent_head=$(cd parent && git rev-parse --verify master) && | |
186 | test "$parent_orig" = "$parent_head" && | |
187 | ( | |
188 | cd child && | |
189 | git send-pack ../parent \ | |
190 | +refs/heads/master:refs/heads/master | |
191 | ) && | |
192 | parent_head=$(cd parent && git rev-parse --verify master) && | |
ebe8621f | 193 | child_head=$(cd child && git rev-parse --verify master) && |
2f334155 | 194 | test "$parent_head" = "$child_head" |
5eb73581 JK |
195 | ' |
196 | ||
2f334155 | 197 | test_expect_success 'pushing wildcard refspecs respects forcing' ' |
5eb73581 | 198 | rewound_push_setup && |
2f334155 JH |
199 | parent_orig=$(cd parent && git rev-parse --verify master) && |
200 | ( | |
201 | cd child && | |
202 | test_must_fail git send-pack ../parent \ | |
203 | "refs/heads/*:refs/heads/*" | |
204 | ) && | |
205 | parent_head=$(cd parent && git rev-parse --verify master) && | |
206 | test "$parent_orig" = "$parent_head" && | |
207 | ( | |
208 | cd child && | |
209 | git send-pack ../parent \ | |
210 | "+refs/heads/*:refs/heads/*" | |
211 | ) && | |
212 | parent_head=$(cd parent && git rev-parse --verify master) && | |
ebe8621f | 213 | child_head=$(cd child && git rev-parse --verify master) && |
2f334155 | 214 | test "$parent_head" = "$child_head" |
5eb73581 JK |
215 | ' |
216 | ||
375881fa | 217 | test_expect_success 'deny pushing to delete current branch' ' |
747ca245 JH |
218 | rewound_push_setup && |
219 | ( | |
220 | cd child && | |
375881fa | 221 | test_must_fail git send-pack ../parent :refs/heads/master 2>errs |
747ca245 JH |
222 | ) |
223 | ' | |
224 | ||
da7bc9b0 | 225 | test_done |