changeset 3993:85c99079d41f mercurial-4.6

test-compat: merge stable into mercurial-4.6
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 21 Aug 2018 13:25:28 +0200
parents 1194c850fe2a (current diff) ab2e1da783a4 (diff)
children e39ef1eff75a 9871809aa348
files tests/test-discovery-obshashrange.t tests/test-evolve-abort-contentdiv.t tests/test-evolve.t
diffstat 21 files changed, 791 insertions(+), 213 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Fri Aug 03 00:19:45 2018 +0200
+++ b/.hgtags	Tue Aug 21 13:25:28 2018 +0200
@@ -67,3 +67,4 @@
 e4ac2e2c2086f977afa35e23a62f849e9305a225 7.3.0
 116cdd8c102ab0ae6295fb4886b0882e75e4d8f7 8.0.0
 0887c30255a1a1808d74a63b16e896d457f8ef32 8.0.1
+2c5d79c6459c6fabe0eb8723fc5041ac0dac7a9a 8.1.0
--- a/CHANGELOG	Fri Aug 03 00:19:45 2018 +0200
+++ b/CHANGELOG	Tue Aug 21 13:25:28 2018 +0200
@@ -1,23 +1,49 @@
 Changelog
 =========
 
-8.1.0 - in progress
+8.1.1 - in progress
+-------------------
+
+  * clone: fix possible crash when using clone bundle and forcing cache warming
+  * evolve: properly set second parent during conflict (issue5927)
+  * next: delete the evolvestate after aborting interrupted `next --evolve`
+  * next: fix topic restriction when passing --evolve
+  * obshashrange: fix speed and consistency issues during cache invalidation
+  * obshashrange: properly persist all caches involved in obshashrange discovery
+  * prune: improve documentation
+
+8.1.0 -- 2018-08-03
 -------------------
 
-  * compatibility with mercurial 4.7rc0
-  * evolve: handle branch changes when solving content divergence,
-  * evolve: improve multiple aspect of divergence resolution
+  * compatibility with mercurial 4.7
+  * evolve: improve multiple aspect of content-divergence resolution
             * branch changes handling,
             * parent changes handling,
+            * description changes handling,
             * divergent stack handling,
-  * evolve: merge commit messages when resolving content divergence (issue5877)
+            * improved resume, stop and abort of divergent resolution
+  * evolve: improved automatic resolution of phase-divergence
+
+  * evolve: add a --update and --no-update flag to evolve to control final
+            working copy parent
+  * evolve: show `hg help evolve.interrupted-evolve` in error when conflicts
   * evolve: show unfinished state information in `hg status -v` (issue5886)
   * evolve: move bookmarks also when updating to successors (issue5923)
+  * evolve: improve orphan resolution when combined with divergence (issue5946)
   * amend: abort `--patch` by saving an empty file (issue5925)
+  *
   * evolve: add a new `--no-update` flag to keep working copy on the initial
             revision.
   * evolve: new help section dedicated to resuming operation interrupted by
             merge conflit, `hg help evolve.interrupted`.
+  * obslog: --filternonlocal
+
+  * rewind: first limited version of `rewind` command to restore stack of commit to a
+            precusors state (check command help for detail and limitation)
+
+topic (0.10.0)
+
+  * display a hint when a topic becomes empty
 
 8.0.1 -- 2018-06-11
 -------------------
--- a/hgext3rd/evolve/__init__.py	Fri Aug 03 00:19:45 2018 +0200
+++ b/hgext3rd/evolve/__init__.py	Tue Aug 21 13:25:28 2018 +0200
@@ -1142,10 +1142,9 @@
 
         children = [ctx for ctx in wparents[0].children() if not ctx.obsolete()]
         topic = _getcurrenttopic(repo)
-        filtered = []
+        filtered = set()
         if topic and not opts.get("no_topic", False):
-            filtered = [ctx for ctx in children if ctx.topic() != topic]
-            # XXX N-square membership on children
+            filtered = set(ctx for ctx in children if ctx.topic() != topic)
             children = [ctx for ctx in children if ctx not in filtered]
         displayer = compat.changesetdisplayer(ui, repo,
                                               {'template': shorttemplate})
@@ -1167,9 +1166,8 @@
         else:
             aspchildren = evolvecmd._aspiringchildren(repo, [repo['.'].rev()])
             if topic:
-                filtered.extend(repo[c] for c in children
+                filtered.update(repo[c] for c in aspchildren
                                 if repo[c].topic() != topic)
-                # XXX N-square membership on children
                 aspchildren = [ctx for ctx in aspchildren if ctx not in filtered]
             if not opts['evolve'] or not aspchildren:
                 if filtered:
--- a/hgext3rd/evolve/cmdrewrite.py	Fri Aug 03 00:19:45 2018 +0200
+++ b/hgext3rd/evolve/cmdrewrite.py	Tue Aug 21 13:25:28 2018 +0200
@@ -952,28 +952,29 @@
     _('[OPTION] [-r] REV...'))
 # XXX -U  --noupdate option to prevent wc update and or bookmarks update ?
 def cmdprune(ui, repo, *revs, **opts):
-    """hide changesets by marking them obsolete
+    """mark changesets as obsolete or succeeded by another changeset
 
-    Pruned changesets are obsolete with no successors. If they also have no
-    descendants, they are hidden (invisible to all commands).
-
-    Non-obsolete descendants of pruned changesets become "unstable". Use :hg:`evolve`
-    to handle this situation.
+    Pruning changesets marks them obsolete, hiding them from the
+    history log, provided they have no descendants. Otherwise, all
+    such descendants that aren't themselves obsolete become
+    "unstable". Use :hg:`evolve` to handle this situation.
 
     When you prune the parent of your working copy, Mercurial updates the working
     copy to a non-obsolete parent.
 
-    You can use ``--succ`` to tell Mercurial that a newer version (successor) of the
+    You can use ``-s/--succ`` to tell Mercurial that a newer version (successor) of the
     pruned changeset exists. Mercurial records successor revisions in obsolescence
     markers.
 
-    You can use the ``--biject`` option to specify a 1-1 mapping (bijection) between
-    revisions to pruned (precursor) and successor changesets. This option may be
-    removed in a future release (with the functionality provided automatically).
+    If you prune a single revision and specify multiple revisions in
+    ``-s/--succ``, you are recording a "split" and must acknowledge it by
+    passing ``--split``. Similarly, when you prune multiple changesets with a
+    single successor, you must pass the ``--fold`` option.
 
-    If you specify multiple revisions in ``--succ``, you are recording a "split" and
-    must acknowledge it by passing ``--split``. Similarly, when you prune multiple
-    changesets with a single successor, you must pass the ``--fold`` option.
+    If you want to supersede multiple revisions at the same time, use
+    ``--biject`` option to pair the pruned precursor and successor changesets.
+    This is commonly useful for resolving history divergence, or when someone
+    else does edits history without obsolescence enabled.
     """
     _checknotesize(ui, opts)
     revs = scmutil.revrange(repo, list(revs) + opts.get('rev'))
--- a/hgext3rd/evolve/evolvecmd.py	Fri Aug 03 00:19:45 2018 +0200
+++ b/hgext3rd/evolve/evolvecmd.py	Tue Aug 21 13:25:28 2018 +0200
@@ -21,7 +21,7 @@
     hg,
     lock as lockmod,
     merge,
-    node,
+    node as nodemod,
     obsolete,
     obsutil,
     phases,
@@ -299,7 +299,7 @@
         text += bumped.description()
 
         new = context.memctx(repo,
-                             parents=[prec.node(), node.nullid],
+                             parents=[prec.node(), nodemod.nullid],
                              text=text,
                              files=files,
                              filectxfn=filectxfn,
@@ -320,10 +320,10 @@
     # if rebased happened, update bookmarks from there too
     if rebasedbmupdate:
         rebasedbmupdate(newid)
-    repo.ui.status(_('committed as %s\n') % node.short(newid))
+    repo.ui.status(_('committed as %s\n') % nodemod.short(newid))
     # reroute the working copy parent to the new changeset
     with repo.dirstate.parentchange():
-        repo.dirstate.setparents(newid, node.nullid)
+        repo.dirstate.setparents(newid, nodemod.nullid)
     return (True, replacementnode)
 
 def _solvedivergent(ui, repo, divergent, evolvestate, dryrun=False,
@@ -535,7 +535,7 @@
     resparent = evolvestate['resolutionparent']
     try:
         with repo.dirstate.parentchange():
-            repo.dirstate.setparents(resparent, node.nullid)
+            repo.dirstate.setparents(resparent, nodemod.nullid)
 
         dirstatedance(repo, divergent, resparent, None)
 
@@ -798,7 +798,7 @@
         # We can't make any assumptions about how to update the hash if the
         # cset in question was split or diverged.
         if len(successors) == 1 and len(successors[0]) == 1:
-            newsha1 = node.hex(successors[0][0])
+            newsha1 = nodemod.hex(successors[0][0])
             commitmsg = commitmsg.replace(sha1, newsha1[:len(sha1)])
         else:
             repo.ui.note(_('The stale commit message reference to %s could '
@@ -814,7 +814,7 @@
         nodenew = _relocatecommit(repo, orig, commitmsg)
     except error.Abort as exc:
         with repo.dirstate.parentchange():
-            repo.setparents(repo['.'].node(), node.nullid)
+            repo.setparents(dest.node(), orig.node())
             repo.dirstate.write(tr)
             # fix up dirstate for copies and renames
             copies.duplicatecopies(repo, repo[None], dest.rev(), orig.p1().rev())
@@ -1187,8 +1187,8 @@
                 for n in dset['divergentnodes']:
                     t = "%s (%s)" if first else " %s (%s)"
                     first = False
-                    fm.plain(t % (node.hex(n)[:hashlen], repo[n].phasestr()))
-                comprec = node.hex(dset['commonprecursor'])[:hashlen]
+                    fm.plain(t % (nodemod.hex(n)[:hashlen], repo[n].phasestr()))
+                comprec = nodemod.hex(dset['commonprecursor'])[:hashlen]
                 fm.plain(" (precursor %s)\n" % comprec)
         fm.plain("\n")
 
@@ -1207,11 +1207,11 @@
                              'sourcenode': imprec,
                              'sourcetype': 'immutableprecursor'})
         for dset in dsets:
-            divnodes = [{'node': node.hex(n),
+            divnodes = [{'node': nodemod.hex(n),
                          'phase': repo[n].phasestr(),
                         } for n in dset['divergentnodes']]
             troubles.append({'troubletype': TROUBLES['CONTENTDIVERGENT'],
-                             'commonprecursor': node.hex(dset['commonprecursor']),
+                             'commonprecursor': nodemod.hex(dset['commonprecursor']),
                              'divergentnodes': divnodes})
         fm.data(troubles=troubles)
 
@@ -1543,6 +1543,7 @@
             ui.status(_('evolve aborted\n'))
             ui.status(_('working directory is now at %s\n')
                       % pctx.hex()[:12])
+            evolvestate.delete()
             return 0
         return abortevolve(ui, repo, evolvestate)
     else:
@@ -1691,7 +1692,7 @@
             evolvestate.delete()
             ui.status(_('evolve aborted\n'))
             ui.status(_('working directory is now at %s\n')
-                      % node.hex(startnode)[:12])
+                      % nodemod.hex(startnode)[:12])
         else:
             raise error.Abort(_("unable to abort interrupted evolve, use 'hg "
                                 "evolve --stop' to stop evolve"))
@@ -1866,6 +1867,9 @@
                     repo.dirstate.setparents(ctxparents[0].node(),
                                              currentp1)
             pass
+    else:
+        with repo.dirstate.parentchange():
+            repo.dirstate.setparents(repo.dirstate.parents()[0], nodemod.nullid)
 
     with repo.ui.configoverride(overrides, 'evolve-continue'):
         node = repo.commit(text=message, user=user,
--- a/hgext3rd/evolve/metadata.py	Fri Aug 03 00:19:45 2018 +0200
+++ b/hgext3rd/evolve/metadata.py	Tue Aug 21 13:25:28 2018 +0200
@@ -5,7 +5,7 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2 or any later version.
 
-__version__ = '8.1.0.dev'
-testedwith = '4.3.2 4.4.2 4.5.2 4.6.1'
+__version__ = '8.1.1.dev'
+testedwith = '4.3.2 4.4.2 4.5.2 4.6.2 4.7'
 minimumhgversion = '4.3'
 buglink = 'https://bz.mercurial-scm.org/'
--- a/hgext3rd/evolve/obsdiscovery.py	Fri Aug 03 00:19:45 2018 +0200
+++ b/hgext3rd/evolve/obsdiscovery.py	Tue Aug 21 13:25:28 2018 +0200
@@ -65,7 +65,6 @@
 _calcsize = struct.calcsize
 
 eh = exthelper.exthelper()
-eh.merge(stablerangecache.eh)
 obsexcmsg = utility.obsexcmsg
 
 # Config
@@ -349,10 +348,50 @@
 _updateobshash = "INSERT INTO obshashrange(rev, idx, obshash) VALUES (?,?,?);"
 _querymeta = "SELECT schemaversion, tiprev, tipnode, nbobsmarker, obssize, obskey FROM meta;"
 _queryobshash = "SELECT obshash FROM obshashrange WHERE (rev = ? AND idx = ?);"
+_query_max_stored = "SELECT MAX(rev) FROM obshashrange"
 
 _reset = "DELETE FROM obshashrange;"
 _delete = "DELETE FROM obshashrange WHERE (rev = ? AND idx = ?);"
 
+def _affectedby(repo, markers):
+    """return all nodes whose relevant set is affected by this changeset
+
+    This is a reversed version of obsstore.relevantmarkers
+    """
+    affected_nodes = set()
+    known_markers = set(markers)
+    node_to_proceed = set()
+    marker_to_proceed = set(known_markers)
+
+    obsstore = repo.obsstore
+
+    while node_to_proceed or marker_to_proceed:
+        while marker_to_proceed:
+            m = marker_to_proceed.pop()
+            # check successors and parent
+            if m[1]:
+                relevant = (m[1], )
+            else: # prune case
+                relevant = ((m[0], ), m[5])
+            for l in relevant:
+                if l is None:
+                    continue
+                for n in l:
+                    if n not in affected_nodes:
+                        node_to_proceed.add(n)
+                    affected_nodes.add(n)
+        # marker_to_proceed is now empty:
+        if node_to_proceed:
+            n = node_to_proceed.pop()
+            markers = set()
+            markers.update(obsstore.successors.get(n, ()))
+            markers.update(obsstore.predecessors.get(n, ()))
+            markers -= known_markers
+            marker_to_proceed.update(markers)
+            known_markers.update(markers)
+
+    return affected_nodes
+
 class _obshashcache(obscache.dualsourcecache):
 
     _schemaversion = 2
@@ -417,46 +456,43 @@
 
         self._updating = True
 
-        setrevs = set(revs)
-        rev = repo.changelog.nodemap.get
-        # if we have a new markers affecting a node already covered by the
-        # cache, we must abort.
-        affected = set()
-        for m in obsmarkers:
-            # check successors and parent
-            for l in (m[1], m[5]):
-                if l is None:
-                    continue
-                for p in l:
-                    r = rev(p)
-                    if r is not None and r not in setrevs:
-                        # XXX should check < min(setrevs) or tiprevs
-                        affected.add(r)
+        con = self._con
+        if con is not None:
+            max_stored = con.execute(_query_max_stored).fetchall()[0][0]
+            affected_nodes = _affectedby(repo, obsmarkers)
+
+            rev = repo.changelog.nodemap.get
+            affected = [rev(n) for n in affected_nodes]
+            affected = [r for r in affected
+                        if r is not None and r <= max_stored]
 
-        if affected:
-            repo.ui.log('evoext-cache', 'obshashcache clean - '
-                        'new markers affect %d changeset and cached ranges\n'
-                        % len(affected))
-            # XXX the current reset is too strong we could just drop the affected range
-            con = self._con
-            if con is not None:
-                con.execute(_reset)
-
-            ranges = repo.stablerange.contains(repo, affected)
+            if affected:
+                repo.ui.log('evoext-cache', 'obshashcache clean - '
+                            'new markers affect %d changeset and cached ranges\n'
+                            % len(affected))
+                if con is not None:
+                    # always reset for now, the code detecting affect is buggy
+                    # so we need to reset more broadly than we would like.
+                    if repo.stablerange._con is None:
+                        con.execute(_reset)
+                        self._data.clear()
+                    else:
+                        ranges = repo.stablerange.contains(repo, affected)
+                        con.executemany(_delete, ranges)
+                        for r in ranges:
+                            self._data.pop(r, None)
 
-            con.executemany(_delete, ranges)
-
-            # rewarm key revisions
-            #
-            # (The current invalidation is too wide, but rewarming every single
-            # revision is quite costly)
-            newrevs = []
-            stop = self._cachekey[0] # tiprev
-            for h in repo.filtered('immutable').changelog.headrevs():
-                if h <= stop and h in affected:
-                    newrevs.append(h)
-            newrevs.extend(revs)
-            revs = newrevs
+                # rewarm key revisions
+                #
+                # (The current invalidation is too wide, but rewarming every
+                # single revision is quite costly)
+                newrevs = []
+                stop = self._cachekey[0] # tiprev
+                for h in repo.filtered('immutable').changelog.headrevs():
+                    if h <= stop and h in affected:
+                        newrevs.append(h)
+                newrevs.extend(revs)
+                revs = newrevs
 
         repo.depthcache.update(repo)
         total = len(revs)
@@ -521,6 +557,8 @@
         repo = repo.unfiltered()
         try:
             with repo.lock():
+                if 'stablerange' in vars(repo):
+                    repo.stablerange.save(repo)
                 self._save(repo)
         except error.LockError:
             # Exceptionnally we are noisy about it since performance impact
@@ -1003,3 +1041,6 @@
     else:
         boundaries['common'] = [node.nullid]
     return boundaries
+
+# merge later for outer layer wrapping
+eh.merge(stablerangecache.eh)
--- a/hgext3rd/evolve/stablerange.py	Fri Aug 03 00:19:45 2018 +0200
+++ b/hgext3rd/evolve/stablerange.py	Tue Aug 21 13:25:28 2018 +0200
@@ -32,8 +32,6 @@
 filterparents = utility.filterparents
 
 eh = exthelper.exthelper()
-eh.merge(stablesort.eh)
-eh.merge(firstmergecache.eh)
 
 
 #################################
@@ -864,3 +862,7 @@
         top = (rangeid[0], globalindex)
         result.append(top)
         return result
+
+# merge later for outer layer wrapping
+eh.merge(stablesort.eh)
+eh.merge(firstmergecache.eh)
--- a/hgext3rd/evolve/stablerangecache.py	Fri Aug 03 00:19:45 2018 +0200
+++ b/hgext3rd/evolve/stablerangecache.py	Tue Aug 21 13:25:28 2018 +0200
@@ -9,6 +9,7 @@
 
 import abc
 import heapq
+import random
 import sqlite3
 import time
 import weakref
@@ -29,7 +30,6 @@
 from mercurial.i18n import _
 
 eh = exthelper.exthelper()
-eh.merge(stablerange.eh)
 
 class stablerangeondiskbase(stablerange.stablerangecached,
                             genericcaches.changelogsourcebase):
@@ -120,10 +120,17 @@
                      FROM subranges
                      WHERE (suprev = ? AND supidx = ?)
                      ORDER BY listidx;"""
-_querysuperranges = """SELECT suprev, supidx
-                       FROM subranges
-                       WHERE (subrev = ? AND subidx = ?)
-                       ORDER BY listidx;"""
+
+_querysuperrangesmain = """SELECT DISTINCT suprev, supidx
+                           FROM subranges
+                           WHERE %s;"""
+
+_querysuperrangesbody = '(subrev = %d and subidx = %d)'
+
+def _make_querysuperranges(ranges):
+    # building a tree of OR would allow for more ranges
+    body = ' OR '.join(_querysuperrangesbody % r for r in ranges)
+    return _querysuperrangesmain % body
 
 class stablerangesqlbase(stablerange.stablerangecached):
     """class that can handle all the bits needed to store range into sql
@@ -144,18 +151,22 @@
         self._unsavedsubranges = {}
 
     def contains(self, repo, revs):
+        con = self._con
+        assert con is not None
         new = set()
         known = set()
         depth = repo.depthcache.get
         for r in revs:
             new.add((r, depth(r) - 1))
             new.add((r, 0))
-        con = self._con
-        while new and con is not None:
-            # many execute is not efficient
-            next = new.pop()
-            known.add(next)
-            ranges = set(con.execute(_querysuperranges, next).fetchall())
+        while new:
+            if len(new) < 300:
+                sample = new
+            else:
+                sample = random.sample(new, 300)
+            known.update(sample)
+            query = _make_querysuperranges(sample)
+            ranges = set(con.execute(query).fetchall())
             new.update(ranges)
             new -= known
         return sorted(known)
@@ -214,6 +225,8 @@
     def _save(self, repo):
         repo = repo.unfiltered()
         repo.depthcache.save(repo)
+        repo.stablesort.save(repo)
+        repo.firstmergecache.save(repo)
         if not self._unsavedsubranges:
             return # no new data
 
@@ -391,3 +404,5 @@
                 return tr
 
     repo.__class__ = stablerangerepo
+
+eh.merge(stablerange.eh)
--- a/hgext3rd/evolve/stablesort.py	Fri Aug 03 00:19:45 2018 +0200
+++ b/hgext3rd/evolve/stablesort.py	Tue Aug 21 13:25:28 2018 +0200
@@ -34,7 +34,6 @@
 filterparents = utility.filterparents
 
 eh = exthelper.exthelper()
-eh.merge(depthcache.eh)
 
 def _mergepoint_tie_breaker(repo):
     """the key use to tie break merge parent
@@ -705,3 +704,6 @@
     'headcached': stablesort_mergepoint_head_cached,
     'headondisk': stablesort_mergepoint_head_ondisk,
 }
+
+# merge last so that repo setup wrap after that one.
+eh.merge(depthcache.eh)
--- a/hgext3rd/evolve/templatekw.py	Fri Aug 03 00:19:45 2018 +0200
+++ b/hgext3rd/evolve/templatekw.py	Tue Aug 21 13:25:28 2018 +0200
@@ -26,13 +26,15 @@
 ### template keywords
 # XXX it does not handle troubles well :-/
 
-@eh.templatekw('obsolete')
-def obsoletekw(repo, ctx, templ, **args):
-    """String. Whether the changeset is ``obsolete``.
-    """
-    if ctx.obsolete():
-        return 'obsolete'
-    return ''
+if not util.safehasattr(templatekw, 'showobsolete'):
+    # hg < 4.2
+    @eh.templatekw('obsolete')
+    def obsoletekw(repo, ctx, templ, **args):
+        """String. Whether the changeset is ``obsolete``.
+        """
+        if ctx.obsolete():
+            return 'obsolete'
+        return ''
 
 if util.safehasattr(templatekw, 'compatlist'):
     @eh.templatekw('troubles', requires=set(['ctx', 'templ']))
--- a/hgext3rd/topic/__init__.py	Fri Aug 03 00:19:45 2018 +0200
+++ b/hgext3rd/topic/__init__.py	Tue Aug 21 13:25:28 2018 +0200
@@ -181,9 +181,9 @@
               'topic.active': 'green',
              }
 
-__version__ = '0.10.0.dev'
+__version__ = '0.10.1.dev'
 
-testedwith = '4.3.3 4.4.2 4.5.2 4.6.1'
+testedwith = '4.3.3 4.4.2 4.5.2 4.6.2 4.7'
 minimumhgversion = '4.3'
 buglink = 'https://bz.mercurial-scm.org/'
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-discovery-obshashrange-cache.t	Tue Aug 21 13:25:28 2018 +0200
@@ -0,0 +1,169 @@
+==============================
+Test cache warming strategy 
+test for range based discovery
+==============================
+
+  $ . $TESTDIR/testlib/pythonpath.sh
+
+  $ cat << EOF >> $HGRCPATH
+  > [extensions]
+  > hgext3rd.evolve =
+  > blackbox =
+  > [defaults]
+  > blackbox = -l 100
+  > [experimental]
+  > obshashrange=1
+  > verbose-obsolescence-exchange=1
+  > [ui]
+  > logtemplate = "{rev} {node|short} {desc} {tags}\n"
+  > ssh=python "$RUNTESTDIR/dummyssh"
+  > [alias]
+  > debugobsolete=debugobsolete -d '0 0'
+  > [ui]
+  > ssh=$PYTHON "$RUNTESTDIR/dummyssh"
+  > EOF
+
+  $ hg init main
+
+  $ hg -R main debugbuilddag '.+7'
+
+  $ for node in `hg -R main log -T '{node}\n'`; do
+  >     echo -n $node | grep -o . | sort |tr -d "\n" > ancfile
+  >     anc=`cat ancfile`
+  >     rm ancfile
+  >     echo "marking $anc as predecessors of $node"
+  >     hg -R main debugobsolete $anc $node
+  > done
+  marking 000011223334456677789aaaaabbbbcccddddeef as predecessors of 4de32a90b66cd083ebf3c00b41277aa7abca51dd
+  marking 012234455555666699aaaaabbbccccccefffffff as predecessors of f69452c5b1af6cbaaa56ef50cf94fff5bcc6ca23
+  marking 00001122233445555777778889999abbcccddeef as predecessors of c8d03c1b5e94af74b772900c58259d2e08917735
+  marking 0011222445667777889999aabbbbcddddeeeeeee as predecessors of bebd167eb94d257ace0e814aeb98e6972ed2970d
+  marking 000011222223344555566778899aaaabccddefff as predecessors of 2dc09a01254db841290af0538aa52f6f52c776e3
+  marking 01111222223333444455555566999abbbbcceeef as predecessors of 01241442b3c2bf3211e593b549c655ea65b295e3
+  marking 01122444445555566677888aabbcccddddefffff as predecessors of 66f7d451a68b85ed82ff5fcc254daf50c74144bd
+  marking 000111111234444467777889999aaaabcdeeeeff as predecessors of 1ea73414a91b0920940797d8fc6a11e447f8ea1e
+
+  $ hg debugobsolete -R main
+  000011223334456677789aaaaabbbbcccddddeef 4de32a90b66cd083ebf3c00b41277aa7abca51dd 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
+  012234455555666699aaaaabbbccccccefffffff f69452c5b1af6cbaaa56ef50cf94fff5bcc6ca23 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
+  00001122233445555777778889999abbcccddeef c8d03c1b5e94af74b772900c58259d2e08917735 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
+  0011222445667777889999aabbbbcddddeeeeeee bebd167eb94d257ace0e814aeb98e6972ed2970d 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
+  000011222223344555566778899aaaabccddefff 2dc09a01254db841290af0538aa52f6f52c776e3 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
+  01111222223333444455555566999abbbbcceeef 01241442b3c2bf3211e593b549c655ea65b295e3 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
+  01122444445555566677888aabbcccddddefffff 66f7d451a68b85ed82ff5fcc254daf50c74144bd 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
+  000111111234444467777889999aaaabcdeeeeff 1ea73414a91b0920940797d8fc6a11e447f8ea1e 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
+
+Cache mode is "auto" so local commit did not warm the cache yet
+
+  $ f -s main/.hg/cache/evoext*
+  main/.hg/cache/evoext-obscache-00: size=72
+
+Initial push
+------------
+
+  $ hg init server
+  $ hg -R main push ssh://user@dummy/server
+  pushing to ssh://user@dummy/server
+  searching for changes
+  OBSEXC: computing relevant nodes
+  OBSEXC: looking for common markers in 8 nodes
+  OBSEXC: computing markers relevant to 8 nodes
+  remote: adding changesets
+  remote: adding manifests
+  remote: adding file changes
+  remote: added 8 changesets with 0 changes to 0 files
+  remote: 8 new obsolescence markers
+
+sever cash is warm
+
+  $ f -s server/.hg/cache/evoext*
+  server/.hg/cache/evoext-depthcache-00: size=88
+  server/.hg/cache/evoext-firstmerge-00: size=88
+  server/.hg/cache/evoext-obscache-00: size=72
+  server/.hg/cache/evoext-stablesortcache-00: size=92
+  server/.hg/cache/evoext_obshashrange_v2.sqlite: size=?* (glob)
+  server/.hg/cache/evoext_stablerange_v2.sqlite: size=?* (glob)
+
+client cash is warm
+
+  $ f -s main/.hg/cache/evoext*
+  main/.hg/cache/evoext-depthcache-00: size=88
+  main/.hg/cache/evoext-firstmerge-00: size=88
+  main/.hg/cache/evoext-obscache-00: size=72
+  main/.hg/cache/evoext-stablesortcache-00: size=92
+  main/.hg/cache/evoext_obshashrange_v2.sqlite: size=?* (glob)
+  main/.hg/cache/evoext_stablerange_v2.sqlite: size=?* (glob)
+
+initial pull
+------------
+
+  $ rm -rf main
+  $ hg init main
+  $ hg -R main pull ssh://user@dummy/server
+  pulling from ssh://user@dummy/server
+  requesting all changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 8 changesets with 0 changes to 0 files
+  8 new obsolescence markers
+  new changesets 1ea73414a91b:4de32a90b66c
+  (run 'hg update' to get a working copy)
+
+client cache is empty because the discovery was empty
+
+  $ f -s main/.hg/cache/evoext*
+  main/.hg/cache/evoext-obscache-00: size=72
+
+no op pull
+------------
+
+clear cache
+
+  $ rm -rf main/.hg/cache/evoext
+
+pull nothing
+
+  $ hg -R main pull ssh://user@dummy/server
+  pulling from ssh://user@dummy/server
+  searching for changes
+  no changes found
+  OBSEXC: looking for common markers in 8 nodes
+
+client cash is warm
+
+  $ f -s main/.hg/cache/evoext*
+  main/.hg/cache/evoext-depthcache-00: size=88
+  main/.hg/cache/evoext-firstmerge-00: size=88
+  main/.hg/cache/evoext-obscache-00: size=72
+  main/.hg/cache/evoext-stablesortcache-00: size=92
+  main/.hg/cache/evoext_obshashrange_v2.sqlite: size=?* (glob)
+  main/.hg/cache/evoext_stablerange_v2.sqlite: size=?* (glob)
+
+no op push
+------------
+
+clear cache
+
+  $ rm -rf main/.hg/cache/evoext
+
+push nothing
+
+  $ hg -R main push ssh://user@dummy/server
+  pushing to ssh://user@dummy/server
+  searching for changes
+  OBSEXC: computing relevant nodes
+  OBSEXC: looking for common markers in 8 nodes
+  OBSEXC: markers already in sync
+  no changes found
+  [1]
+
+client cash is warm
+
+  $ f -s main/.hg/cache/evoext*
+  main/.hg/cache/evoext-depthcache-00: size=88
+  main/.hg/cache/evoext-firstmerge-00: size=88
+  main/.hg/cache/evoext-obscache-00: size=72
+  main/.hg/cache/evoext-stablesortcache-00: size=92
+  main/.hg/cache/evoext_obshashrange_v2.sqlite: size=?* (glob)
+  main/.hg/cache/evoext_stablerange_v2.sqlite: size=?* (glob)
--- a/tests/test-discovery-obshashrange.t	Fri Aug 03 00:19:45 2018 +0200
+++ b/tests/test-discovery-obshashrange.t	Tue Aug 21 13:25:28 2018 +0200
@@ -140,7 +140,11 @@
   * @0000000000000000000000000000000000000000 (*)> strip detected, evo-ext-depthcache cache reset (glob)
   * @0000000000000000000000000000000000000000 (*)> updated evo-ext-depthcache in *.???? seconds (8r) (glob)
   * @0000000000000000000000000000000000000000 (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (8r) (glob)
-  * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (8r, 5o) (glob)
+  1970/01/01 00:00:00 * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (8r, 5o) (glob)
+  1970/01/01 00:00:00 * @0000000000000000000000000000000000000000 (*)> strip detected, evo-ext-stablesort cache reset (glob)
+  1970/01/01 00:00:00 * @0000000000000000000000000000000000000000 (*)> updated evo-ext-stablesort in *.???? seconds (8r) (glob)
+  1970/01/01 00:00:00 * @0000000000000000000000000000000000000000 (*)> strip detected, evo-ext-firstmerge cache reset (glob)
+  1970/01/01 00:00:00 * @0000000000000000000000000000000000000000 (*)> updated evo-ext-firstmerge in *.???? seconds (8r) (glob)
   * @0000000000000000000000000000000000000000 (*)> debugobshashrange --subranges --rev tip exited 0 after *.?? seconds (glob)
   * @0000000000000000000000000000000000000000 (*)> -R server serve --stdio (glob)
   * @0000000000000000000000000000000000000000 (*)> -R server serve --stdio exited 0 after *.?? seconds (glob)
@@ -236,17 +240,11 @@
   received listkey for "phases": 58 bytes
   $ hg -R ../server blackbox
   * @0000000000000000000000000000000000000000 (*)> -R server serve --stdio (glob)
-  * @0000000000000000000000000000000000000000 (*)> strip detected, evo-ext-stablerange-mergepoint cache reset (glob)
-  * @0000000000000000000000000000000000000000 (*)> strip detected, evo-ext-depthcache cache reset (glob)
-  * @0000000000000000000000000000000000000000 (*)> updated evo-ext-depthcache in *.???? seconds (8r) (glob)
-  * @0000000000000000000000000000000000000000 (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (8r) (glob)
+  1970/01/01 00:00:00 * @0000000000000000000000000000000000000000 (*)> updated evo-ext-firstmerge in *.???? seconds (1r) (glob)
   * @0000000000000000000000000000000000000000 (*)> updated evo-ext-depthcache in *.???? seconds (1r) (glob)
-  * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (1r, 1o) (glob)
+  1970/01/01 00:00:00 * @0000000000000000000000000000000000000000 (*)> updated evo-ext-stablesort in *.???? seconds (1r) (glob)
   * @0000000000000000000000000000000000000000 (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (1r) (glob)
-  * @0000000000000000000000000000000000000000 (*)> strip detected, evo-ext-firstmerge cache reset (glob)
-  * @0000000000000000000000000000000000000000 (*)> updated evo-ext-firstmerge in *.???? seconds (9r) (glob)
-  * @0000000000000000000000000000000000000000 (*)> strip detected, evo-ext-stablesort cache reset (glob)
-  * @0000000000000000000000000000000000000000 (*)> updated evo-ext-stablesort in *.???? seconds (9r) (glob)
+  1970/01/01 00:00:00 * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (1r, 1o) (glob)
   * @0000000000000000000000000000000000000000 (*)> obscache is out of date, falling back to slower obsstore version (glob)
   * @0000000000000000000000000000000000000000 (*)> updated served branch cache in *.???? seconds (glob)
   * @0000000000000000000000000000000000000000 (*)> wrote served branch cache with 1 labels and 2 nodes (glob)
@@ -344,10 +342,14 @@
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-depthcache cache reset (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-depthcache in *.???? seconds (6r) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (6r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (6r, 4o) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (6r, 4o) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> query 0; add more sample (target 100, current 1) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> query 0; sample size is 9, largest range 5 (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> sending evoext_obshashrange_v1 command (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-stablesort cache reset (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablesort in *.???? seconds (6r) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-firstmerge cache reset (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-firstmerge in *.???? seconds (6r) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 0/5 mismatch - 1 obshashrange queries in *.???? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 0/5 mismatch - 1 obshashrange queries in *.???? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> checking for updated bookmarks (glob)
@@ -382,10 +384,6 @@
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobsolete 22222222222222222bbbbbbbbbbbbb2222222222 2dc09a01254db841290af0538aa52f6f52c776e3 exited 0 after *.?? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> push (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-stablerange-mergepoint cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-depthcache cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-depthcache in *.???? seconds (6r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (6r) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obshashcache clean - new markers affect 2 changeset and cached ranges (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 2o) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 2/6 mismatch - 1 obshashrange queries in *.???? seconds (glob)
@@ -447,7 +445,7 @@
   * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob)
   * @0000000000000000000000000000000000000000 (*)> -R ../server debugobsolete bbbbbbb2222222222bbbbbbbbbbbbb2222222222 bebd167eb94d257ace0e814aeb98e6972ed2970d exited 0 after *.?? seconds (glob)
   * @0000000000000000000000000000000000000000 (*)> -R server serve --stdio (glob)
-  * @0000000000000000000000000000000000000000 (*)> obshashcache clean - new markers affect 2 changeset and cached ranges (glob)
+  1970/01/01 00:00:00 * @0000000000000000000000000000000000000000 (*)> obshashcache clean - new markers affect 2 changeset and cached ranges (glob)
   * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 2o) (glob)
   * @0000000000000000000000000000000000000000 (*)> -R server serve --stdio exited 0 after *.?? seconds (glob)
   * @0000000000000000000000000000000000000000 (*)> -R ../server blackbox (glob)
@@ -468,10 +466,6 @@
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> log -G (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> log -G exited 0 after *.?? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull -r 6 (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-stablerange-mergepoint cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-depthcache cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-depthcache in *.???? seconds (6r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (6r) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 2/6 mismatch - 1 obshashrange queries in *.???? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated served branch cache in *.???? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> wrote served branch cache with 1 labels and 2 nodes (glob)
@@ -549,39 +543,73 @@
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobsolete --rev ::6 exited 0 after *.?? seconds (glob) (windows !)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' (glob) (no-windows !)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev "heads(all())" (glob) (windows !)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-stablerange-mergepoint cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-depthcache cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-depthcache in *.???? seconds (8r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (8r) (glob)
+  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev "heads(all())" exited 0 after *.?? seconds (glob) (windows !)
+  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev "desc(\"r3\")" (glob) (windows !)
+  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev "desc(\"r3\")" exited 0 after *.?? seconds (glob) (windows !)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-depthcache in *.???? seconds (2r) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (2r) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obshashcache clean - new markers affect 2 changeset and cached ranges (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (2r, 3o) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablesort in *.???? seconds (2r) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-firstmerge in *.???? seconds (2r) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' exited 0 after *.?? seconds (glob) (no-windows !)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev "heads(all())" exited 0 after *.?? seconds (glob) (windows !)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull -r f69452c5b1af6cbaaa56ef50cf94fff5bcc6ca23 (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-stablerange-mergepoint cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-depthcache cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-depthcache in *.???? seconds (8r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (8r) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 2/7 mismatch - 1 obshashrange queries in *.???? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (0r, 2o) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull -r f69452c5b1af6cbaaa56ef50cf94fff5bcc6ca23 exited 0 after *.?? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'desc("r3")' (glob) (no-windows !)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev "desc(\"r3\")" (glob) (windows !)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-stablerange-mergepoint cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-depthcache cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-depthcache in *.???? seconds (8r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (8r) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obshashcache clean - new markers affect 2 changeset and cached ranges (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 2o) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'desc("r3")' exited 0 after *.?? seconds (glob) (no-windows !)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev "desc(\"r3\")" exited 0 after *.?? seconds (glob) (windows !)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> blackbox (glob)
   $ rm .hg/blackbox.log
 
-Adding prune markers on existing changeset
-------------------------------------------
+Adding markers affecting existing changeset
+-------------------------------------------
+
+Simple prune marker
 
+  $ hg debugobshashrange -R ../server --subranges --rev 'heads(all())'
+           rev         node        index         size        depth      obshash
+             7 4de32a90b66c            0            8            8 3e1f959425c6
+             8 45f8b879de92            0            6            6 b405cb0bdc2b
+             3 2dc09a01254d            0            4            4 8932bf980bb4
+             7 4de32a90b66c            4            4            8 5a7179ca8e73
+             3 2dc09a01254d            2            2            4 ce1937ca1278
+             8 45f8b879de92            4            2            6 9c26c72819c0
+             7 4de32a90b66c            6            2            8 033544c939f0
+             1 66f7d451a68b            0            2            2 327c7dd73d29
+             5 c8d03c1b5e94            4            2            6 ec8a3e92c525
+             2 01241442b3c2            2            1            3 1ed3c61fb39a
+             0 1ea73414a91b            0            1            1 000000000000
+             3 2dc09a01254d            3            1            4 26f996446ecb
+             8 45f8b879de92            5            1            6 1a0c08180b65
+             7 4de32a90b66c            7            1            8 033544c939f0
+             1 66f7d451a68b            1            1            2 327c7dd73d29
+             4 bebd167eb94d            4            1            5 20a2cc572e4b
+             5 c8d03c1b5e94            5            1            6 446c2dc3bce5
+             6 f69452c5b1af            6            1            7 000000000000
   $ hg -R ../server debugobsolete --record-parents `getid 'desc(foo)'`
+  $ hg debugobshashrange -R ../server --subranges --rev 'heads(all())'
+           rev         node        index         size        depth      obshash
+             7 4de32a90b66c            0            8            8 c7f1f7e9925b
+             8 45f8b879de92            0            6            6 7c49a958a9ac
+             3 2dc09a01254d            0            4            4 8932bf980bb4
+             7 4de32a90b66c            4            4            8 c681c3e58c27
+             3 2dc09a01254d            2            2            4 ce1937ca1278
+             8 45f8b879de92            4            2            6 c6795525c540
+             7 4de32a90b66c            6            2            8 033544c939f0
+             1 66f7d451a68b            0            2            2 327c7dd73d29
+             5 c8d03c1b5e94            4            2            6 89755fd39e6d
+             2 01241442b3c2            2            1            3 1ed3c61fb39a
+             0 1ea73414a91b            0            1            1 000000000000
+             3 2dc09a01254d            3            1            4 26f996446ecb
+             8 45f8b879de92            5            1            6 796507769034
+             7 4de32a90b66c            7            1            8 033544c939f0
+             1 66f7d451a68b            1            1            2 327c7dd73d29
+             4 bebd167eb94d            4            1            5 b21465ecb790
+             5 c8d03c1b5e94            5            1            6 446c2dc3bce5
+             6 f69452c5b1af            6            1            7 000000000000
   $ hg pull -r `getid 'desc(r4)'`
   pulling from ssh://user@dummy/server
   no changes found
@@ -590,10 +618,6 @@
   1 new obsolescence markers
   $ hg blackbox
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull -r bebd167eb94d257ace0e814aeb98e6972ed2970d (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-stablerange-mergepoint cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-depthcache cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-depthcache in *.???? seconds (8r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (8r) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 1/5 mismatch - 1 obshashrange queries in *.???? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull -r bebd167eb94d257ace0e814aeb98e6972ed2970d exited 0 after *.?? seconds (glob)
@@ -618,7 +642,239 @@
              6 c8d03c1b5e94            5            1            6 446c2dc3bce5
              7 f69452c5b1af            6            1            7 000000000000
 
+Stacked prune markers
+
+  $ hg -R ../server --hidden up 'desc(foo)'
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo a > ../server/xhf
+  $ hg -R ../server commit -Am "chain_prune"
+  adding xhf
+  $ hg -R ../server update null
+  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+  $ hg debugobshashrange -R ../server --subranges --rev 'heads(all())'
+           rev         node        index         size        depth      obshash
+             7 4de32a90b66c            0            8            8 c7f1f7e9925b
+             9 09b2e73c5f20            0            7            7 000000000000
+             3 2dc09a01254d            0            4            4 8932bf980bb4
+             7 4de32a90b66c            4            4            8 c681c3e58c27
+             9 09b2e73c5f20            4            3            7 000000000000
+             3 2dc09a01254d            2            2            4 ce1937ca1278
+             8 45f8b879de92            4            2            6 c6795525c540
+             7 4de32a90b66c            6            2            8 033544c939f0
+             1 66f7d451a68b            0            2            2 327c7dd73d29
+             5 c8d03c1b5e94            4            2            6 89755fd39e6d
+             2 01241442b3c2            2            1            3 1ed3c61fb39a
+             9 09b2e73c5f20            6            1            7 000000000000
+             0 1ea73414a91b            0            1            1 000000000000
+             3 2dc09a01254d            3            1            4 26f996446ecb
+             8 45f8b879de92            5            1            6 796507769034
+             7 4de32a90b66c            7            1            8 033544c939f0
+             1 66f7d451a68b            1            1            2 327c7dd73d29
+             4 bebd167eb94d            4            1            5 b21465ecb790
+             5 c8d03c1b5e94            5            1            6 446c2dc3bce5
+             6 f69452c5b1af            6            1            7 000000000000
+  $ hg -R ../server debugobsolete --record-parents `(cd ../server/; getid 'desc("chain_prune")')`
+  obsoleted 1 changesets
+  $ hg debugobshashrange -R ../server --subranges --rev 'heads(all())'
+           rev         node        index         size        depth      obshash
+             7 4de32a90b66c            0            8            8 f966d46c2069
+             8 45f8b879de92            0            6            6 c9ee11811914
+             3 2dc09a01254d            0            4            4 8932bf980bb4
+             7 4de32a90b66c            4            4            8 542cc6dd4c67
+             3 2dc09a01254d            2            2            4 ce1937ca1278
+             8 45f8b879de92            4            2            6 b5d53b723b2e
+             7 4de32a90b66c            6            2            8 033544c939f0
+             1 66f7d451a68b            0            2            2 327c7dd73d29
+             5 c8d03c1b5e94            4            2            6 b0302c7614fb
+             2 01241442b3c2            2            1            3 1ed3c61fb39a
+             0 1ea73414a91b            0            1            1 000000000000
+             3 2dc09a01254d            3            1            4 26f996446ecb
+             8 45f8b879de92            5            1            6 78e8071e893a
+             7 4de32a90b66c            7            1            8 033544c939f0
+             1 66f7d451a68b            1            1            2 327c7dd73d29
+             4 bebd167eb94d            4            1            5 9b4a136d1137
+             5 c8d03c1b5e94            5            1            6 446c2dc3bce5
+             6 f69452c5b1af            6            1            7 000000000000
+  $ hg debugobshashrange -R ../server --subranges --rev 'heads(all())' --hidden
+           rev         node        index         size        depth      obshash
+             7 4de32a90b66c            0            8            8 f966d46c2069
+             9 09b2e73c5f20            0            7            7 be139f5b4d01
+             3 2dc09a01254d            0            4            4 8932bf980bb4
+             7 4de32a90b66c            4            4            8 542cc6dd4c67
+             9 09b2e73c5f20            4            3            7 7a88eb008295
+             3 2dc09a01254d            2            2            4 ce1937ca1278
+             8 45f8b879de92            4            2            6 b5d53b723b2e
+             7 4de32a90b66c            6            2            8 033544c939f0
+             1 66f7d451a68b            0            2            2 327c7dd73d29
+             5 c8d03c1b5e94            4            2            6 b0302c7614fb
+             2 01241442b3c2            2            1            3 1ed3c61fb39a
+             9 09b2e73c5f20            6            1            7 3339d42d829e
+             0 1ea73414a91b            0            1            1 000000000000
+             3 2dc09a01254d            3            1            4 26f996446ecb
+             8 45f8b879de92            5            1            6 78e8071e893a
+             7 4de32a90b66c            7            1            8 033544c939f0
+             1 66f7d451a68b            1            1            2 327c7dd73d29
+             4 bebd167eb94d            4            1            5 9b4a136d1137
+             5 c8d03c1b5e94            5            1            6 446c2dc3bce5
+             6 f69452c5b1af            6            1            7 000000000000
+  $ hg pull -r `getid 'desc(r4)'`
+  pulling from ssh://user@dummy/server
+  no changes found
+  OBSEXC: looking for common markers in 5 nodes
+  OBSEXC: request obsmarkers for 1 common nodes
+  1 new obsolescence markers
+  $ hg blackbox
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obshashcache clean - new markers affect 2 changeset and cached ranges (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 1o) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' exited 0 after *.?? seconds (glob)
+  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull -r bebd167eb94d257ace0e814aeb98e6972ed2970d (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 1/5 mismatch - 1 obshashrange queries in *.???? seconds (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob)
+  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull -r bebd167eb94d257ace0e814aeb98e6972ed2970d exited 0 after *.?? seconds (glob)
+  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> blackbox (glob)
+  $ rm .hg/blackbox.log
+  $ hg debugobshashrange --subranges --rev 'heads(all())'
+           rev         node        index         size        depth      obshash
+             7 f69452c5b1af            0            7            7 000000000000
+             5 45f8b879de92            0            6            6 c9ee11811914
+             3 2dc09a01254d            0            4            4 8932bf980bb4
+             7 f69452c5b1af            4            3            7 000000000000
+             3 2dc09a01254d            2            2            4 ce1937ca1278
+             5 45f8b879de92            4            2            6 b5d53b723b2e
+             1 66f7d451a68b            0            2            2 327c7dd73d29
+             6 c8d03c1b5e94            4            2            6 b0302c7614fb
+             2 01241442b3c2            2            1            3 1ed3c61fb39a
+             0 1ea73414a91b            0            1            1 000000000000
+             3 2dc09a01254d            3            1            4 26f996446ecb
+             5 45f8b879de92            5            1            6 78e8071e893a
+             1 66f7d451a68b            1            1            2 327c7dd73d29
+             4 bebd167eb94d            4            1            5 9b4a136d1137
+             6 c8d03c1b5e94            5            1            6 446c2dc3bce5
+             7 f69452c5b1af            6            1            7 000000000000
+
+New marker prefixed to another one
+
+  $ hg -R ../server debugobsolete aaaa4444444444444444aaaaaaaaaaaaaaaaaaaa `(cd ../server/; getid 'desc("chain_prune")')`
+  $ hg debugobshashrange -R ../server --subranges --rev 'heads(all())'
+           rev         node        index         size        depth      obshash
+             7 4de32a90b66c            0            8            8 0ffc0013bda0
+             8 45f8b879de92            0            6            6 0ffa86a0054f
+             3 2dc09a01254d            0            4            4 8932bf980bb4
+             7 4de32a90b66c            4            4            8 207792ae6aeb
+             3 2dc09a01254d            2            2            4 ce1937ca1278
+             8 45f8b879de92            4            2            6 a3de812028fa
+             7 4de32a90b66c            6            2            8 033544c939f0
+             1 66f7d451a68b            0            2            2 327c7dd73d29
+             5 c8d03c1b5e94            4            2            6 e94b0f268773
+             2 01241442b3c2            2            1            3 1ed3c61fb39a
+             0 1ea73414a91b            0            1            1 000000000000
+             3 2dc09a01254d            3            1            4 26f996446ecb
+             8 45f8b879de92            5            1            6 e765ea1567b3
+             7 4de32a90b66c            7            1            8 033544c939f0
+             1 66f7d451a68b            1            1            2 327c7dd73d29
+             4 bebd167eb94d            4            1            5 8e945c34a0fd
+             5 c8d03c1b5e94            5            1            6 446c2dc3bce5
+             6 f69452c5b1af            6            1            7 000000000000
+
+  $ hg pull -r `getid 'desc(r4)'`
+  pulling from ssh://user@dummy/server
+  no changes found
+  OBSEXC: looking for common markers in 5 nodes
+  OBSEXC: request obsmarkers for 1 common nodes
+  1 new obsolescence markers
+  $ hg blackbox
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obshashcache clean - new markers affect 2 changeset and cached ranges (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 1o) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' exited 0 after *.?? seconds (glob)
+  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull -r bebd167eb94d257ace0e814aeb98e6972ed2970d (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 1/5 mismatch - 1 obshashrange queries in *.???? seconds (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob)
+  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull -r bebd167eb94d257ace0e814aeb98e6972ed2970d exited 0 after *.?? seconds (glob)
+  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> blackbox (glob)
+  $ rm .hg/blackbox.log
+  $ hg debugobshashrange --subranges --rev 'heads(all())'
+           rev         node        index         size        depth      obshash
+             7 f69452c5b1af            0            7            7 000000000000
+             5 45f8b879de92            0            6            6 0ffa86a0054f
+             3 2dc09a01254d            0            4            4 8932bf980bb4
+             7 f69452c5b1af            4            3            7 000000000000
+             3 2dc09a01254d            2            2            4 ce1937ca1278
+             5 45f8b879de92            4            2            6 a3de812028fa
+             1 66f7d451a68b            0            2            2 327c7dd73d29
+             6 c8d03c1b5e94            4            2            6 e94b0f268773
+             2 01241442b3c2            2            1            3 1ed3c61fb39a
+             0 1ea73414a91b            0            1            1 000000000000
+             3 2dc09a01254d            3            1            4 26f996446ecb
+             5 45f8b879de92            5            1            6 e765ea1567b3
+             1 66f7d451a68b            1            1            2 327c7dd73d29
+             4 bebd167eb94d            4            1            5 8e945c34a0fd
+             6 c8d03c1b5e94            5            1            6 446c2dc3bce5
+             7 f69452c5b1af            6            1            7 000000000000
+
+New prune marker prefixed to another one
+
+  $ hg -R ../server debugobsolete aaaa4444444444444444aaaaaaaaaaaaaaaaaaaa
+  $ hg debugobshashrange -R ../server --subranges --rev 'heads(all())'
+           rev         node        index         size        depth      obshash
+             7 4de32a90b66c            0            8            8 87b2a11bd884
+             8 45f8b879de92            0            6            6 fdbbaec33b20
+             3 2dc09a01254d            0            4            4 8932bf980bb4
+             7 4de32a90b66c            4            4            8 20745010e1d8
+             3 2dc09a01254d            2            2            4 ce1937ca1278
+             8 45f8b879de92            4            2            6 f45551c1cf4f
+             7 4de32a90b66c            6            2            8 033544c939f0
+             1 66f7d451a68b            0            2            2 327c7dd73d29
+             5 c8d03c1b5e94            4            2            6 149be75f95c0
+             2 01241442b3c2            2            1            3 1ed3c61fb39a
+             0 1ea73414a91b            0            1            1 000000000000
+             3 2dc09a01254d            3            1            4 26f996446ecb
+             8 45f8b879de92            5            1            6 51df11ea9843
+             7 4de32a90b66c            7            1            8 033544c939f0
+             1 66f7d451a68b            1            1            2 327c7dd73d29
+             4 bebd167eb94d            4            1            5 42574a82229f
+             5 c8d03c1b5e94            5            1            6 446c2dc3bce5
+             6 f69452c5b1af            6            1            7 000000000000
+
+  $ hg pull -r `getid 'desc(r4)'`
+  pulling from ssh://user@dummy/server
+  no changes found
+  OBSEXC: looking for common markers in 5 nodes
+  OBSEXC: request obsmarkers for 1 common nodes
+  1 new obsolescence markers
+  $ hg blackbox
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obshashcache clean - new markers affect 2 changeset and cached ranges (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 1o) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' exited 0 after *.?? seconds (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull -r bebd167eb94d257ace0e814aeb98e6972ed2970d (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 1/5 mismatch - 1 obshashrange queries in *.???? seconds (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob)
+  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull -r bebd167eb94d257ace0e814aeb98e6972ed2970d exited 0 after *.?? seconds (glob)
+  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> blackbox (glob)
+  $ rm .hg/blackbox.log
+  $ hg debugobshashrange --subranges --rev 'heads(all())'
+           rev         node        index         size        depth      obshash
+             7 f69452c5b1af            0            7            7 000000000000
+             5 45f8b879de92            0            6            6 fdbbaec33b20
+             3 2dc09a01254d            0            4            4 8932bf980bb4
+             7 f69452c5b1af            4            3            7 000000000000
+             3 2dc09a01254d            2            2            4 ce1937ca1278
+             5 45f8b879de92            4            2            6 f45551c1cf4f
+             1 66f7d451a68b            0            2            2 327c7dd73d29
+             6 c8d03c1b5e94            4            2            6 149be75f95c0
+             2 01241442b3c2            2            1            3 1ed3c61fb39a
+             0 1ea73414a91b            0            1            1 000000000000
+             3 2dc09a01254d            3            1            4 26f996446ecb
+             5 45f8b879de92            5            1            6 51df11ea9843
+             1 66f7d451a68b            1            1            2 327c7dd73d29
+             4 bebd167eb94d            4            1            5 42574a82229f
+             6 c8d03c1b5e94            5            1            6 446c2dc3bce5
+             7 f69452c5b1af            6            1            7 000000000000
+
 Recover after rollback
+----------------------
 
   $ hg pull
   pulling from ssh://user@dummy/server
@@ -636,57 +892,41 @@
   $ hg blackbox
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' (glob) (no-windows !)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev "heads(all())" (glob) (windows !)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-stablerange-mergepoint cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-depthcache cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-depthcache in *.???? seconds (8r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (8r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obshashcache clean - new markers affect 1 changeset and cached ranges (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 1o) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' exited 0 after *.?? seconds (glob) (no-windows !)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev "heads(all())" exited 0 after *.?? seconds (glob) (windows !)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obshashcache clean - new markers affect 2 changeset and cached ranges (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 1o) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' exited 0 after *.?? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-stablerange-mergepoint cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-depthcache cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-depthcache in *.???? seconds (8r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (8r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 0/8 mismatch - 1 obshashrange queries in *.???? seconds (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 0/8 mismatch - 1 obshashrange queries in *.???? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated served branch cache in *.???? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> wrote served branch cache with 1 labels and 2 nodes (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (1r, 1o) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> 1 incoming changes - new heads: 4de32a90b66c (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (1r, 1o) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> 1 incoming changes - new heads: 4de32a90b66c (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull exited 0 after *.?? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> rollback (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-stablerange-mergepoint cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-depthcache cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-depthcache in *.???? seconds (8r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (8r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-firstmerge cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-firstmerge in *.???? seconds (8r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-stablesort cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablesort in *.???? seconds (8r) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated base branch cache in *.???? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> wrote base branch cache with 1 labels and 2 nodes (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-obscache cache reset (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (8r, 12o) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (8r, 15o) (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> rollback exited 0 after *.?? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> blackbox (glob)
   $ rm .hg/blackbox.log
   $ hg debugobshashrange --subranges --rev 'heads(all())'
            rev         node        index         size        depth      obshash
              7 f69452c5b1af            0            7            7 000000000000
-             5 45f8b879de92            0            6            6 7c49a958a9ac
+             5 45f8b879de92            0            6            6 fdbbaec33b20
              3 2dc09a01254d            0            4            4 8932bf980bb4
              7 f69452c5b1af            4            3            7 000000000000
              3 2dc09a01254d            2            2            4 ce1937ca1278
-             5 45f8b879de92            4            2            6 c6795525c540
+             5 45f8b879de92            4            2            6 f45551c1cf4f
              1 66f7d451a68b            0            2            2 327c7dd73d29
-             6 c8d03c1b5e94            4            2            6 89755fd39e6d
+             6 c8d03c1b5e94            4            2            6 149be75f95c0
              2 01241442b3c2            2            1            3 1ed3c61fb39a
              0 1ea73414a91b            0            1            1 000000000000
              3 2dc09a01254d            3            1            4 26f996446ecb
-             5 45f8b879de92            5            1            6 796507769034
+             5 45f8b879de92            5            1            6 51df11ea9843
              1 66f7d451a68b            1            1            2 327c7dd73d29
-             4 bebd167eb94d            4            1            5 b21465ecb790
+             4 bebd167eb94d            4            1            5 42574a82229f
              6 c8d03c1b5e94            5            1            6 446c2dc3bce5
              7 f69452c5b1af            6            1            7 000000000000
   $ hg pull
@@ -706,30 +946,30 @@
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' exited 0 after *.?? seconds (glob) (no-windows !)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev "heads(all())" exited 0 after *.?? seconds (glob) (windows !)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 0/8 mismatch - 1 obshashrange queries in *.???? seconds (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (1r, 1o) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> 1 incoming changes - new heads: 4de32a90b66c (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 0/8 mismatch - 1 obshashrange queries in *.???? seconds (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (1r, 1o) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> 1 incoming changes - new heads: 4de32a90b66c (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull exited 0 after *.?? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> blackbox (glob)
   $ rm .hg/blackbox.log
   $ hg debugobshashrange --subranges --rev 'heads(all())'
            rev         node        index         size        depth      obshash
-             8 4de32a90b66c            0            8            8 c7f1f7e9925b
-             5 45f8b879de92            0            6            6 7c49a958a9ac
+             8 4de32a90b66c            0            8            8 87b2a11bd884
+             5 45f8b879de92            0            6            6 fdbbaec33b20
              3 2dc09a01254d            0            4            4 8932bf980bb4
-             8 4de32a90b66c            4            4            8 c681c3e58c27
+             8 4de32a90b66c            4            4            8 20745010e1d8
              3 2dc09a01254d            2            2            4 ce1937ca1278
-             5 45f8b879de92            4            2            6 c6795525c540
+             5 45f8b879de92            4            2            6 f45551c1cf4f
              8 4de32a90b66c            6            2            8 033544c939f0
              1 66f7d451a68b            0            2            2 327c7dd73d29
-             6 c8d03c1b5e94            4            2            6 89755fd39e6d
+             6 c8d03c1b5e94            4            2            6 149be75f95c0
              2 01241442b3c2            2            1            3 1ed3c61fb39a
              0 1ea73414a91b            0            1            1 000000000000
              3 2dc09a01254d            3            1            4 26f996446ecb
-             5 45f8b879de92            5            1            6 796507769034
+             5 45f8b879de92            5            1            6 51df11ea9843
              8 4de32a90b66c            7            1            8 033544c939f0
              1 66f7d451a68b            1            1            2 327c7dd73d29
-             4 bebd167eb94d            4            1            5 b21465ecb790
+             4 bebd167eb94d            4            1            5 42574a82229f
              6 c8d03c1b5e94            5            1            6 446c2dc3bce5
              7 f69452c5b1af            6            1            7 000000000000
 
@@ -759,7 +999,7 @@
   
   $ hg --config extensions.strip= strip -r 'desc("foo")'
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  saved backup bundle to $TESTTMP/client/.hg/strip-backup/45f8b879de92-94c82517-backup.hg (glob)
+  saved backup bundle to $TESTTMP/client/.hg/strip-backup/45f8b879de92-94c82517-backup.hg
   $ hg log -G
   o  7 4de32a90b66c r7 tip
   |
@@ -786,7 +1026,7 @@
   adding manifests
   adding file changes
   added 1 changesets with 1 changes to 1 files (+1 heads)
-  2 new obsolescence markers
+  5 new obsolescence markers
   new changesets 45f8b879de92
   (run 'hg heads' to see heads, 'hg merge' to merge)
   $ hg log -G
@@ -812,43 +1052,45 @@
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' (glob) (no-windows !)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev "heads(all())" (glob) (windows !)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> writing .hg/cache/tags2-visible with 0 tags (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-depthcache in *.???? seconds (1r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (1r) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (1r, 1o) (glob)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' exited 0 after *.?? seconds (glob) (no-windows !)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev "heads(all())" exited 0 after *.?? seconds (glob) (windows !)
+  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> --config "extensions.strip=" strip -r "desc(\"foo\")" (glob) (windows !)
+  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> --config "extensions.strip=" strip -r "desc(\"foo\")" exited 0 after *.?? seconds (glob) (windows !)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-depthcache in *.???? seconds (1r) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (1r) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (1r, 1o) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-stablesort in *.???? seconds (1r) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-firstmerge in *.???? seconds (1r) (glob)
+  1970/01/01 00:00:00 * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' exited 0 after *.?? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> log -G (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> log -G exited 0 after *.?? seconds (glob)
   * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> --config 'extensions.strip=' strip -r 'desc("foo")' (glob) (no-windows !)
-  * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> --config "extensions.strip=" strip -r "desc(\"foo\")" (glob) (windows !)
-  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> saved backup bundle to $TESTTMP/client/.hg/strip-backup/45f8b879de92-94c82517-backup.hg (glob)
+  1970/01/01 00:00:00 * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> saved backup bundle to $TESTTMP/client/.hg/strip-backup/45f8b879de92-94c82517-backup.hg (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> strip detected, evo-ext-obscache cache reset (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obscache in *.???? seconds (5r, 11o) (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obscache in *.???? seconds (3r, 0o) (glob)
-  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> strip detected, evo-ext-obshashrange cache reset (glob)
+  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> strip detected, evo-ext-firstmerge cache reset (glob)
+  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-firstmerge in *.???? seconds (8r) (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> strip detected, evo-ext-depthcache cache reset (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-depthcache in *.???? seconds (8r) (glob)
+  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> strip detected, evo-ext-stablesort cache reset (glob)
+  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-stablesort in *.???? seconds (8r) (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> strip detected, evo-ext-stablerange-mergepoint cache reset (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-stablerange-mergepoint in *.???? seconds (8r) (glob)
-  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obshashrange in *.???? seconds (8r, 11o) (glob)
-  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> strip detected, evo-ext-firstmerge cache reset (glob)
-  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-firstmerge in *.???? seconds (8r) (glob)
-  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> strip detected, evo-ext-stablesort cache reset (glob)
-  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-stablesort in *.???? seconds (8r) (glob)
+  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> strip detected, evo-ext-obshashrange cache reset (glob)
+  1970/01/01 00:00:00 * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obshashrange in *.???? seconds (8r, 11o) (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated base branch cache in *.???? seconds (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> wrote base branch cache with 1 labels and 1 nodes (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> 3 incoming changes - new heads: 4de32a90b66c (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> --config 'extensions.strip=' strip -r 'desc("foo")' exited 0 after *.?? seconds (glob) (no-windows !)
-  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> --config "extensions.strip=" strip -r "desc(\"foo\")" exited 0 after *.?? seconds (glob) (windows !)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> log -G (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> writing .hg/cache/tags2-visible with 0 tags (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> log -G exited 0 after *.?? seconds (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> pull (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> obsdiscovery, 1/8 mismatch - 1 obshashrange queries in *.???? seconds (glob)
-  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated base branch cache in *.???? seconds (glob)
-  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> wrote base branch cache with 1 labels and 2 nodes (glob)
-  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obscache in *.???? seconds (1r, 2o) (glob)
-  * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> 1 incoming changes - new heads: 45f8b879de92 (glob)
+  1970/01/01 00:00:00 * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated base branch cache in *.???? seconds (glob)
+  1970/01/01 00:00:00 * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> wrote base branch cache with 1 labels and 2 nodes (glob)
+  1970/01/01 00:00:00 * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obscache in *.???? seconds (1r, 5o) (glob)
+  1970/01/01 00:00:00 * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> 1 incoming changes - new heads: 45f8b879de92 (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> pull exited 0 after *.?? seconds (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> log -G (glob)
   * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> writing .hg/cache/tags2-visible with 0 tags (glob)
@@ -857,22 +1099,22 @@
   $ rm .hg/blackbox.log
   $ hg debugobshashrange --subranges --rev 'heads(all())'
            rev         node        index         size        depth      obshash
-             7 4de32a90b66c            0            8            8 c7f1f7e9925b
-             8 45f8b879de92            0            6            6 7c49a958a9ac
+             7 4de32a90b66c            0            8            8 87b2a11bd884
+             8 45f8b879de92            0            6            6 fdbbaec33b20
              3 2dc09a01254d            0            4            4 8932bf980bb4
-             7 4de32a90b66c            4            4            8 c681c3e58c27
+             7 4de32a90b66c            4            4            8 20745010e1d8
              3 2dc09a01254d            2            2            4 ce1937ca1278
-             8 45f8b879de92            4            2            6 c6795525c540
+             8 45f8b879de92            4            2            6 f45551c1cf4f
              7 4de32a90b66c            6            2            8 033544c939f0
              1 66f7d451a68b            0            2            2 327c7dd73d29
-             5 c8d03c1b5e94            4            2            6 89755fd39e6d
+             5 c8d03c1b5e94            4            2            6 149be75f95c0
              2 01241442b3c2            2            1            3 1ed3c61fb39a
              0 1ea73414a91b            0            1            1 000000000000
              3 2dc09a01254d            3            1            4 26f996446ecb
-             8 45f8b879de92            5            1            6 796507769034
+             8 45f8b879de92            5            1            6 51df11ea9843
              7 4de32a90b66c            7            1            8 033544c939f0
              1 66f7d451a68b            1            1            2 327c7dd73d29
-             4 bebd167eb94d            4            1            5 b21465ecb790
+             4 bebd167eb94d            4            1            5 42574a82229f
              5 c8d03c1b5e94            5            1            6 446c2dc3bce5
              6 f69452c5b1af            6            1            7 000000000000
 
--- a/tests/test-evolve-abort-contentdiv.t	Fri Aug 03 00:19:45 2018 +0200
+++ b/tests/test-evolve-abort-contentdiv.t	Tue Aug 21 13:25:28 2018 +0200
@@ -96,6 +96,22 @@
   # To stop:        hg evolve --stop
   # (also see `hg help evolve.interrupted`)
   
+  $ hg parents
+  changeset:   6:9c1631e352d9
+  tag:         tip
+  parent:      3:ca1b80f7960a
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  instability: content-divergent
+  summary:     added d
+  
+  changeset:   5:e49523854bc8
+  parent:      3:ca1b80f7960a
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  instability: content-divergent
+  summary:     added d
+  
 
   $ hg evolve --abort
   evolve aborted
--- a/tests/test-evolve-abort-orphan.t	Fri Aug 03 00:19:45 2018 +0200
+++ b/tests/test-evolve-abort-orphan.t	Tue Aug 21 13:25:28 2018 +0200
@@ -88,6 +88,21 @@
   fix conflicts and see `hg help evolve.interrupted`
   [1]
 
+  $ hg parents
+  changeset:   5:e93a9161a274
+  tag:         tip
+  parent:      2:b1661037fa25
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  summary:     added c
+  
+  changeset:   4:c41c793e0ef1
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  instability: orphan
+  summary:     added d
+  
+
   $ hg evolve --abort
   evolve aborted
   working directory is now at e93a9161a274
@@ -173,7 +188,7 @@
   |   () draft
   | *  6:e83de241f751 added d
   | |   () draft
-  | *  5:e93a9161a274 added c
+  | @  5:e93a9161a274 added c
   | |   () draft
   | x  2:b1661037fa25 added b
   | |   () draft
@@ -266,7 +281,7 @@
   |/    () draft
   @  7:807e8e2ca559 added a
   |   () draft
-  | *  6:8f20d4390c21 foo to a
+  | @  6:8f20d4390c21 foo to a
   | |   () draft
   | | *  5:bcb1c47f8520 added d
   | | |   () draft
@@ -329,7 +344,7 @@
   |/    () draft
   @  7:807e8e2ca559 added a
   |   () draft
-  | *  6:8f20d4390c21 foo to a
+  | @  6:8f20d4390c21 foo to a
   | |   () draft
   | | *  5:bcb1c47f8520 added d
   | | |   () draft
@@ -413,7 +428,7 @@
   |/    () draft
   @  7:807e8e2ca559 added a
   |   () draft
-  | *  6:8f20d4390c21 foo to a
+  | @  6:8f20d4390c21 foo to a
   | |   () draft
   | x  1:2f913b0c9220 added a
   |/    () draft
@@ -481,7 +496,7 @@
   |   (bm1) draft
   o  4:a0086c17bfc7 added a
   |   () draft
-  | *  3:17509928e5bf added c
+  | @  3:17509928e5bf added c
   | |   () draft
   | x  2:9f0c80a55ddc added b
   | |   () draft
@@ -525,3 +540,19 @@
   $ hg evolve --abort
   evolve aborted
   working directory is now at c1f4718020e3
+
+  $ ls .hg/
+  00changelog.i
+  bookmarks
+  branch
+  cache
+  dirstate
+  last-message.txt
+  requires
+  store
+  undo.backup.bookmarks
+  undo.backup.dirstate
+  undo.bookmarks
+  undo.branch
+  undo.desc
+  undo.dirstate
--- a/tests/test-evolve-abort-phasediv.t	Fri Aug 03 00:19:45 2018 +0200
+++ b/tests/test-evolve-abort-phasediv.t	Tue Aug 21 13:25:28 2018 +0200
@@ -108,6 +108,21 @@
   # (also see `hg help evolve.interrupted`)
   
 
+  $ hg parents
+  changeset:   3:ca1b80f7960a
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  summary:     added c
+  
+  changeset:   6:ddba58020bc0
+  tag:         tip
+  parent:      1:c7586e2a9264
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  instability: phase-divergent
+  summary:     added d
+  
+
   $ hg evolve --abort
   evolve aborted
   working directory is now at ddba58020bc0
--- a/tests/test-evolve-phase.t	Fri Aug 03 00:19:45 2018 +0200
+++ b/tests/test-evolve-phase.t	Tue Aug 21 13:25:28 2018 +0200
@@ -103,7 +103,7 @@
   $ hg glog
   @  3 - 87495ea7c9ec b (draft)
   |
-  | *  2 - 13833940840c c (secret)
+  | @  2 - 13833940840c c (secret)
   | |
   | x  1 - 1e6c11564562 b (draft)
   |/
--- a/tests/test-evolve-stop-orphan.t	Fri Aug 03 00:19:45 2018 +0200
+++ b/tests/test-evolve-stop-orphan.t	Tue Aug 21 13:25:28 2018 +0200
@@ -169,6 +169,19 @@
       () draft
 
   $ hg status
+  $ ls .hg/
+  00changelog.i
+  branch
+  cache
+  dirstate
+  last-message.txt
+  requires
+  store
+  undo.backup.dirstate
+  undo.bookmarks
+  undo.branch
+  undo.desc
+  undo.dirstate
 
 Checking when multiple revs need to be evolved, some revs evolve without
 conflicts
--- a/tests/test-evolve.t	Fri Aug 03 00:19:45 2018 +0200
+++ b/tests/test-evolve.t	Tue Aug 21 13:25:28 2018 +0200
@@ -1543,7 +1543,7 @@
   |
   o  37:df89d30f23e2@default(draft) amended
   |
-  | *  36:59c37c5bebd1@default(draft) will cause conflict at evolve
+  | @  36:59c37c5bebd1@default(draft) will cause conflict at evolve
   | |
   | x  35:7cc12c6c7862@default(draft) will be evolved safely
   | |
--- a/tests/test-stabilize-conflict.t	Fri Aug 03 00:19:45 2018 +0200
+++ b/tests/test-stabilize-conflict.t	Tue Aug 21 13:25:28 2018 +0200
@@ -140,7 +140,7 @@
   |  date:        Thu Jan 01 00:00:00 1970 +0000
   |  summary:     babar count up to ten
   |
-  | *  changeset:   4:71c18f70c34f
+  | @  changeset:   4:71c18f70c34f
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
   | |  instability: orphan
@@ -232,7 +232,7 @@
   |  date:        Thu Jan 01 00:00:00 1970 +0000
   |  summary:     babar count up to ten
   |
-  | *  changeset:   6:1836b91c6c1d
+  | @  changeset:   6:1836b91c6c1d
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
   | |  instability: orphan