]>
Commit | Line | Data |
---|---|---|
d09e79cb LT |
1 | #!/bin/sh |
2 | ||
3 | test_description='pulling into void' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
3cee9236 EN |
7 | modify () { |
8 | sed -e "$1" <"$2" >"$2.x" && | |
9 | mv "$2.x" "$2" | |
10 | } | |
11 | ||
d09e79cb LT |
12 | D=`pwd` |
13 | ||
14 | test_expect_success setup ' | |
15 | ||
16 | echo file >file && | |
17 | git add file && | |
18 | git commit -a -m original | |
19 | ||
20 | ' | |
21 | ||
22 | test_expect_success 'pulling into void' ' | |
23 | mkdir cloned && | |
24 | cd cloned && | |
5c94f87e | 25 | git init && |
d09e79cb LT |
26 | git pull .. |
27 | ' | |
28 | ||
29 | cd "$D" | |
30 | ||
31 | test_expect_success 'checking the results' ' | |
32 | test -f file && | |
33 | test -f cloned/file && | |
4fdf71be | 34 | test_cmp file cloned/file |
d09e79cb LT |
35 | ' |
36 | ||
b0ad11ea JH |
37 | test_expect_success 'pulling into void using master:master' ' |
38 | mkdir cloned-uho && | |
39 | ( | |
40 | cd cloned-uho && | |
41 | git init && | |
42 | git pull .. master:master | |
43 | ) && | |
44 | test -f file && | |
45 | test -f cloned-uho/file && | |
46 | test_cmp file cloned-uho/file | |
47 | ' | |
48 | ||
4b3ffe51 JK |
49 | test_expect_success 'pulling into void does not overwrite untracked files' ' |
50 | git init cloned-untracked && | |
51 | ( | |
52 | cd cloned-untracked && | |
53 | echo untracked >file && | |
54 | test_must_fail git pull .. master && | |
55 | echo untracked >expect && | |
56 | test_cmp expect file | |
57 | ) | |
58 | ' | |
59 | ||
9debc324 PB |
60 | test_expect_success 'test . as a remote' ' |
61 | ||
62 | git branch copy master && | |
63 | git config branch.copy.remote . && | |
64 | git config branch.copy.merge refs/heads/master && | |
65 | echo updated >file && | |
66 | git commit -a -m updated && | |
67 | git checkout copy && | |
68 | test `cat file` = file && | |
69 | git pull && | |
70 | test `cat file` = updated | |
71 | ' | |
72 | ||
73 | test_expect_success 'the default remote . should not break explicit pull' ' | |
74 | git checkout -b second master^ && | |
75 | echo modified >file && | |
76 | git commit -a -m modified && | |
77 | git checkout copy && | |
78 | git reset --hard HEAD^ && | |
79 | test `cat file` = file && | |
80 | git pull . second && | |
81 | test `cat file` = modified | |
82 | ' | |
83 | ||
cd67e4d4 JS |
84 | test_expect_success '--rebase' ' |
85 | git branch to-rebase && | |
86 | echo modified again > file && | |
87 | git commit -m file file && | |
88 | git checkout to-rebase && | |
89 | echo new > file2 && | |
90 | git add file2 && | |
91 | git commit -m "new file" && | |
92 | git tag before-rebase && | |
93 | git pull --rebase . copy && | |
94 | test $(git rev-parse HEAD^) = $(git rev-parse copy) && | |
95 | test new = $(git show HEAD:file2) | |
96 | ' | |
97 | ||
98 | test_expect_success 'branch.to-rebase.rebase' ' | |
99 | git reset --hard before-rebase && | |
100 | git config branch.to-rebase.rebase 1 && | |
101 | git pull . copy && | |
c85c7927 | 102 | git config branch.to-rebase.rebase 0 && |
cd67e4d4 JS |
103 | test $(git rev-parse HEAD^) = $(git rev-parse copy) && |
104 | test new = $(git show HEAD:file2) | |
105 | ' | |
106 | ||
c85c7927 JS |
107 | test_expect_success '--rebase with rebased upstream' ' |
108 | ||
109 | git remote add -f me . && | |
110 | git checkout copy && | |
e9460a66 | 111 | git tag copy-orig && |
c85c7927 JS |
112 | git reset --hard HEAD^ && |
113 | echo conflicting modification > file && | |
114 | git commit -m conflict file && | |
115 | git checkout to-rebase && | |
116 | echo file > file2 && | |
117 | git commit -m to-rebase file2 && | |
e9460a66 | 118 | git tag to-rebase-orig && |
c85c7927 JS |
119 | git pull --rebase me copy && |
120 | test "conflicting modification" = "$(cat file)" && | |
121 | test file = $(cat file2) | |
122 | ||
123 | ' | |
124 | ||
e9460a66 SB |
125 | test_expect_success '--rebase with rebased default upstream' ' |
126 | ||
127 | git update-ref refs/remotes/me/copy copy-orig && | |
128 | git checkout --track -b to-rebase2 me/copy && | |
129 | git reset --hard to-rebase-orig && | |
130 | git pull --rebase && | |
131 | test "conflicting modification" = "$(cat file)" && | |
132 | test file = $(cat file2) | |
133 | ||
134 | ' | |
135 | ||
d44e7126 | 136 | test_expect_success 'rebased upstream + fetch + pull --rebase' ' |
a418441b SB |
137 | |
138 | git update-ref refs/remotes/me/copy copy-orig && | |
139 | git reset --hard to-rebase-orig && | |
140 | git checkout --track -b to-rebase3 me/copy && | |
141 | git reset --hard to-rebase-orig && | |
142 | git fetch && | |
d44e7126 | 143 | git pull --rebase && |
a418441b SB |
144 | test "conflicting modification" = "$(cat file)" && |
145 | test file = "$(cat file2)" | |
146 | ||
147 | ' | |
148 | ||
f9189cf8 JS |
149 | test_expect_success 'pull --rebase dies early with dirty working directory' ' |
150 | ||
e9460a66 | 151 | git checkout to-rebase && |
f9189cf8 JS |
152 | git update-ref refs/remotes/me/copy copy^ && |
153 | COPY=$(git rev-parse --verify me/copy) && | |
154 | git rebase --onto $COPY copy && | |
155 | git config branch.to-rebase.remote me && | |
156 | git config branch.to-rebase.merge refs/heads/copy && | |
157 | git config branch.to-rebase.rebase true && | |
158 | echo dirty >> file && | |
159 | git add file && | |
160 | test_must_fail git pull && | |
161 | test $COPY = $(git rev-parse --verify me/copy) && | |
162 | git checkout HEAD -- file && | |
163 | git pull && | |
164 | test $COPY != $(git rev-parse --verify me/copy) | |
165 | ||
166 | ' | |
167 | ||
19a7fcbf JK |
168 | test_expect_success 'pull --rebase works on branch yet to be born' ' |
169 | git rev-parse master >expect && | |
170 | mkdir empty_repo && | |
171 | (cd empty_repo && | |
172 | git init && | |
173 | git pull --rebase .. master && | |
174 | git rev-parse HEAD >../actual | |
175 | ) && | |
176 | test_cmp expect actual | |
177 | ' | |
178 | ||
3cee9236 EN |
179 | test_expect_success 'setup for detecting upstreamed changes' ' |
180 | mkdir src && | |
181 | (cd src && | |
182 | git init && | |
183 | printf "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n" > stuff && | |
184 | git add stuff && | |
185 | git commit -m "Initial revision" | |
186 | ) && | |
187 | git clone src dst && | |
188 | (cd src && | |
189 | modify s/5/43/ stuff && | |
190 | git commit -a -m "5->43" && | |
191 | modify s/6/42/ stuff && | |
192 | git commit -a -m "Make it bigger" | |
193 | ) && | |
194 | (cd dst && | |
195 | modify s/5/43/ stuff && | |
196 | git commit -a -m "Independent discovery of 5->43" | |
197 | ) | |
198 | ' | |
199 | ||
cf65426d | 200 | test_expect_success 'git pull --rebase detects upstreamed changes' ' |
3cee9236 EN |
201 | (cd dst && |
202 | git pull --rebase && | |
203 | test -z "$(git ls-files -u)" | |
204 | ) | |
205 | ' | |
206 | ||
207 | test_expect_success 'setup for avoiding reapplying old patches' ' | |
208 | (cd dst && | |
209 | test_might_fail git rebase --abort && | |
210 | git reset --hard origin/master | |
211 | ) && | |
212 | git clone --bare src src-replace.git && | |
213 | rm -rf src && | |
214 | mv src-replace.git src && | |
215 | (cd dst && | |
216 | modify s/2/22/ stuff && | |
217 | git commit -a -m "Change 2" && | |
218 | modify s/3/33/ stuff && | |
219 | git commit -a -m "Change 3" && | |
220 | modify s/4/44/ stuff && | |
221 | git commit -a -m "Change 4" && | |
222 | git push && | |
223 | ||
224 | modify s/44/55/ stuff && | |
225 | git commit --amend -a -m "Modified Change 4" | |
226 | ) | |
227 | ' | |
228 | ||
cf65426d | 229 | test_expect_success 'git pull --rebase does not reapply old patches' ' |
3cee9236 EN |
230 | (cd dst && |
231 | test_must_fail git pull --rebase && | |
232 | test 1 = $(find .git/rebase-apply -name "000*" | wc -l) | |
233 | ) | |
234 | ' | |
235 | ||
fe249b42 MZ |
236 | test_expect_success 'git pull --rebase against local branch' ' |
237 | git checkout -b copy2 to-rebase-orig && | |
238 | git pull --rebase . to-rebase && | |
239 | test "conflicting modification" = "$(cat file)" && | |
240 | test file = "$(cat file2)" | |
241 | ' | |
242 | ||
d09e79cb | 243 | test_done |