[PATCH 1 of 2] test: add a test file dedicated to an important distributed case

Denis Laxalde denis at laxalde.org
Thu Oct 12 07:56:31 EDT 2017


Boris Feld a écrit :
> # HG changeset patch
> # User Boris Feld <boris.feld at octobus.net>
> # Date 1506711555 -3600
> #      Fri Sep 29 19:59:15 2017 +0100
> # Node ID 8252157034b4e4f9f851f328633ef86df44cc9cf
> # Parent  60213a2eca81af4e1daa3ef9e44af859ba1e5756
> # EXP-Topic obs-tests
> # Available At https://bitbucket.org/octobus/mercurial-devel/
> #              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 8252157034b4
> test: add a test file dedicated to an important distributed case
> 
> This test file introduce documented test case for obsolescence markers usage

typos: introduces documented test cases

> that are important to distributed workflow cases.
> 
> In the distributed case, new changesets, markers, and phases can be added in
> orders that would not happen during the local only usage. Documenting these
> scenarios and test them is important as we make progress with various
> obsolescence aspect.

typo: aspects

> 
> diff --git a/tests/test-obsolete-distributed.t b/tests/test-obsolete-distributed.t
> new file mode 100644
> --- /dev/null
> +++ b/tests/test-obsolete-distributed.t
> @@ -0,0 +1,199 @@
> +=============================
> +Test distributed obsolescence
> +=============================
> +
> +This file test various case where data (changeset, phase, obsmarkers) is added

typo: various cases

> +to the repository in a specific order. Usually, this order is unlikely to
> +happen in the local case but can easily happen in the distributed case.
> +
> +  $ . $TESTDIR/testlib/obsmarker-common.sh
> +  $ cat >> $HGRCPATH << EOF
> +  > [experimental]
> +  > evolution = all
> +  > [phases]
> +  > publish = False
> +  > [templates]
> +  > obsfatesuccessors = "{if(successors, " as ")}{join(successors, ", ")}"
> +  > obsfateverb = "{obsfateverb(successors)}"
> +  > obsfateoperations = "{if(obsfateoperations(markers), " using {join(obsfateoperations(markers), ", ")}")}"
> +  > obsfateusers = "{if(obsfateusers(markers), " by {join(obsfateusers(markers), ", ")}")}"
> +  > obsfatedate = "{if(obsfatedate(markers), "{ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), " (at {min(obsfatedate(markers))|isodate})", " (between {min(obsfatedate(markers))|isodate} and {max(obsfatedate(markers))|isodate})")}")}"
> +  > obsfate = "{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}; "
> +  > [ui]
> +  > logtemplate= {rev}:{node|short} {desc} {if(succsandmarkers, "[{succsandmarkers % "{obsfate}"}]")}\n
> +  > EOF
> +
> +Check distributed chain building
> +================================
> +
> +Test case where a changeset is marked as a successor of another locally
> +changeset while the successor has already been obsoleted remotely.

either "of another local changeset while [...]" or "of another locally
while [...]"

> +
> +The chain of evolution should seamlessly connect and all but the new version
> +(created remotely) should be seen as obsolete.
> +
> +Initial setup
> +
> +  $ mkdir distributed-chain-building
> +  $ cd distributed-chain-building
> +  $ hg init server
> +  $ cd server
> +  $ mkcommit ROOT
> +  $ mkcommit c_A0
> +  $ hg up 'desc("ROOT")'
> +  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> +  $ mkcommit c_A1
> +  created new head
> +  $ hg up 'desc("ROOT")'
> +  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> +  $ mkcommit c_B0
> +  created new head
> +  $ hg debugobsolete `getid 'desc("c_A0")'` `getid 'desc("c_A1")'`
> +  obsoleted 1 changesets
> +  $ hg log -G --hidden
> +  @  3:b305f85f127a c_B0
> +  |
> +  | o  2:23422fed6b3d c_A1
> +  |/
> +  | x  1:d1ada4861b76 c_A0 [rewritten as 2:23422fed6b3d by test (at 1970-01-01 00:00 +0000); ]
> +  |/
> +  o  0:ea207398892e ROOT
> +
> +  $ hg debugobsolete
> +  d1ada4861b7669f79a948eefaea6950b5e543855 23422fed6b3d22e1b9d89fb82bdb68edc19079b4 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
> +  $ cd ..
> +
> +duplicate the repo for the client:
> +
> +  $ cp -R server client
> +  $ cat << EOF >> client/.hg/hgrc
> +  > [paths]
> +  > default = ../server/
> +  > EOF

Might be nice in this client/server setup to set ui.username=client
(resp. server) on each side. This way, obsfate information would read
more easily below.

> +
> +server side: create new revision on the server (obsoleting another one)
> +
> +  $ cd server
> +  $ hg up 'desc("ROOT")'
> +  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> +  $ mkcommit c_B1
> +  created new head
> +  $ hg debugobsolete `getid 'desc("c_B0")'` `getid 'desc("c_B1")'`
> +  obsoleted 1 changesets
> +  $ hg log -G
> +  @  4:388f688b3711 c_B1
> +  |
> +  | o  2:23422fed6b3d c_A1
> +  |/
> +  o  0:ea207398892e ROOT
> +
> +  $ hg log -G --hidden
> +  @  4:388f688b3711 c_B1
> +  |
> +  | x  3:b305f85f127a c_B0 [rewritten as 4:388f688b3711 by test (at 1970-01-01 00:00 +0000); ]
> +  |/
> +  | o  2:23422fed6b3d c_A1
> +  |/
> +  | x  1:d1ada4861b76 c_A0 [rewritten as 2:23422fed6b3d by test (at 1970-01-01 00:00 +0000); ]
> +  |/
> +  o  0:ea207398892e ROOT
> +
> +  $ hg debugobsolete
> +  d1ada4861b7669f79a948eefaea6950b5e543855 23422fed6b3d22e1b9d89fb82bdb68edc19079b4 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
> +  b305f85f127a9d2e608bcbd83c59373fec615cb2 388f688b3711ebec978514297edccfe19b2fbed9 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
> +  $ cd ..
> +
> +client side: create a marker between two common changesets
> +(client is not aware of the server activity yet)
> +
> +  $ cd client
> +  $ hg debugobsolete `getid 'desc("c_A1")'` `getid 'desc("c_B0")'`
> +  obsoleted 1 changesets
> +  $ hg log -G
> +  @  3:b305f85f127a c_B0
> +  |
> +  o  0:ea207398892e ROOT
> +
> +  $ hg log -G --hidden
> +  @  3:b305f85f127a c_B0
> +  |
> +  | x  2:23422fed6b3d c_A1 [rewritten as 3:b305f85f127a by test (at 1970-01-01 00:00 +0000); ]
> +  |/
> +  | x  1:d1ada4861b76 c_A0 [rewritten as 2:23422fed6b3d by test (at 1970-01-01 00:00 +0000); ]
> +  |/
> +  o  0:ea207398892e ROOT
> +
> +  $ 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'}
> +
> +client side: pull from the server
> +(the new successors should take over)
> +
> +  $ hg up 'desc("ROOT")'
> +  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> +  $ hg pull
> +  pulling from $TESTTMP/distributed-chain-building/server (glob)
> +  searching for changes
> +  adding changesets
> +  adding manifests
> +  adding file changes
> +  added 1 changesets with 1 changes to 1 files (+1 heads)
> +  1 new obsolescence markers
> +  obsoleted 1 changesets
> +  (run 'hg heads' to see heads)
> +  $ hg log -G
> +  o  4:388f688b3711 c_B1
> +  |
> +  @  0:ea207398892e ROOT
> +
> +  $ hg log -G --hidden
> +  o  4:388f688b3711 c_B1
> +  |
> +  | x  3:b305f85f127a c_B0 [rewritten as 4:388f688b3711 by test (at 1970-01-01 00:00 +0000); ]
> +  |/
> +  | x  2:23422fed6b3d c_A1 [rewritten as 3:b305f85f127a by test (at 1970-01-01 00:00 +0000); ]
> +  |/
> +  | x  1:d1ada4861b76 c_A0 [rewritten as 2:23422fed6b3d by test (at 1970-01-01 00:00 +0000); ]
> +  |/
> +  @  0:ea207398892e ROOT
> +
> +  $ 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'}
> +  b305f85f127a9d2e608bcbd83c59373fec615cb2 388f688b3711ebec978514297edccfe19b2fbed9 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
> +
> +server side: receive client push
> +(the other way around, pushing to the server, the obsolete changesets stay
> +obsolete on the server side but the marker is sent out.)
> +
> +  $ hg rollback
> +  repository tip rolled back to revision 3 (undo pull)
> +  $ hg push -f
> +  pushing to $TESTTMP/distributed-chain-building/server (glob)
> +  searching for changes
> +  adding changesets
> +  adding manifests
> +  adding file changes
> +  added 0 changesets with 0 changes to 1 files
> +  1 new obsolescence markers
> +  obsoleted 1 changesets
> +  $ hg -R ../server/ log -G
> +  @  4:388f688b3711 c_B1
> +  |
> +  o  0:ea207398892e ROOT
> +
> +  $ hg -R ../server/ log -G --hidden
> +  @  4:388f688b3711 c_B1
> +  |
> +  | x  3:b305f85f127a c_B0 [rewritten as 4:388f688b3711 by test (at 1970-01-01 00:00 +0000); ]
> +  |/
> +  | x  2:23422fed6b3d c_A1 [rewritten as 3:b305f85f127a by test (at 1970-01-01 00:00 +0000); ]
> +  |/
> +  | x  1:d1ada4861b76 c_A0 [rewritten as 2:23422fed6b3d by test (at 1970-01-01 00:00 +0000); ]
> +  |/
> +  o  0:ea207398892e ROOT
> +
> +  $ 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'}


More information about the Mercurial-devel mailing list