Show More
@@ -0,0 +1,315 b'' | |||
|
1 | ==================================================== | |
|
2 | Test push/pull from multiple source at the same time | |
|
3 | ==================================================== | |
|
4 | ||
|
5 | ||
|
6 | Setup | |
|
7 | ===== | |
|
8 | ||
|
9 | main repository | |
|
10 | --------------- | |
|
11 | ||
|
12 | $ . $RUNTESTDIR/testlib/common.sh | |
|
13 | $ hg init main-repo | |
|
14 | $ cd main-repo | |
|
15 | $ mkcommit A | |
|
16 | $ mkcommit B | |
|
17 | $ mkcommit C | |
|
18 | $ mkcommit D | |
|
19 | $ mkcommit E | |
|
20 | $ hg up 'desc(B)' | |
|
21 | 0 files updated, 0 files merged, 3 files removed, 0 files unresolved | |
|
22 | $ mkcommit F | |
|
23 | created new head | |
|
24 | $ mkcommit G | |
|
25 | $ hg up 'desc(C)' | |
|
26 | 1 files updated, 0 files merged, 2 files removed, 0 files unresolved | |
|
27 | $ mkcommit H | |
|
28 | created new head | |
|
29 | $ hg up null --quiet | |
|
30 | $ hg log -T '{desc} {rev}\n' --rev 'sort(all(), "topo")' -G | |
|
31 | o H 7 | |
|
32 | | | |
|
33 | | o E 4 | |
|
34 | | | | |
|
35 | | o D 3 | |
|
36 | |/ | |
|
37 | o C 2 | |
|
38 | | | |
|
39 | | o G 6 | |
|
40 | | | | |
|
41 | | o F 5 | |
|
42 | |/ | |
|
43 | o B 1 | |
|
44 | | | |
|
45 | o A 0 | |
|
46 | ||
|
47 | $ cd .. | |
|
48 | ||
|
49 | Various other repositories | |
|
50 | -------------------------- | |
|
51 | ||
|
52 | $ hg clone main-repo branch-E --rev 4 -U | |
|
53 | adding changesets | |
|
54 | adding manifests | |
|
55 | adding file changes | |
|
56 | added 5 changesets with 5 changes to 5 files | |
|
57 | new changesets 4a2df7238c3b:a603bfb5a83e | |
|
58 | $ hg clone main-repo branch-G --rev 6 -U | |
|
59 | adding changesets | |
|
60 | adding manifests | |
|
61 | adding file changes | |
|
62 | added 4 changesets with 4 changes to 4 files | |
|
63 | new changesets 4a2df7238c3b:c521a06b234b | |
|
64 | $ hg clone main-repo branch-H --rev 7 -U | |
|
65 | adding changesets | |
|
66 | adding manifests | |
|
67 | adding file changes | |
|
68 | added 4 changesets with 4 changes to 4 files | |
|
69 | new changesets 4a2df7238c3b:40faebb2ec45 | |
|
70 | ||
|
71 | Test simple bare operation | |
|
72 | ========================== | |
|
73 | ||
|
74 | $ hg clone main-repo test-repo-bare --rev 0 -U | |
|
75 | adding changesets | |
|
76 | adding manifests | |
|
77 | adding file changes | |
|
78 | added 1 changesets with 1 changes to 1 files | |
|
79 | new changesets 4a2df7238c3b | |
|
80 | ||
|
81 | $ hg pull -R test-repo-bare ./branch-E ./branch-G ./branch-H | |
|
82 | pulling from ./branch-E | |
|
83 | searching for changes | |
|
84 | adding changesets | |
|
85 | adding manifests | |
|
86 | adding file changes | |
|
87 | added 4 changesets with 4 changes to 4 files | |
|
88 | new changesets 27547f69f254:a603bfb5a83e | |
|
89 | (run 'hg update' to get a working copy) | |
|
90 | pulling from ./branch-G | |
|
91 | searching for changes | |
|
92 | adding changesets | |
|
93 | adding manifests | |
|
94 | adding file changes | |
|
95 | added 2 changesets with 2 changes to 2 files (+1 heads) | |
|
96 | new changesets 2f3a4c5c1417:c521a06b234b | |
|
97 | (run 'hg heads' to see heads, 'hg merge' to merge) | |
|
98 | pulling from ./branch-H | |
|
99 | searching for changes | |
|
100 | adding changesets | |
|
101 | adding manifests | |
|
102 | adding file changes | |
|
103 | added 1 changesets with 1 changes to 1 files (+1 heads) | |
|
104 | new changesets 40faebb2ec45 | |
|
105 | (run 'hg heads .' to see heads, 'hg merge' to merge) | |
|
106 | $ hg log -R test-repo-bare -T '{desc} {rev}\n' --rev 'sort(all(), "topo")' -G | |
|
107 | o H 7 | |
|
108 | | | |
|
109 | | o E 4 | |
|
110 | | | | |
|
111 | | o D 3 | |
|
112 | |/ | |
|
113 | o C 2 | |
|
114 | | | |
|
115 | | o G 6 | |
|
116 | | | | |
|
117 | | o F 5 | |
|
118 | |/ | |
|
119 | o B 1 | |
|
120 | | | |
|
121 | o A 0 | |
|
122 | ||
|
123 | ||
|
124 | Test operation with a target | |
|
125 | ============================ | |
|
126 | ||
|
127 | $ hg clone main-repo test-repo-rev --rev 0 -U | |
|
128 | adding changesets | |
|
129 | adding manifests | |
|
130 | adding file changes | |
|
131 | added 1 changesets with 1 changes to 1 files | |
|
132 | new changesets 4a2df7238c3b | |
|
133 | ||
|
134 | pulling an explicite revision | |
|
135 | ||
|
136 | $ node_b=`hg log -R main-repo --rev 'desc(B)' -T '{node}'` | |
|
137 | $ hg pull -R test-repo-rev ./branch-E ./branch-G ./branch-H --rev $node_b | |
|
138 | pulling from ./branch-E | |
|
139 | searching for changes | |
|
140 | adding changesets | |
|
141 | adding manifests | |
|
142 | adding file changes | |
|
143 | added 1 changesets with 1 changes to 1 files | |
|
144 | new changesets 27547f69f254 | |
|
145 | (run 'hg update' to get a working copy) | |
|
146 | pulling from ./branch-G | |
|
147 | no changes found | |
|
148 | pulling from ./branch-H | |
|
149 | no changes found | |
|
150 | $ hg log -R test-repo-rev -T '{desc} {rev}\n' --rev 'sort(all(), "topo")' -G | |
|
151 | o B 1 | |
|
152 | | | |
|
153 | o A 0 | |
|
154 | ||
|
155 | ||
|
156 | pulling a branch head, the branch head resolve to different revision on the | |
|
157 | different repositories. | |
|
158 | ||
|
159 | $ hg pull -R test-repo-rev ./branch-E ./branch-G ./branch-H --rev default | |
|
160 | pulling from ./branch-E | |
|
161 | searching for changes | |
|
162 | adding changesets | |
|
163 | adding manifests | |
|
164 | adding file changes | |
|
165 | added 3 changesets with 3 changes to 3 files | |
|
166 | new changesets f838bfaca5c7:a603bfb5a83e | |
|
167 | (run 'hg update' to get a working copy) | |
|
168 | pulling from ./branch-G | |
|
169 | searching for changes | |
|
170 | adding changesets | |
|
171 | adding manifests | |
|
172 | adding file changes | |
|
173 | added 2 changesets with 2 changes to 2 files (+1 heads) | |
|
174 | new changesets 2f3a4c5c1417:c521a06b234b | |
|
175 | (run 'hg heads' to see heads, 'hg merge' to merge) | |
|
176 | pulling from ./branch-H | |
|
177 | searching for changes | |
|
178 | adding changesets | |
|
179 | adding manifests | |
|
180 | adding file changes | |
|
181 | added 1 changesets with 1 changes to 1 files (+1 heads) | |
|
182 | new changesets 40faebb2ec45 | |
|
183 | (run 'hg heads .' to see heads, 'hg merge' to merge) | |
|
184 | $ hg log -R test-repo-rev -T '{desc} {rev}\n' --rev 'sort(all(), "topo")' -G | |
|
185 | o H 7 | |
|
186 | | | |
|
187 | | o E 4 | |
|
188 | | | | |
|
189 | | o D 3 | |
|
190 | |/ | |
|
191 | o C 2 | |
|
192 | | | |
|
193 | | o G 6 | |
|
194 | | | | |
|
195 | | o F 5 | |
|
196 | |/ | |
|
197 | o B 1 | |
|
198 | | | |
|
199 | o A 0 | |
|
200 | ||
|
201 | ||
|
202 | ||
|
203 | Test with --update | |
|
204 | ================== | |
|
205 | ||
|
206 | update without conflicts | |
|
207 | ------------------------ | |
|
208 | ||
|
209 | $ hg clone main-repo test-repo-update --rev 0 | |
|
210 | adding changesets | |
|
211 | adding manifests | |
|
212 | adding file changes | |
|
213 | added 1 changesets with 1 changes to 1 files | |
|
214 | new changesets 4a2df7238c3b | |
|
215 | updating to branch default | |
|
216 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
217 | ||
|
218 | We update for each pull, so the first on get into a branch independant from the | |
|
219 | other and stay there. This is the expected behavior. | |
|
220 | ||
|
221 | $ hg log -R test-repo-update -T '{desc} {rev}\n' --rev 'sort(all(), "topo")' -G | |
|
222 | @ A 0 | |
|
223 | ||
|
224 | $ hg pull -R test-repo-update ./branch-E ./branch-G ./branch-H --update | |
|
225 | pulling from ./branch-E | |
|
226 | searching for changes | |
|
227 | adding changesets | |
|
228 | adding manifests | |
|
229 | adding file changes | |
|
230 | added 4 changesets with 4 changes to 4 files | |
|
231 | new changesets 27547f69f254:a603bfb5a83e | |
|
232 | 4 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
233 | pulling from ./branch-G | |
|
234 | searching for changes | |
|
235 | adding changesets | |
|
236 | adding manifests | |
|
237 | adding file changes | |
|
238 | added 2 changesets with 2 changes to 2 files (+1 heads) | |
|
239 | new changesets 2f3a4c5c1417:c521a06b234b | |
|
240 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
241 | updated to "a603bfb5a83e: E" | |
|
242 | 1 other heads for branch "default" | |
|
243 | pulling from ./branch-H | |
|
244 | searching for changes | |
|
245 | adding changesets | |
|
246 | adding manifests | |
|
247 | adding file changes | |
|
248 | added 1 changesets with 1 changes to 1 files (+1 heads) | |
|
249 | new changesets 40faebb2ec45 | |
|
250 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
251 | updated to "a603bfb5a83e: E" | |
|
252 | 2 other heads for branch "default" | |
|
253 | $ hg log -R test-repo-update -T '{desc} {rev}\n' --rev 'sort(all(), "topo")' -G | |
|
254 | o H 7 | |
|
255 | | | |
|
256 | | @ E 4 | |
|
257 | | | | |
|
258 | | o D 3 | |
|
259 | |/ | |
|
260 | o C 2 | |
|
261 | | | |
|
262 | | o G 6 | |
|
263 | | | | |
|
264 | | o F 5 | |
|
265 | |/ | |
|
266 | o B 1 | |
|
267 | | | |
|
268 | o A 0 | |
|
269 | ||
|
270 | ||
|
271 | update with conflicts | |
|
272 | --------------------- | |
|
273 | ||
|
274 | $ hg clone main-repo test-repo-conflict --rev 0 | |
|
275 | adding changesets | |
|
276 | adding manifests | |
|
277 | adding file changes | |
|
278 | added 1 changesets with 1 changes to 1 files | |
|
279 | new changesets 4a2df7238c3b | |
|
280 | updating to branch default | |
|
281 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
282 | ||
|
283 | The update has conflict and interrupt the pull. | |
|
284 | ||
|
285 | $ echo this-will-conflict > test-repo-conflict/D | |
|
286 | $ hg add -R test-repo-conflict test-repo-conflict/D | |
|
287 | $ hg log -R test-repo-conflict -T '{desc} {rev}\n' --rev 'sort(all(), "topo")' -G | |
|
288 | @ A 0 | |
|
289 | ||
|
290 | $ hg pull -R test-repo-conflict ./branch-E ./branch-G ./branch-H --update | |
|
291 | pulling from ./branch-E | |
|
292 | searching for changes | |
|
293 | adding changesets | |
|
294 | adding manifests | |
|
295 | adding file changes | |
|
296 | added 4 changesets with 4 changes to 4 files | |
|
297 | new changesets 27547f69f254:a603bfb5a83e | |
|
298 | merging D | |
|
299 | warning: conflicts while merging D! (edit, then use 'hg resolve --mark') | |
|
300 | 3 files updated, 0 files merged, 0 files removed, 1 files unresolved | |
|
301 | use 'hg resolve' to retry unresolved file merges | |
|
302 | [1] | |
|
303 | $ hg -R test-repo-conflict resolve -l | |
|
304 | U D | |
|
305 | $ hg log -R test-repo-conflict -T '{desc} {rev}\n' --rev 'sort(all(), "topo")' -G | |
|
306 | @ E 4 | |
|
307 | | | |
|
308 | o D 3 | |
|
309 | | | |
|
310 | o C 2 | |
|
311 | | | |
|
312 | o B 1 | |
|
313 | | | |
|
314 | % A 0 | |
|
315 |
@@ -0,0 +1,7 b'' | |||
|
1 | mkcommit() { | |
|
2 | name="$1" | |
|
3 | shift | |
|
4 | echo "$name" > "$name" | |
|
5 | hg add "$name" | |
|
6 | hg ci -m "$name" "$@" | |
|
7 | } |
@@ -5323,11 +5323,11 b' def postincoming(ui, repo, modheads, opt' | |||
|
5323 | 5323 | ), |
|
5324 | 5324 | ] |
|
5325 | 5325 | + remoteopts, |
|
5326 | _(b'[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]'), | |
|
5326 | _(b'[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]...'), | |
|
5327 | 5327 | helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT, |
|
5328 | 5328 | helpbasic=True, |
|
5329 | 5329 | ) |
|
5330 |
def pull(ui, repo, source |
|
|
5330 | def pull(ui, repo, *sources, **opts): | |
|
5331 | 5331 | """pull changes from the specified source |
|
5332 | 5332 | |
|
5333 | 5333 | Pull changes from a remote repository to a local one. |
@@ -5351,6 +5351,10 b' def pull(ui, repo, source=b"default", **' | |||
|
5351 | 5351 | If SOURCE is omitted, the 'default' path will be used. |
|
5352 | 5352 | See :hg:`help urls` for more information. |
|
5353 | 5353 | |
|
5354 | If multiple sources are specified, they will be pulled sequentially as if | |
|
5355 | the command was run multiple time. If --update is specify and the command | |
|
5356 | will stop at the first failed --update. | |
|
5357 | ||
|
5354 | 5358 | Specifying bookmark as ``.`` is equivalent to specifying the active |
|
5355 | 5359 | bookmark's name. |
|
5356 | 5360 | |
@@ -5365,7 +5369,9 b' def pull(ui, repo, source=b"default", **' | |||
|
5365 | 5369 | hint = _(b'use hg pull followed by hg update DEST') |
|
5366 | 5370 | raise error.InputError(msg, hint=hint) |
|
5367 | 5371 | |
|
5368 |
if |
|
|
5372 | if not sources: | |
|
5373 | sources = [b'default'] | |
|
5374 | for source in sources: | |
|
5369 | 5375 | source, branches = hg.parseurl( |
|
5370 | 5376 | ui.expandpath(source), opts.get(b'branch') |
|
5371 | 5377 | ) |
@@ -5463,6 +5469,9 b' def pull(ui, repo, source=b"default", **' | |||
|
5463 | 5469 | |
|
5464 | 5470 | finally: |
|
5465 | 5471 | other.close() |
|
5472 | # skip the remaining pull source if they are some conflict. | |
|
5473 | if update_conflict: | |
|
5474 | break | |
|
5466 | 5475 | if update_conflict: |
|
5467 | 5476 | return 1 |
|
5468 | 5477 | else: |
General Comments 0
You need to be logged in to leave comments.
Login now