test-obsolete-distributed.t
207 lines
| 7.1 KiB
| text/troff
|
Tads3Lexer
/ tests / test-obsolete-distributed.t
Boris Feld
|
r34651 | ============================= | ||
Test distributed obsolescence | ||||
============================= | ||||
This file test various cases where data (changeset, phase, obsmarkers) is | ||||
added 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. | ||||
$ unset HGUSER | ||||
$ unset EMAIL | ||||
$ . $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 local | ||||
changeset while the successor has already been obsoleted remotely. | ||||
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 | ||||
$ cat << EOF >> .hg/hgrc | ||||
> [ui] | ||||
> username = server | ||||
> EOF | ||||
$ 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:e5d7dda7cd28 c_B0 | ||||
| | ||||
| o 2:7f6b0a6f5c25 c_A1 | ||||
|/ | ||||
| x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] | ||||
|/ | ||||
o 0:e82fb8d02bbf ROOT | ||||
$ hg debugobsolete | ||||
e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | ||||
$ cd .. | ||||
duplicate the repo for the client: | ||||
$ cp -R server client | ||||
$ cat << EOF >> client/.hg/hgrc | ||||
> [paths] | ||||
> default = ../server/ | ||||
> [ui] | ||||
> username = client | ||||
> EOF | ||||
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:391a2bf12b1b c_B1 | ||||
| | ||||
| o 2:7f6b0a6f5c25 c_A1 | ||||
|/ | ||||
o 0:e82fb8d02bbf ROOT | ||||
$ hg log -G --hidden | ||||
@ 4:391a2bf12b1b c_B1 | ||||
| | ||||
| x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000); ] | ||||
|/ | ||||
| o 2:7f6b0a6f5c25 c_A1 | ||||
|/ | ||||
| x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] | ||||
|/ | ||||
o 0:e82fb8d02bbf ROOT | ||||
$ hg debugobsolete | ||||
e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | ||||
e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 391a2bf12b1b8b05a72400ae36b26d50a091dc22 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | ||||
$ 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:e5d7dda7cd28 c_B0 | ||||
| | ||||
o 0:e82fb8d02bbf ROOT | ||||
$ hg log -G --hidden | ||||
@ 3:e5d7dda7cd28 c_B0 | ||||
| | ||||
| x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000); ] | ||||
|/ | ||||
| x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] | ||||
|/ | ||||
o 0:e82fb8d02bbf ROOT | ||||
$ hg debugobsolete | ||||
e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | ||||
7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'} | ||||
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:391a2bf12b1b c_B1 | ||||
| | ||||
@ 0:e82fb8d02bbf ROOT | ||||
$ hg log -G --hidden | ||||
o 4:391a2bf12b1b c_B1 | ||||
| | ||||
| x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000); ] | ||||
|/ | ||||
| x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000); ] | ||||
|/ | ||||
| x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] | ||||
|/ | ||||
@ 0:e82fb8d02bbf ROOT | ||||
$ hg debugobsolete | ||||
e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | ||||
7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'} | ||||
e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 391a2bf12b1b8b05a72400ae36b26d50a091dc22 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | ||||
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:391a2bf12b1b c_B1 | ||||
| | ||||
o 0:e82fb8d02bbf ROOT | ||||
$ hg -R ../server/ log -G --hidden | ||||
@ 4:391a2bf12b1b c_B1 | ||||
| | ||||
| x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000); ] | ||||
|/ | ||||
| x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000); ] | ||||
|/ | ||||
| x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000); ] | ||||
|/ | ||||
o 0:e82fb8d02bbf ROOT | ||||
$ hg debugobsolete | ||||
e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'} | ||||
7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'} | ||||