Mercurial > hg
comparison tests/test-obsolete-distributed.t @ 34651:e88dbbcf2a56
test: add an extra case for obsolescence distributed case
This changeset introduces a new documented test case for a distributed
obsolescence scenario. The scenario involves a simple case where some
obsolescence markers are retrieved before the changeset they affect. See the
test case documentation for details.
We also test variants where the changesets are added from a bundle.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Sat, 30 Sep 2017 22:37:20 +0100 |
parents | 6c85f4e3d914 |
children | eb586ed5d8ce |
comparison
equal
deleted
inserted
replaced
34650:6c85f4e3d914 | 34651:e88dbbcf2a56 |
---|---|
8 | 8 |
9 $ unset HGUSER | 9 $ unset HGUSER |
10 $ unset EMAIL | 10 $ unset EMAIL |
11 $ . $TESTDIR/testlib/obsmarker-common.sh | 11 $ . $TESTDIR/testlib/obsmarker-common.sh |
12 $ cat >> $HGRCPATH << EOF | 12 $ cat >> $HGRCPATH << EOF |
13 > [extensions] | |
14 > rebase = | |
13 > [experimental] | 15 > [experimental] |
14 > evolution = all | 16 > evolution = all |
15 > [phases] | 17 > [phases] |
16 > publish = False | 18 > publish = False |
17 > [templates] | 19 > [templates] |
203 o 0:e82fb8d02bbf ROOT | 205 o 0:e82fb8d02bbf ROOT |
204 | 206 |
205 $ hg debugobsolete | 207 $ hg debugobsolete |
206 e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | 208 e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} |
207 7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'} | 209 7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'} |
210 $ cd .. | |
211 | |
212 Check getting changesets after getting the markers | |
213 ================================================= | |
214 | |
215 This test case covers the scenario where commits are received -after- we | |
216 received some obsolescence markers turning them obsolete. | |
217 | |
218 For example, we pull some successors from a repository (with associated | |
219 predecessors marker chain) and then later we pull some intermediate | |
220 precedessors changeset from another repository. Obsolescence markers must | |
221 apply to the intermediate changeset. They have to be obsolete (and hidden). | |
222 | |
223 Avoiding pulling the changeset in the first place is a tricky decision because | |
224 there could be non-obsolete ancestors that need to be pulled, but the | |
225 discovery cannot currently find these (this is not the case in this tests). In | |
226 addition, we could also have to pull the changeset because they have children. | |
227 In this case, they would not be hidden (yet) because of the orphan descendant, | |
228 but they would still have to be obsolete. (This is not tested in this case | |
229 either). | |
230 | |
231 $ mkdir distributed-chain-building | |
232 $ cd distributed-chain-building | |
233 $ hg init server | |
234 $ cd server | |
235 $ cat << EOF >> .hg/hgrc | |
236 > [ui] | |
237 > username = server | |
238 > EOF | |
239 $ mkcommit ROOT | |
240 $ cd .. | |
241 $ hg clone server repo-Alice | |
242 updating to branch default | |
243 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
244 $ cat << EOF >> repo-Alice/.hg/hgrc | |
245 > [ui] | |
246 > username = alice | |
247 > EOF | |
248 $ hg clone server repo-Bob | |
249 updating to branch default | |
250 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
251 $ cat << EOF >> repo-Bob/.hg/hgrc | |
252 > [ui] | |
253 > username = bob | |
254 > EOF | |
255 $ hg clone server repo-Celeste | |
256 updating to branch default | |
257 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
258 $ cat << EOF >> repo-Celeste/.hg/hgrc | |
259 > [ui] | |
260 > username = celeste | |
261 > EOF | |
262 | |
263 Create some changesets locally | |
264 | |
265 $ cd repo-Alice | |
266 $ mkcommit c_A0 | |
267 $ mkcommit c_B0 | |
268 $ cd .. | |
269 | |
270 Bob pulls from Alice and rewrites them | |
271 | |
272 $ cd repo-Bob | |
273 $ hg pull ../repo-Alice | |
274 pulling from ../repo-Alice | |
275 searching for changes | |
276 adding changesets | |
277 adding manifests | |
278 adding file changes | |
279 added 2 changesets with 2 changes to 2 files | |
280 (run 'hg update' to get a working copy) | |
281 $ hg up 'desc("c_A")' | |
282 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
283 $ hg commit --amend -m 'c_A1' | |
284 $ hg rebase -r 'desc("c_B0")' -d . # no easy way to rewrite the message with the rebase | |
285 rebasing 2:ef908e42ce65 "c_B0" | |
286 $ hg up | |
287 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
288 $ hg commit --amend -m 'c_B1' | |
289 $ hg log -G | |
290 @ 5:956063ac4557 c_B1 | |
291 | | |
292 o 3:5b5708a437f2 c_A1 | |
293 | | |
294 o 0:e82fb8d02bbf ROOT | |
295 | |
296 $ hg log -G --hidden | |
297 @ 5:956063ac4557 c_B1 | |
298 | | |
299 | x 4:5ffb9e311b35 c_B0 [rewritten using amend as 5:956063ac4557 by bob (at 1970-01-01 00:00 +0000); ] | |
300 |/ | |
301 o 3:5b5708a437f2 c_A1 | |
302 | | |
303 | x 2:ef908e42ce65 c_B0 [rewritten using rebase as 4:5ffb9e311b35 by bob (at 1970-01-01 00:00 +0000); ] | |
304 | | | |
305 | x 1:d33b0a3a6464 c_A0 [rewritten using amend as 3:5b5708a437f2 by bob (at 1970-01-01 00:00 +0000); ] | |
306 |/ | |
307 o 0:e82fb8d02bbf ROOT | |
308 | |
309 $ hg debugobsolete | |
310 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |
311 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'bob'} | |
312 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |
313 $ cd .. | |
314 | |
315 Celeste pulls from Bob and rewrites them again | |
316 | |
317 $ cd repo-Celeste | |
318 $ hg pull ../repo-Bob | |
319 pulling from ../repo-Bob | |
320 searching for changes | |
321 adding changesets | |
322 adding manifests | |
323 adding file changes | |
324 added 2 changesets with 2 changes to 2 files | |
325 3 new obsolescence markers | |
326 (run 'hg update' to get a working copy) | |
327 $ hg up 'desc("c_A")' | |
328 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
329 $ hg commit --amend -m 'c_A2' | |
330 $ hg rebase -r 'desc("c_B1")' -d . # no easy way to rewrite the message with the rebase | |
331 rebasing 2:956063ac4557 "c_B1" | |
332 $ hg up | |
333 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
334 $ hg commit --amend -m 'c_B2' | |
335 $ hg log -G | |
336 @ 5:77ae25d99ff0 c_B2 | |
337 | | |
338 o 3:9866d64649a5 c_A2 | |
339 | | |
340 o 0:e82fb8d02bbf ROOT | |
341 | |
342 $ hg log -G --hidden | |
343 @ 5:77ae25d99ff0 c_B2 | |
344 | | |
345 | x 4:3cf8de21cc22 c_B1 [rewritten using amend as 5:77ae25d99ff0 by celeste (at 1970-01-01 00:00 +0000); ] | |
346 |/ | |
347 o 3:9866d64649a5 c_A2 | |
348 | | |
349 | x 2:956063ac4557 c_B1 [rewritten using rebase as 4:3cf8de21cc22 by celeste (at 1970-01-01 00:00 +0000); ] | |
350 | | | |
351 | x 1:5b5708a437f2 c_A1 [rewritten using amend as 3:9866d64649a5 by celeste (at 1970-01-01 00:00 +0000); ] | |
352 |/ | |
353 o 0:e82fb8d02bbf ROOT | |
354 | |
355 $ hg debugobsolete | |
356 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |
357 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |
358 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'bob'} | |
359 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |
360 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'celeste'} | |
361 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |
362 | |
363 Celeste now pushes to the server | |
364 | |
365 (note: it would be enough to just have direct Celeste -> Alice exchange here. | |
366 However using a central server seems more common) | |
367 | |
368 $ hg push | |
369 pushing to $TESTTMP/distributed-chain-building/distributed-chain-building/server (glob) | |
370 searching for changes | |
371 adding changesets | |
372 adding manifests | |
373 adding file changes | |
374 added 2 changesets with 2 changes to 2 files | |
375 6 new obsolescence markers | |
376 $ cd .. | |
377 | |
378 Now Alice pulls from the server, then from Bob | |
379 | |
380 Alice first retrieves the new evolution of its changesets and associated markers | |
381 from the server (note: could be from Celeste directly) | |
382 | |
383 $ cd repo-Alice | |
384 $ hg up 'desc(ROOT)' | |
385 0 files updated, 0 files merged, 2 files removed, 0 files unresolved | |
386 $ hg pull | |
387 pulling from $TESTTMP/distributed-chain-building/distributed-chain-building/server (glob) | |
388 searching for changes | |
389 adding changesets | |
390 adding manifests | |
391 adding file changes | |
392 added 2 changesets with 0 changes to 2 files (+1 heads) | |
393 6 new obsolescence markers | |
394 obsoleted 2 changesets | |
395 (run 'hg heads' to see heads) | |
396 $ hg debugobsolete | |
397 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |
398 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |
399 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |
400 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'celeste'} | |
401 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |
402 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'bob'} | |
403 | |
404 Then, she pulls from Bob, pulling predecessors of the changeset she has | |
405 already pulled. The changesets are not obsoleted in the Bob repo yet. Their | |
406 successors do not exist in Bob repository yet. | |
407 | |
408 $ hg pull ../repo-Bob | |
409 pulling from ../repo-Bob | |
410 searching for changes | |
411 adding changesets | |
412 adding manifests | |
413 adding file changes | |
414 added 2 changesets with 0 changes to 2 files (+1 heads) | |
415 (run 'hg heads' to see heads) | |
416 $ hg log -G | |
417 o 4:77ae25d99ff0 c_B2 | |
418 | | |
419 o 3:9866d64649a5 c_A2 | |
420 | | |
421 @ 0:e82fb8d02bbf ROOT | |
422 | |
423 $ hg debugobsolete | |
424 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |
425 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |
426 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |
427 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'celeste'} | |
428 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |
429 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'bob'} | |
430 | |
431 Same tests, but change coming from a bundle | |
432 (testing with a bundle is interesting because absolutely no discovery or | |
433 decision is made in that case, so receiving the changesets are not an option). | |
434 | |
435 $ hg rollback | |
436 repository tip rolled back to revision 4 (undo pull) | |
437 $ hg log -G | |
438 o 4:77ae25d99ff0 c_B2 | |
439 | | |
440 o 3:9866d64649a5 c_A2 | |
441 | | |
442 @ 0:e82fb8d02bbf ROOT | |
443 | |
444 $ hg debugobsolete | |
445 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |
446 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |
447 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |
448 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'celeste'} | |
449 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |
450 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'bob'} | |
451 $ hg -R ../repo-Bob bundle ../step-1.hg | |
452 searching for changes | |
453 2 changesets found | |
454 $ hg unbundle ../step-1.hg | |
455 adding changesets | |
456 adding manifests | |
457 adding file changes | |
458 added 2 changesets with 0 changes to 2 files (+1 heads) | |
459 (run 'hg heads' to see heads) | |
460 $ hg log -G | |
461 o 4:77ae25d99ff0 c_B2 | |
462 | | |
463 o 3:9866d64649a5 c_A2 | |
464 | | |
465 @ 0:e82fb8d02bbf ROOT | |
466 | |
467 $ hg log -G --hidden | |
468 x 6:956063ac4557 c_B1 [rewritten using amend, rebase as 4:77ae25d99ff0 by celeste (at 1970-01-01 00:00 +0000); ] | |
469 | | |
470 x 5:5b5708a437f2 c_A1 [rewritten using amend as 3:9866d64649a5 by celeste (at 1970-01-01 00:00 +0000); ] | |
471 | | |
472 | o 4:77ae25d99ff0 c_B2 | |
473 | | | |
474 | o 3:9866d64649a5 c_A2 | |
475 |/ | |
476 | x 2:ef908e42ce65 c_B0 [rewritten using amend, rebase as 6:956063ac4557 by bob (at 1970-01-01 00:00 +0000); ] | |
477 | | | |
478 | x 1:d33b0a3a6464 c_A0 [rewritten using amend as 5:5b5708a437f2 by bob (at 1970-01-01 00:00 +0000); ] | |
479 |/ | |
480 @ 0:e82fb8d02bbf ROOT | |
481 | |
482 $ hg debugobsolete | |
483 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |
484 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'celeste'} | |
485 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |
486 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'celeste'} | |
487 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'bob'} | |
488 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'bob'} | |
489 | |
490 $ cd .. |