[PATCH 2 of 2] test: add an extra case for obsolescence distributed case

Boris Feld boris.feld at octobus.net
Thu Oct 12 06:29:25 EDT 2017


# HG changeset patch
# User Boris Feld <boris.feld at octobus.net>
# Date 1506807440 -3600
#      Sat Sep 30 22:37:20 2017 +0100
# Node ID cf572fd4e79604e0f774869c11e24b05f1d3517f
# Parent  8252157034b4e4f9f851f328633ef86df44cc9cf
# EXP-Topic obs-tests
# Available At https://bitbucket.org/octobus/mercurial-devel/
#              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r cf572fd4e796
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.

diff --git a/tests/test-obsolete-distributed.t b/tests/test-obsolete-distributed.t
--- a/tests/test-obsolete-distributed.t
+++ b/tests/test-obsolete-distributed.t
@@ -8,6 +8,8 @@
 
   $ . $TESTDIR/testlib/obsmarker-common.sh
   $ cat >> $HGRCPATH << EOF
+  > [extensions]
+  > rebase =
   > [experimental]
   > evolution = all
   > [phases]
@@ -197,3 +199,253 @@
   $ hg debugobsolete
   d1ada4861b7669f79a948eefaea6950b5e543855 23422fed6b3d22e1b9d89fb82bdb68edc19079b4 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
   23422fed6b3d22e1b9d89fb82bdb68edc19079b4 b305f85f127a9d2e608bcbd83c59373fec615cb2 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
+  $ cd ..
+
+Check getting changesets after getting the markers
+=================================================
+
+This test case covers the scenario where commits are received -after- we
+received some obsolescence markers turning them obsolete.
+
+For example, we pull some successors from a repository (with associated
+predecessors marker chain) and then later we pull some intermediate
+precedessors changeset from another repository. Obsolescence markers must
+apply to the intermediate changeset. They have to be obsolete (and hidden).
+
+Avoiding pulling the changeset in the first place is a tricky decision because
+there could be non-obsolete ancestors that need to be pulled, but the
+discovery cannot currently find these (this is not the case in this tests). In
+addition, we could also have to pull the changeset because they have children.
+In this case, they would not be hidden (yet) because of the orphan descendant,
+but they would still have to be obsolete. (This is not tested in this case
+either).
+
+  $ mkdir distributed-chain-building
+  $ cd distributed-chain-building
+  $ hg init server
+  $ cd server
+  $ mkcommit ROOT
+  $ cd ..
+  $ hg clone server repo-Alice
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg clone server repo-Bob
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg clone server repo-Celeste
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+Create some changesets locally
+
+  $ cd repo-Alice
+  $ mkcommit c_A0
+  $ mkcommit c_B0
+  $ cd ..
+
+Bob pull from Alice and rewrite them
+
+  $ cd repo-Bob
+  $ hg pull ../repo-Alice
+  pulling from ../repo-Alice
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 2 changesets with 2 changes to 2 files
+  (run 'hg update' to get a working copy)
+  $ hg up 'desc("c_A")'
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg commit --amend -m 'c_A1'
+  $ hg rebase -r 'desc("c_B0")' -d . # no easy way to rewrite the message with the rebase
+  rebasing 2:3378110892d3 "c_B0"
+  $ hg up
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg commit --amend -m 'c_B1'
+  $ hg log -G
+  @  5:22b4da3eca41 c_B1
+  |
+  o  3:338fcca61785 c_A1
+  |
+  o  0:ea207398892e ROOT
+  
+  $ hg log -G --hidden
+  @  5:22b4da3eca41 c_B1
+  |
+  | x  4:2bd2cdfdc4ee c_B0 [rewritten using amend as 5:22b4da3eca41 by test (at 1970-01-01 00:00 +0000); ]
+  |/
+  o  3:338fcca61785 c_A1
+  |
+  | x  2:3378110892d3 c_B0 [rewritten using rebase as 4:2bd2cdfdc4ee by test (at 1970-01-01 00:00 +0000); ]
+  | |
+  | x  1:d1ada4861b76 c_A0 [rewritten using amend as 3:338fcca61785 by test (at 1970-01-01 00:00 +0000); ]
+  |/
+  o  0:ea207398892e ROOT
+  
+  $ hg debugobsolete
+  d1ada4861b7669f79a948eefaea6950b5e543855 338fcca617859ace5cda45d0c8869954a70529c1 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  3378110892d3dd34d39e22fba45483c1a986a455 2bd2cdfdc4ee08104659c2e9d39691d9ae50a208 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'test'}
+  2bd2cdfdc4ee08104659c2e9d39691d9ae50a208 22b4da3eca4124971655daff24953461b15e62e8 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  $ cd ..
+
+Celeste pull from Bob and rewrite them again
+
+  $ cd repo-Celeste
+  $ hg pull ../repo-Bob
+  pulling from ../repo-Bob
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 2 changesets with 2 changes to 2 files
+  3 new obsolescence markers
+  (run 'hg update' to get a working copy)
+  $ hg up 'desc("c_A")'
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg commit --amend -m 'c_A2'
+  $ hg rebase -r 'desc("c_B1")' -d . # no easy way to rewrite the message with the rebase
+  rebasing 2:22b4da3eca41 "c_B1"
+  $ hg up
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg commit --amend -m 'c_B2'
+  $ hg log -G
+  @  5:2caf15685f04 c_B2
+  |
+  o  3:0269888bb02e c_A2
+  |
+  o  0:ea207398892e ROOT
+  
+  $ hg log -G --hidden
+  @  5:2caf15685f04 c_B2
+  |
+  | x  4:5f660b874f72 c_B1 [rewritten using amend as 5:2caf15685f04 by test (at 1970-01-01 00:00 +0000); ]
+  |/
+  o  3:0269888bb02e c_A2
+  |
+  | x  2:22b4da3eca41 c_B1 [rewritten using rebase as 4:5f660b874f72 by test (at 1970-01-01 00:00 +0000); ]
+  | |
+  | x  1:338fcca61785 c_A1 [rewritten using amend as 3:0269888bb02e by test (at 1970-01-01 00:00 +0000); ]
+  |/
+  o  0:ea207398892e ROOT
+  
+  $ hg debugobsolete
+  2bd2cdfdc4ee08104659c2e9d39691d9ae50a208 22b4da3eca4124971655daff24953461b15e62e8 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  3378110892d3dd34d39e22fba45483c1a986a455 2bd2cdfdc4ee08104659c2e9d39691d9ae50a208 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'test'}
+  d1ada4861b7669f79a948eefaea6950b5e543855 338fcca617859ace5cda45d0c8869954a70529c1 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  338fcca617859ace5cda45d0c8869954a70529c1 0269888bb02e58ade44a9201228d924d3e09b5d7 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  22b4da3eca4124971655daff24953461b15e62e8 5f660b874f7281e7a428ab85f01460e5cf0c704b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'test'}
+  5f660b874f7281e7a428ab85f01460e5cf0c704b 2caf15685f04a4f816e319081f999dfcea07a440 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+
+Celeste now push to the server
+
+(note: it would be enough to just have direct Celeste -> Alice exchange here.
+However using a central server seems more common)
+
+  $ hg push
+  pushing to $TESTTMP/distributed-chain-building/distributed-chain-building/server (glob)
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 2 changesets with 2 changes to 2 files
+  6 new obsolescence markers
+  $ cd ..
+
+Now Alice pull from the server, then from Bob
+
+Alice first retrieve the new evolution of its changesets and associated markers
+from the server (note: could be from Celeste directly)
+
+  $ cd repo-Alice
+  $ hg up 'desc(ROOT)'
+  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+  $ hg pull
+  pulling from $TESTTMP/distributed-chain-building/distributed-chain-building/server (glob)
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 2 changesets with 0 changes to 2 files (+1 heads)
+  6 new obsolescence markers
+  obsoleted 2 changesets
+  (run 'hg heads' to see heads)
+  $ hg debugobsolete
+  22b4da3eca4124971655daff24953461b15e62e8 5f660b874f7281e7a428ab85f01460e5cf0c704b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'test'}
+  2bd2cdfdc4ee08104659c2e9d39691d9ae50a208 22b4da3eca4124971655daff24953461b15e62e8 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  3378110892d3dd34d39e22fba45483c1a986a455 2bd2cdfdc4ee08104659c2e9d39691d9ae50a208 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'test'}
+  338fcca617859ace5cda45d0c8869954a70529c1 0269888bb02e58ade44a9201228d924d3e09b5d7 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  5f660b874f7281e7a428ab85f01460e5cf0c704b 2caf15685f04a4f816e319081f999dfcea07a440 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  d1ada4861b7669f79a948eefaea6950b5e543855 338fcca617859ace5cda45d0c8869954a70529c1 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+
+Then, it pull from Bob, pulling predecessors of the changeset it has already
+pulled. The changesets are not obsoleted in the Bob repo yet. Their successors
+do not exist in Bob repository yet.
+
+  $ hg pull ../repo-Bob
+  pulling from ../repo-Bob
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 2 changesets with 0 changes to 2 files (+1 heads)
+  (run 'hg heads' to see heads)
+  $ hg log -G
+  o  4:2caf15685f04 c_B2
+  |
+  o  3:0269888bb02e c_A2
+  |
+  @  0:ea207398892e ROOT
+  
+  $ hg debugobsolete
+  22b4da3eca4124971655daff24953461b15e62e8 5f660b874f7281e7a428ab85f01460e5cf0c704b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'test'}
+  2bd2cdfdc4ee08104659c2e9d39691d9ae50a208 22b4da3eca4124971655daff24953461b15e62e8 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  3378110892d3dd34d39e22fba45483c1a986a455 2bd2cdfdc4ee08104659c2e9d39691d9ae50a208 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'test'}
+  338fcca617859ace5cda45d0c8869954a70529c1 0269888bb02e58ade44a9201228d924d3e09b5d7 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  5f660b874f7281e7a428ab85f01460e5cf0c704b 2caf15685f04a4f816e319081f999dfcea07a440 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  d1ada4861b7669f79a948eefaea6950b5e543855 338fcca617859ace5cda45d0c8869954a70529c1 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+
+Same tests, but change coming from a bundle
+(testing with a bundle is interesting because absolutely no discovery or
+decision is made in that case, so receiving the changesets are not an option).
+
+  $ hg rollback
+  repository tip rolled back to revision 4 (undo pull)
+  $ hg log -G
+  o  4:2caf15685f04 c_B2
+  |
+  o  3:0269888bb02e c_A2
+  |
+  @  0:ea207398892e ROOT
+  
+  $ hg debugobsolete
+  22b4da3eca4124971655daff24953461b15e62e8 5f660b874f7281e7a428ab85f01460e5cf0c704b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'test'}
+  2bd2cdfdc4ee08104659c2e9d39691d9ae50a208 22b4da3eca4124971655daff24953461b15e62e8 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  3378110892d3dd34d39e22fba45483c1a986a455 2bd2cdfdc4ee08104659c2e9d39691d9ae50a208 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'test'}
+  338fcca617859ace5cda45d0c8869954a70529c1 0269888bb02e58ade44a9201228d924d3e09b5d7 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  5f660b874f7281e7a428ab85f01460e5cf0c704b 2caf15685f04a4f816e319081f999dfcea07a440 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  d1ada4861b7669f79a948eefaea6950b5e543855 338fcca617859ace5cda45d0c8869954a70529c1 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  $ hg -R ../repo-Bob bundle ../step-1.hg
+  searching for changes
+  2 changesets found
+  $ hg unbundle ../step-1.hg
+  adding changesets
+  adding manifests
+  adding file changes
+  added 2 changesets with 0 changes to 2 files (+1 heads)
+  (run 'hg heads' to see heads)
+  $ hg log -G
+  o  4:2caf15685f04 c_B2
+  |
+  o  3:0269888bb02e c_A2
+  |
+  @  0:ea207398892e ROOT
+  
+  $ hg debugobsolete
+  22b4da3eca4124971655daff24953461b15e62e8 5f660b874f7281e7a428ab85f01460e5cf0c704b 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'test'}
+  2bd2cdfdc4ee08104659c2e9d39691d9ae50a208 22b4da3eca4124971655daff24953461b15e62e8 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  3378110892d3dd34d39e22fba45483c1a986a455 2bd2cdfdc4ee08104659c2e9d39691d9ae50a208 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'rebase', 'user': 'test'}
+  338fcca617859ace5cda45d0c8869954a70529c1 0269888bb02e58ade44a9201228d924d3e09b5d7 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  5f660b874f7281e7a428ab85f01460e5cf0c704b 2caf15685f04a4f816e319081f999dfcea07a440 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+  d1ada4861b7669f79a948eefaea6950b5e543855 338fcca617859ace5cda45d0c8869954a70529c1 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
+
+  $ cd ..


More information about the Mercurial-devel mailing list