sapling/eden/hg-server/tests/test-debugstrip.t
Durham Goode 98d9269874 server: copy hg to a new hg-server directory
Summary:
Create a fork of the Mercurial code that we can use to build server
rpms. The hg servers will continue to exist for a few more months while we move
the darkstorm and ediscovery use cases off them. In the mean time, we want to
start making breaking changes to the client, so let's create a stable copy of
the hg code to produce rpms for the hg servers.

The fork is based off c7770c78d, the latest hg release.

This copies the files as is, then adds some minor tweaks to get it to build:
- Disables some lint checks that appear to be bypassed by path
- sed replace eden/scm with eden/hg-server
- Removed a dependency on scm/telemetry from the edenfs-client tests since
  scm/telemetry pulls in the original eden/scm/lib/configparser which conflicts
  with the hg-server conflict parser.

allow-large-files

Reviewed By: quark-zju

Differential Revision: D27632557

fbshipit-source-id: b2f442f4ec000ea08e4d62de068750832198e1f4
2021-04-09 10:09:06 -07:00

876 lines
24 KiB
Turing

#chg-compatible
$ configure mutation-norecord
$ disable treemanifest
$ setconfig format.usegeneraldelta=yes
$ restore() {
> hg unbundle -q .hg/strip-backup/*
> rm .hg/strip-backup/*
> }
$ teststrip() {
> hg up -C $1
> echo % before update $1, strip $2
> hg parents
> hg --traceback debugstrip $2
> echo % after update $1, strip $2
> hg parents
> restore
> }
$ hg init test
$ cd test
$ echo foo > bar
$ hg ci -Ama
adding bar
$ echo more >> bar
$ hg ci -Amb
$ echo blah >> bar
$ hg ci -Amc
$ hg up 'desc(b)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo blah >> bar
$ hg ci -Amd
$ echo final >> bar
$ hg ci -Ame
$ hg log
commit: 443431ffac4f
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: e
commit: 65bd5f99a4a3
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: d
commit: 264128213d29
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: c
commit: ef3a871183d7
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
commit: 9ab35a2d17cb
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a
$ teststrip 'desc(e)' 'desc(e)'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
% before update desc(e), strip desc(e)
commit: 443431ffac4f
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: e
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
% after update desc(e), strip desc(e)
commit: 65bd5f99a4a3
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: d
$ teststrip 'desc(e)' 'desc(d)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
% before update desc(e), strip desc(d)
commit: 443431ffac4f
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: e
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
% after update desc(e), strip desc(d)
commit: ef3a871183d7
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
$ teststrip 'desc(b)' 'desc(e)'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
% before update desc(b), strip desc(e)
commit: ef3a871183d7
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
% after update desc(b), strip desc(e)
commit: ef3a871183d7
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
$ teststrip 'desc(e)' 'desc(c)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
% before update desc(e), strip desc(c)
commit: 443431ffac4f
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: e
% after update desc(e), strip desc(c)
commit: 443431ffac4f
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: e
$ teststrip 'desc(c)' 'desc(b)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
% before update desc(c), strip desc(b)
commit: 264128213d29
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: c
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
% after update desc(c), strip desc(b)
commit: 9ab35a2d17cb
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a
$ teststrip null 'desc(c)'
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
% before update null, strip desc(c)
% after update null, strip desc(c)
$ hg log
commit: 264128213d29
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: c
commit: 443431ffac4f
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: e
commit: 65bd5f99a4a3
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: d
commit: ef3a871183d7
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
commit: 9ab35a2d17cb
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a
$ hg up -C 'desc(c)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg parents
commit: 264128213d29
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: c
$ hg --traceback debugstrip 'desc(c)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg parents
commit: ef3a871183d7
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
$ hg debugbundle .hg/strip-backup/*
Stream params: {Compression: BZ}
changegroup -- {nbchanges: 1, version: 02}
264128213d290d868c54642d13aeaa3675551a78
phase-heads -- {}
264128213d290d868c54642d13aeaa3675551a78 draft
$ hg pull .hg/strip-backup/*
pulling from .hg/strip-backup/264128213d29-0b39d6bf-backup.hg
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 0 changes to 1 files
$ rm .hg/strip-backup/*
$ hg log --graph
o commit: 264128213d29
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: c
o commit: 443431ffac4f
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: e
o commit: 65bd5f99a4a3
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: d
@ commit: ef3a871183d7
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
o commit: 9ab35a2d17cb
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a
$ hg up -C 'desc(d)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg merge 'desc(c)'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
before strip of merge parent
$ hg parents
commit: 65bd5f99a4a3
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: d
commit: 264128213d29
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: c
$ hg debugstrip 'desc(c)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
after strip of merge parent
$ hg parents
commit: ef3a871183d7
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
$ restore
$ hg up
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
updated to "264128213d29: c"
1 other heads for branch "default"
$ hg log -G
@ commit: 264128213d29
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: c
o commit: 443431ffac4f
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: e
o commit: 65bd5f99a4a3
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: d
o commit: ef3a871183d7
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
o commit: 9ab35a2d17cb
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a
2 is parent of 3, only one strip should happen
$ hg debugstrip "roots(desc(d))" 'desc(e)'
$ hg log -G
@ commit: 264128213d29
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: c
o commit: ef3a871183d7
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
o commit: 9ab35a2d17cb
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a
$ restore
$ hg log -G
o commit: 443431ffac4f
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: e
o commit: 65bd5f99a4a3
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: d
@ commit: 264128213d29
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: c
o commit: ef3a871183d7
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
o commit: 9ab35a2d17cb
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a
2 different branches: 2 strips
$ hg debugstrip 'desc(c)' 'desc(e)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg log -G
o commit: 65bd5f99a4a3
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: d
@ commit: ef3a871183d7
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
o commit: 9ab35a2d17cb
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a
$ restore
2 different branches and a common ancestor: 1 strip
$ hg debugstrip 'desc(b)' "desc(c)|desc(e)"
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ restore
stripping an empty revset
$ hg debugstrip "desc(b) and not desc(b)"
abort: empty revision set
[255]
Strip adds, removes, modifies with --keep
$ touch b
$ hg add b
$ hg commit -mb
$ touch c
... with a clean working dir
$ hg add c
$ hg rm bar
$ hg commit -mc
$ hg status
$ hg debugstrip --keep tip
$ hg status
! bar
? c
... with a dirty working dir
$ hg add c
$ hg rm bar
$ hg commit -mc
$ hg status
$ echo b > b
$ echo d > d
$ hg debugstrip --keep tip
$ hg status
M b
! bar
? c
? d
... after updating the dirstate
$ hg add c
$ hg commit -mc
$ hg rm c
$ hg commit -mc
$ hg debugstrip --keep '.^' -q
$ cd ..
stripping many nodes on a complex graph (issue3299)
$ hg init issue3299
$ cd issue3299
$ hg debugbuilddag '@a.:a@b.:b.:x<a@a.:a<b@b.:b<a@a.:a'
$ hg debugstrip 'not ancestors(x)'
test hg debugstrip -B bookmark
$ cd ..
$ hg init bookmarks
$ cd bookmarks
$ hg debugbuilddag '..<2.*1/2:m<2+3:c<m+3:a<2.:b<m+2:d<2.:e<m+1:f'
$ hg bookmark -r 'a' 'todelete'
$ hg bookmark -r 'b' 'B'
$ hg bookmark -r 'b' 'nostrip'
$ hg bookmark -r 'c' 'delete'
$ hg bookmark -r 'd' 'multipledelete1'
$ hg bookmark -r 'e' 'multipledelete2'
$ hg bookmark -r 'f' 'singlenode1'
$ hg bookmark -r 'f' 'singlenode2'
$ hg book -d a b c d e f m
$ hg up -C todelete
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
(activating bookmark todelete)
$ hg debugstrip -B nostrip
bookmark 'nostrip' deleted
abort: empty revision set
[255]
$ hg debugstrip -B todelete
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
bookmark 'todelete' deleted
$ hg id -ir dcbb326fdec2
abort: unknown revision 'dcbb326fdec2'!
[255]
$ hg id -ir d62d843c9a01
d62d843c9a01
$ hg bookmarks
B ff43616e5d0f
delete 2702dd0c91e7
multipledelete1 e46a4836065c
multipledelete2 b4594d867745
singlenode1 43227190fef8
singlenode2 43227190fef8
$ hg debugstrip -B multipledelete1 -B multipledelete2
bookmark 'multipledelete1' deleted
bookmark 'multipledelete2' deleted
$ hg id -ir e46a4836065c
abort: unknown revision 'e46a4836065c'!
[255]
$ hg id -ir b4594d867745
abort: unknown revision 'b4594d867745'!
[255]
$ hg debugstrip -B singlenode1 -B singlenode2
bookmark 'singlenode1' deleted
bookmark 'singlenode2' deleted
$ hg id -ir 43227190fef8
abort: unknown revision '43227190fef8'!
[255]
$ hg debugstrip -B unknownbookmark
abort: bookmark not found: 'unknownbookmark'
[255]
$ hg debugstrip -B unknownbookmark1 -B unknownbookmark2
abort: bookmark not found: 'unknownbookmark1', 'unknownbookmark2'
[255]
$ hg debugstrip -B delete -B unknownbookmark
abort: bookmark not found: 'unknownbookmark'
[255]
$ hg debugstrip -B delete
bookmark 'delete' deleted
$ hg id -ir 'desc(r10)':2702dd0c91e7
abort: unknown revision '2702dd0c91e7'!
[255]
$ hg update B
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
(activating bookmark B)
$ echo a > a
$ hg add a
$ hg debugstrip -B B
abort: local changes found
[255]
$ hg bookmarks
* B ff43616e5d0f
Make sure no one adds back a -b option:
$ hg debugstrip -b tip
hg debugstrip: option -b not recognized
(use 'hg debugstrip -h' to get help)
[255]
$ cd ..
Verify bundles don't get overwritten:
$ hg init doublebundle
$ cd doublebundle
$ touch a
$ hg commit -Aqm a
$ touch b
$ hg commit -Aqm b
$ hg debugstrip -r 'desc(a)'
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ ls .hg/strip-backup
3903775176ed-e68910bd-backup.hg
$ hg pull -q -r 3903775176ed .hg/strip-backup/3903775176ed-e68910bd-backup.hg
$ hg debugstrip -r 'desc(a)'
$ ls .hg/strip-backup
3903775176ed-54390173-backup.hg
3903775176ed-e68910bd-backup.hg
$ cd ..
Test that we only bundle the stripped changesets (issue4736)
------------------------------------------------------------
initialization (previous repo is empty anyway)
$ hg init issue4736
$ cd issue4736
$ echo a > a
$ hg add a
$ hg commit -m commitA
$ echo b > b
$ hg add b
$ hg commit -m commitB
$ echo c > c
$ hg add c
$ hg commit -m commitC
$ hg up 'desc(commitB)'
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo d > d
$ hg add d
$ hg commit -m commitD
$ hg up 'desc(commitC)'
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg merge 'desc(commitD)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg ci -m 'mergeCD'
$ hg log -G
@ commit: d8db9d137221
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: mergeCD
o commit: 6625a5168474
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: commitD
o commit: 5c51d8d6557d
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: commitC
o commit: eca11cf91c71
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: commitB
o commit: 105141ef12d0
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: commitA
Check bundle behavior:
$ hg bundle -r 'desc(mergeCD)' --base 'desc(commitC)' ../issue4736.hg
2 changesets found
$ hg log -r 'bundle()' -R ../issue4736.hg
commit: 6625a5168474
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: commitD
commit: d8db9d137221
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: mergeCD
check strip behavior
(commitC is incorrectly included because the "_bundle" logic uses the
"outgoing" discovery logic to figure out what to bundle. The outgoing logic
cannot easily express revset like "commitD::", and it uses something like
"mergeCD % commitD". This should be fixed in the bundle / discovery logic,
unrelated to strip.)
$ hg debugstrip 'desc(commitD)' --debug
resolving manifests
branchmerge: False, force: True, partial: False
ancestor: d8db9d137221+, local: d8db9d137221+, remote: eca11cf91c71
c: other deleted -> r
removing c
d: other deleted -> r
removing d
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
3 changesets found
list of changesets:
5c51d8d6557d0cb2ed8ef7d1e19ea477fb90e327
6625a516847449b6f0fa3737b9ba56e9f0f3032c
d8db9d1372214336d2b5570f20ee468d2c72fa8b
bundle2-output-bundle: "HG20", (1 params) 2 parts total
bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload
bundle2-output-part: "phase-heads" 24 bytes payload
$ hg log -G
o commit: 5c51d8d6557d
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: commitC
@ commit: eca11cf91c71
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: commitB
o commit: 105141ef12d0
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: commitA
strip backup content
$ hg log -r 'bundle()' -R .hg/strip-backup/6625a5168474-*-backup.hg
commit: 5c51d8d6557d
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: commitC
commit: 6625a5168474
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: commitD
commit: d8db9d137221
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: mergeCD
Check that the phase cache is properly invalidated after a strip with bookmark.
$ cat > ../stripstalephasecache.py << EOF
> from edenscm.mercurial import extensions, localrepo
> def transactioncallback(orig, repo, desc, *args, **kwargs):
> def test(transaction):
> # observe cache inconsistency
> try:
> [repo.changelog.node(r) for r in repo.revs("not public()")]
> except IndexError:
> repo.ui.status("Index error!\n")
> transaction = orig(repo, desc, *args, **kwargs)
> # warm up the phase cache
> list(repo.revs("not public()"))
> if desc != 'strip':
> transaction.addpostclose("phase invalidation test", test)
> return transaction
> def extsetup(ui):
> extensions.wrapfunction(localrepo.localrepository, "transaction",
> transactioncallback)
> EOF
$ hg up -C 'desc(commitC)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo k > k
$ hg add k
$ hg commit -m commitK
$ echo l > l
$ hg add l
$ hg commit -m commitL
$ hg book -r tip blah
$ hg debugstrip ".^" --config extensions.crash=$TESTTMP/stripstalephasecache.py
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ hg up -C 'desc(commitB)'
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
Use delayedstrip to strip inside a transaction
$ cd $TESTTMP
$ hg init delayedstrip
$ cd delayedstrip
$ hg debugdrawdag <<'EOS'
> D
> |
> C F H # Commit on top of "I",
> | |/| # Strip B+D+I+E+G+H+Z
> I B E G
> \|/
> A Z
> EOS
$ cp -R . ../scmutilcleanup
$ hg up -C I
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
(activating bookmark I)
$ echo 3 >> I
$ cat > $TESTTMP/delayedstrip.py <<EOF
> from __future__ import absolute_import
> from edenscm.mercurial import commands, registrar, repair
> cmdtable = {}
> command = registrar.command(cmdtable)
> @command('testdelayedstrip')
> def testdelayedstrip(ui, repo):
> def getnodes(expr):
> return [repo.changelog.node(r) for r in repo.revs(expr)]
> with repo.wlock():
> with repo.lock():
> with repo.transaction('delayedstrip'):
> repair.delayedstrip(ui, repo, getnodes('B+I+Z+D+E'), 'J')
> repair.delayedstrip(ui, repo, getnodes('G+H+Z'), 'I')
> commands.commit(ui, repo, message='J', date='0 0')
> EOF
$ hg testdelayedstrip --config extensions.t=$TESTTMP/delayedstrip.py
warning: orphaned descendants detected, not stripping 08ebfeb61bac, 112478962961, 7fb047a69f22
$ hg log -G -T '{node|short} {desc}' -r 'sort(all(), topo)'
@ 2f2d51af6205 J
o 08ebfeb61bac I
o 64a8289d2492 F
o 7fb047a69f22 E
o 26805aba1e60 C
o 112478962961 B
o 426bada5c675 A
Test high-level scmutil.cleanupnodes API
$ cd $TESTTMP/scmutilcleanup
$ hg debugdrawdag <<'EOS'
> D2 F2 G2 # D2, F2, G2 are replacements for D, F, G
> | | |
> C H G
> EOS
$ for i in B C D F G I Z; do
> hg bookmark -i -r $i b-$i
> done
$ hg bookmark -i -r E 'b-F@divergent1'
$ hg bookmark -i -r H 'b-F@divergent2'
$ hg bookmark -i -r G 'b-F@divergent3'
$ cp -R . ../scmutilcleanup.obsstore
$ cat > $TESTTMP/scmutilcleanup.py <<EOF
> from edenscm.mercurial import registrar, scmutil
> cmdtable = {}
> command = registrar.command(cmdtable)
> @command('testnodescleanup')
> def testnodescleanup(ui, repo):
> def nodes(expr):
> return [repo.changelog.node(r) for r in repo.revs(expr)]
> def node(expr):
> return nodes(expr)[0]
> with repo.wlock():
> with repo.lock():
> with repo.transaction('delayedstrip'):
> mapping = {node('F'): [node('F2')],
> node('D'): [node('D2')],
> node('G'): [node('G2')]}
> scmutil.cleanupnodes(repo, mapping, 'replace')
> scmutil.cleanupnodes(repo, nodes('((B::)+I+Z)-D2'), 'replace')
> EOF
$ hg testnodescleanup --config extensions.t=$TESTTMP/scmutilcleanup.py
$ hg log -G -T '{node|short} {desc} {bookmarks}' -r 'sort(all(), topo)'
o 1473d4b996d1 G2 G G2 b-F@divergent3 b-G
o d11b3456a873 F2 F F2 b-F
o 5cb05ba470a7 H H
o 7fb047a69f22 E E b-F@divergent1
o 7c78f703e465 D2 D D2 b-D
o 26805aba1e60 C
o 112478962961 B
o 1fc8102cda62 G
o 426bada5c675 A A B C I b-B b-C b-I
$ hg bookmark
A 426bada5c675
B 426bada5c675
C 426bada5c675
D 7c78f703e465
D2 7c78f703e465
E 7fb047a69f22
F d11b3456a873
F2 d11b3456a873
G 1473d4b996d1
G2 1473d4b996d1
H 5cb05ba470a7
I 426bada5c675
Z 000000000000
b-B 426bada5c675
b-C 426bada5c675
b-D 7c78f703e465
b-F d11b3456a873
b-F@divergent1 7fb047a69f22
b-F@divergent3 1473d4b996d1
b-G 1473d4b996d1
b-I 426bada5c675
b-Z 000000000000
Test the above using obsstore "by the way". Not directly related to strip, but
we have reusable code here
$ cd $TESTTMP/scmutilcleanup.obsstore
$ cat >> .hg/hgrc <<EOF
> [experimental]
> evolution=true
> evolution.track-operation=1
> EOF
$ hg testnodescleanup --config extensions.t=$TESTTMP/scmutilcleanup.py
$ hg log -G -T '{node|short} {desc} {bookmarks}' -r 'sort(all(), topo)'
o 1473d4b996d1 G2 G G2 b-F@divergent3 b-G
o d11b3456a873 F2 F F2 b-F
o 5cb05ba470a7 H H
o 7fb047a69f22 E E b-F@divergent1
o 7c78f703e465 D2 D D2 b-D
o 26805aba1e60 C
o 112478962961 B
x 1fc8102cda62 G
o 426bada5c675 A A B C I b-B b-C b-I
$ hg debugobsolete
$ cd ..
Test that obsmarkers are restored even when not using generaldelta
$ hg --config format.usegeneraldelta=no init issue5678
$ cd issue5678
$ cat >> .hg/hgrc <<EOF
> [experimental]
> evolution=true
> EOF
$ echo a > a
$ hg ci -Aqm a
$ hg ci --amend -m a2
$ hg debugobsolete
$ hg debugstrip .
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg unbundle -q .hg/strip-backup/*
$ hg debugobsolete
$ cd ..