changeset 2853:cec3d2ea2eeb

merge with stable
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 23 Aug 2017 23:44:36 +0200
parents a13acecbc850 (diff) 0d16c89aa185 (current diff)
children 66796d7b5415
files
diffstat 32 files changed, 513 insertions(+), 383 deletions(-) [+]
line wrap: on
line diff
--- a/hgext3rd/evolve/__init__.py	Mon Aug 21 14:21:49 2017 +0200
+++ b/hgext3rd/evolve/__init__.py	Wed Aug 23 23:44:36 2017 +0200
@@ -489,9 +489,9 @@
     """
     revset.getargs(x, 0, 0, 'troubled takes no arguments')
     troubled = set()
-    troubled.update(getrevs(repo, 'unstable'))
-    troubled.update(getrevs(repo, 'bumped'))
-    troubled.update(getrevs(repo, 'divergent'))
+    troubled.update(getrevs(repo, 'orphan'))
+    troubled.update(getrevs(repo, 'phasedivergent'))
+    troubled.update(getrevs(repo, 'contentdivergent'))
     troubled = revset.baseset(troubled)
     troubled.sort() # set is non-ordered, enforce order
     return subset & troubled
@@ -504,7 +504,7 @@
     """Precursor of a changeset"""
     cs = set()
     nm = repo.changelog.nodemap
-    markerbysubj = repo.obsstore.precursors
+    markerbysubj = repo.obsstore.predecessors
     node = repo.changelog.node
     for r in s:
         for p in markerbysubj.get(node(r), ()):
@@ -519,7 +519,7 @@
     node = repo.changelog.node
     toproceed = [node(r) for r in s]
     seen = set()
-    allsubjects = repo.obsstore.precursors
+    allsubjects = repo.obsstore.predecessors
     while toproceed:
         nc = toproceed.pop()
         for mark in allsubjects.get(nc, ()):
@@ -670,7 +670,7 @@
     if reason == 'pruned':
         solvemsg = _("use 'hg evolve' to update to its parent successor")
     elif reason == 'diverged':
-        debugcommand = "hg evolve --list --divergent"
+        debugcommand = "hg evolve --list --contentdivergent"
         basemsg = _("%s has diverged, use '%s' to resolve the issue")
         solvemsg = basemsg % (shortnode, debugcommand)
     elif reason == 'superseed':
@@ -759,17 +759,17 @@
     # part of the troubled stuff may be filtered (stash ?)
     # This needs a better implementation but will probably wait for core.
     filtered = repo.changelog.filteredrevs
-    priorunstables = len(set(getrevs(repo, 'unstable')) - filtered)
-    priorbumpeds = len(set(getrevs(repo, 'bumped')) - filtered)
-    priordivergents = len(set(getrevs(repo, 'divergent')) - filtered)
+    priorunstables = len(set(getrevs(repo, 'orphan')) - filtered)
+    priorbumpeds = len(set(getrevs(repo, 'phasedivergent')) - filtered)
+    priordivergents = len(set(getrevs(repo, 'contentdivergent')) - filtered)
     ret = orig(ui, repo, *args, **kwargs)
     filtered = repo.changelog.filteredrevs
     newunstables = \
-        len(set(getrevs(repo, 'unstable')) - filtered) - priorunstables
+        len(set(getrevs(repo, 'orphan')) - filtered) - priorunstables
     newbumpeds = \
-        len(set(getrevs(repo, 'bumped')) - filtered) - priorbumpeds
+        len(set(getrevs(repo, 'phasedivergent')) - filtered) - priorbumpeds
     newdivergents = \
-        len(set(getrevs(repo, 'divergent')) - filtered) - priordivergents
+        len(set(getrevs(repo, 'contentdivergent')) - filtered) - priordivergents
     if newunstables > 0:
         ui.warn(_('%i new unstable changesets\n') % newunstables)
     if newbumpeds > 0:
@@ -993,11 +993,11 @@
         wlock = repo.wlock()
         lock = repo.lock()
         tr = repo.transaction("evolve")
-        if 'unstable' == category:
+        if 'orphan' == category:
             result = _solveunstable(ui, repo, ctx, dryrun, confirm, progresscb)
-        elif 'bumped' == category:
+        elif 'phasedivergent' == category:
             result = _solvebumped(ui, repo, ctx, dryrun, confirm, progresscb)
-        elif 'divergent' == category:
+        elif 'contentdivergent' == category:
             result = _solvedivergent(ui, repo, ctx, dryrun, confirm,
                                      progresscb)
         else:
@@ -1010,37 +1010,44 @@
 def _handlenotrouble(ui, repo, allopt, revopt, anyopt, targetcat):
     """Used by the evolve function to display an error message when
     no troubles can be resolved"""
-    troublecategories = ['bumped', 'divergent', 'unstable']
+    troublecategories = ['phasedivergent', 'contentdivergent', 'orphan']
     unselectedcategories = [c for c in troublecategories if c != targetcat]
     msg = None
     hint = None
 
     troubled = {
-        "unstable": repo.revs("unstable()"),
-        "divergent": repo.revs("divergent()"),
-        "bumped": repo.revs("bumped()"),
+        "orphan": repo.revs("orphan()"),
+        "contentdivergent": repo.revs("contentdivergent()"),
+        "phasedivergent": repo.revs("phasedivergent()"),
         "all": repo.revs("troubled()"),
     }
 
     hintmap = {
-        'bumped': _("do you want to use --bumped"),
-        'bumped+divergent': _("do you want to use --bumped or --divergent"),
-        'bumped+unstable': _("do you want to use --bumped or --unstable"),
-        'divergent': _("do you want to use --divergent"),
-        'divergent+unstable': _("do you want to use --divergent"
-                                " or --unstable"),
-        'unstable': _("do you want to use --unstable"),
-        'any+bumped': _("do you want to use --any (or --rev) and --bumped"),
-        'any+bumped+divergent': _("do you want to use --any (or --rev) and"
-                                  " --bumped or --divergent"),
-        'any+bumped+unstable': _("do you want to use --any (or --rev) and"
-                                 "--bumped or --unstable"),
-        'any+divergent': _("do you want to use --any (or --rev) and"
-                           " --divergent"),
-        'any+divergent+unstable': _("do you want to use --any (or --rev)"
-                                    " and --divergent or --unstable"),
-        'any+unstable': _("do you want to use --any (or --rev)"
-                          "and --unstable"),
+        'phasedivergent': _("do you want to use --phasedivergent"),
+        'phasedivergent+contentdivergent': _("do you want to use "
+                                             "--phasedivergent or"
+                                             " --contentdivergent"),
+        'phasedivergent+orphan': _("do you want to use --phasedivergent"
+                                   " or --orphan"),
+        'contentdivergent': _("do you want to use --contentdivergent"),
+        'contentdivergent+orphan': _("do you want to use --contentdivergent"
+                                     " or --orphan"),
+        'orphan': _("do you want to use --orphan"),
+        'any+phasedivergent': _("do you want to use --any (or --rev) and"
+                                " --phasedivergent"),
+        'any+phasedivergent+contentdivergent': _("do you want to use --any"
+                                                 " (or --rev) and"
+                                                 " --phasedivergent or"
+                                                 " --contentdivergent"),
+        'any+phasedivergent+orphan': _("do you want to use --any (or --rev)"
+                                       " and --phasedivergent or --orphan"),
+        'any+contentdivergent': _("do you want to use --any (or --rev) and"
+                                  " --contentdivergent"),
+        'any+contentdivergent+orphan': _("do you want to use --any (or --rev)"
+                                         " and --contentdivergent or "
+                                         "--orphan"),
+        'any+orphan': _("do you want to use --any (or --rev)"
+                        "and --orphan"),
     }
 
     if revopt:
@@ -1067,7 +1074,7 @@
 
     else:
         # evolve without any option = relative to the current wdir
-        if targetcat == 'unstable':
+        if targetcat == 'orphan':
             msg = _("nothing to evolve on current working copy parent")
         else:
             msg = _("current working copy parent is not %s") % targetcat
@@ -1183,6 +1190,11 @@
         discarded.update(othersrevs)
     return res
 
+instabilities_map = {
+    'contentdivergent': "content-divergent",
+    'phasedivergent': "phase-divergent"
+}
+
 def _selectrevs(repo, allopt, revopt, anyopt, targetcat):
     """select troubles in repo matching according to given options"""
     revs = set()
@@ -1194,23 +1206,23 @@
             topic = getattr(repo, 'currenttopic', '')
             if topic:
                 revs = repo.revs('topic(%s)', topic) & revs
-            elif targetcat == 'unstable':
+            elif targetcat == 'orphan':
                 revs = _aspiringdescendant(repo,
                                            repo.revs('(.::) - obsolete()::'))
                 revs = set(revs)
-        if targetcat == 'divergent':
+        if targetcat == 'contentdivergent':
             # Pick one divergent per group of divergents
             revs = _dedupedivergents(repo, revs)
     elif anyopt:
         revs = repo.revs('first(%s())' % (targetcat))
-    elif targetcat == 'unstable':
+    elif targetcat == 'orphan':
         revs = set(_aspiringchildren(repo, repo.revs('(.::) - obsolete()::')))
         if 1 < len(revs):
             msg = "multiple evolve candidates"
             hint = (_("select one of %s with --rev")
                     % ', '.join([str(repo[r]) for r in sorted(revs)]))
             raise error.Abort(msg, hint=hint)
-    elif targetcat in repo['.'].troubles():
+    elif instabilities_map.get(targetcat, targetcat) in repo['.'].instabilities():
         revs = set([repo['.'].rev()])
     return revs
 
@@ -1287,10 +1299,10 @@
 
 def listtroubles(ui, repo, troublecategories, **opts):
     """Print all the troubles for the repo (or given revset)"""
-    troublecategories = troublecategories or ['divergent', 'unstable', 'bumped']
-    showunstable = 'unstable' in troublecategories
-    showbumped = 'bumped' in troublecategories
-    showdivergent = 'divergent' in troublecategories
+    troublecategories = troublecategories or ['contentdivergent', 'orphan', 'phasedivergent']
+    showunstable = 'orphan' in troublecategories
+    showbumped = 'phasedivergent' in troublecategories
+    showdivergent = 'contentdivergent' in troublecategories
 
     revs = repo.revs('+'.join("%s()" % t for t in troublecategories))
     if opts.get('rev'):
@@ -1299,7 +1311,7 @@
     fm = ui.formatter('evolvelist', opts)
     for rev in revs:
         ctx = repo[rev]
-        unpars = _preparelistctxs(ctx.parents(), lambda p: p.unstable())
+        unpars = _preparelistctxs(ctx.parents(), lambda p: p.orphan())
         obspars = _preparelistctxs(ctx.parents(), lambda p: p.obsolete())
         imprecs = _preparelistctxs(repo.set("allprecursors(%n)", ctx.node()),
                                    lambda p: not p.mutable())
@@ -1317,7 +1329,7 @@
         fm.data(node=ctx.hex(), rev=ctx.rev(), desc=desc, phase=ctx.phasestr())
 
         for unpar in unpars if showunstable else []:
-            fm.plain('  unstable: %s (unstable parent)\n' % unpar[:hashlen])
+            fm.plain('  orphan: %s (orphan parent)\n' % unpar[:hashlen])
         for obspar in obspars if showunstable else []:
             fm.plain('  unstable: %s (obsolete parent)\n' % obspar[:hashlen])
         for imprec in imprecs if showbumped else []:
@@ -1369,8 +1381,11 @@
         'directory')),
      ('r', 'rev', [], _('solves troubles of these revisions')),
      ('', 'bumped', False, _('solves only bumped changesets')),
-     ('', 'divergent', False, _('solves only divergent changesets')),
-     ('', 'unstable', False, _('solves only unstable changesets (default)')),
+     ('', 'phasedivergent', False, _('solves only bumped changesets')),
+     ('', 'divergent', False, _('solves only phasedivergent changesets')),
+     ('', 'contentdivergent', False, _('solves only contentdivergent changesets')),
+     ('', 'unstable', False, _('solves only unstable changesets')),
+     ('', 'orphan', False, _('solves only orphan changesets (default)')),
      ('a', 'all', False, _('evolve all troubled changesets related to the '
                            'current  working directory and its descendants')),
      ('c', 'continue', False, _('continue an interrupted evolution')),
@@ -1457,13 +1472,36 @@
     dryrunopt = opts['dry_run']
     confirmopt = opts['confirm']
     revopt = opts['rev']
-    troublecategories = ['bumped', 'divergent', 'unstable']
+
+    # Backward compatibility
+    if opts['unstable']:
+        msg = ("'evolve --unstable' is deprecated, "
+               "use 'evolve --orphan'")
+        repo.ui.deprecwarn(msg, '4.4')
+
+        opts['orphan'] = opts['divergent']
+
+    if opts['divergent']:
+        msg = ("'evolve --divergent' is deprecated, "
+               "use 'evolve --contentdivergent'")
+        repo.ui.deprecwarn(msg, '4.4')
+
+        opts['contentdivergent'] = opts['divergent']
+
+    if opts['bumped']:
+        msg = ("'evolve --bumped' is deprecated, "
+               "use 'evolve --phasedivergent'")
+        repo.ui.deprecwarn(msg, '4.4')
+
+        opts['phasedivergent'] = opts['bumped']
+
+    troublecategories = ['phasedivergent', 'contentdivergent', 'orphan']
     specifiedcategories = [t for t in troublecategories if opts[t]]
     if listopt:
         listtroubles(ui, repo, specifiedcategories, **opts)
         return
 
-    targetcat = 'unstable'
+    targetcat = 'orphan'
     if 1 < len(specifiedcategories):
         msg = _('cannot specify more than one trouble category to solve (yet)')
         raise error.Abort(msg)
@@ -1543,7 +1581,7 @@
     # For the progress bar to show
     count = len(revs)
     # Order the revisions
-    if targetcat == 'unstable':
+    if targetcat == 'orphan':
         revs = _orderrevs(repo, revs)
     for rev in revs:
         progresscb()
@@ -1580,7 +1618,7 @@
     one of its descendants. Empty list if none can be found."""
     target = set(revs)
     result = []
-    for r in repo.revs('unstable() - %ld', revs):
+    for r in repo.revs('orphan() - %ld', revs):
         dest = _possibledestination(repo, r)
         if target & dest:
             result.append(r)
@@ -1592,7 +1630,7 @@
     target = set(revs)
     result = set(target)
     paths = collections.defaultdict(set)
-    for r in repo.revs('unstable() - %ld', revs):
+    for r in repo.revs('orphan() - %ld', revs):
         for d in _possibledestination(repo, r):
             paths[d].add(r)
 
@@ -2131,7 +2169,7 @@
             else:
                 cmdutil.bailifchanged(repo)
                 result = _solveone(ui, repo, repo[aspchildren[0]], dryrunopt,
-                                   False, lambda: None, category='unstable')
+                                   False, lambda: None, category='orphan')
                 if not result:
                     ui.status(_('working directory now at %s\n')
                               % ui.label(str(repo['.']), 'evolve.node'))
--- a/hgext3rd/evolve/compat.py	Mon Aug 21 14:21:49 2017 +0200
+++ b/hgext3rd/evolve/compat.py	Wed Aug 23 23:44:36 2017 +0200
@@ -7,8 +7,10 @@
 """
 
 from mercurial import (
+    context,
     hg,
     obsolete,
+    revset,
     util,
 )
 
@@ -45,7 +47,7 @@
         pendingnodes = set(nodes)
         seenmarkers = set()
         seennodes = set(pendingnodes)
-        precursorsmarkers = self.precursors
+        precursorsmarkers = self.predecessors
         succsmarkers = self.successors
         children = self.children
         while pendingnodes:
@@ -71,10 +73,13 @@
     return func(*args, **kwargs)
 
 # allprecursors set move from mercurial.obsolete to mercurial.obsutil in 4.3
+# allprecursors  was renamed into allpredecessors in 4.4
 def allprecursors(*args, **kwargs):
-    func = getattr(obsutil, 'allprecursors', None)
+    func = getattr(obsutil, 'allpredecessors', None)
     if func is None:
-        func = obsolete.allprecursors
+        func = getattr(obsutil, 'allprecursors', None)
+        if func is None:
+            func = obsolete.allprecursors
     return func(*args, **kwargs)
 
 # compatibility layer for mercurial < 4.3
@@ -90,3 +95,69 @@
         else:
             bookmarks[name] = node
     bookmarks.recordchange(tr)
+
+# Evolution renaming compat
+
+if not util.safehasattr(context.basectx, 'orphan'):
+    context.basectx.orphan = context.basectx.unstable
+
+if not util.safehasattr(context.basectx, 'contentdivergent'):
+    context.basectx.contentdivergent = context.basectx.divergent
+
+if not util.safehasattr(context.basectx, 'phasedivergent'):
+    context.basectx.phasedivergent = context.basectx.bumped
+
+if not util.safehasattr(context.basectx, 'isunstable'):
+    context.basectx.isunstable = context.basectx.troubled
+
+if not util.safehasattr(revset, 'orphan'):
+    @eh.revset('orphan')
+    def oprhanrevset(*args, **kwargs):
+        return revset.unstable(*args, **kwargs)
+
+if not util.safehasattr(revset, 'contentdivergent'):
+    @eh.revset('contentdivergent')
+    def contentdivergentrevset(*args, **kwargs):
+        return revset.divergent(*args, **kwargs)
+
+if not util.safehasattr(revset, 'phasedivergent'):
+    @eh.revset('phasedivergent')
+    def phasedivergentrevset(*args, **kwargs):
+        return revset.bumped(*args, **kwargs)
+
+if not util.safehasattr(context.basectx, 'instabilities'):
+    def instabilities(self):
+        """return the list of instabilities affecting this changeset.
+
+        Instabilities are returned as strings. possible values are:
+         - orphan,
+         - phase-divergent,
+         - content-divergent.
+         """
+        instabilities = []
+        if self.orphan():
+            instabilities.append('orphan')
+        if self.phasedivergent():
+            instabilities.append('phase-divergent')
+        if self.contentdivergent():
+            instabilities.append('content-divergent')
+        return instabilities
+
+    context.basectx.instabilities = instabilities
+
+# XXX: Better detection of property cache
+if 'predecessors' not in dir(obsolete.obsstore):
+    @property
+    def predecessors(self):
+        return self.precursors
+
+    obsolete.obsstore.predecessors = predecessors
+
+if not util.safehasattr(obsolete, '_computeorphanset'):
+    obsolete._computeorphanset = obsolete.cachefor('orphan')(obsolete._computeunstableset)
+
+if not util.safehasattr(obsolete, '_computecontentdivergentset'):
+    obsolete._computecontentdivergentset = obsolete.cachefor('contentdivergent')(obsolete._computedivergentset)
+
+if not util.safehasattr(obsolete, '_computephasedivergentset'):
+    obsolete._computephasedivergentset = obsolete.cachefor('phasedivergent')(obsolete._computebumpedset)
--- a/hgext3rd/evolve/hack/drophack.py	Mon Aug 21 14:21:49 2017 +0200
+++ b/hgext3rd/evolve/hack/drophack.py	Wed Aug 23 23:44:36 2017 +0200
@@ -50,7 +50,7 @@
     seennodes = set(nodes)
     seenmarkers = set()
     pendingnodes = set(nodes)
-    precursorsmarkers = obsstore.precursors
+    precursorsmarkers = obsstore.predecessors
     while pendingnodes:
         current = pendingnodes.pop()
         new = set()
--- a/hgext3rd/evolve/metadata.py	Mon Aug 21 14:21:49 2017 +0200
+++ b/hgext3rd/evolve/metadata.py	Wed Aug 23 23:44:36 2017 +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__ = '6.6.1.dev'
+__version__ = '6.7.0.dev'
 testedwith = '3.8.4 3.9.2 4.0.2 4.1.3 4.2.2'
 minimumhgversion = '3.8'
 buglink = 'https://bz.mercurial-scm.org/'
--- a/hgext3rd/evolve/obscache.py	Mon Aug 21 14:21:49 2017 +0200
+++ b/hgext3rd/evolve/obscache.py	Wed Aug 23 23:44:36 2017 +0200
@@ -111,21 +111,26 @@
 
     return obsstore
 
-# XXX copied as is from Mercurial 4.2 and added the "offset" parameters
-@util.nogc
-def _readmarkers(data, offset=None):
-    """Read and enumerate markers from raw data"""
-    off = 0
-    diskversion = struct.unpack('>B', data[off:off + 1])[0]
-    if offset is None:
-        off += 1
-    else:
-        assert 1 <= offset
-        off = offset
-    if diskversion not in obsolete.formats:
-        raise error.Abort(_('parsing obsolete marker: unknown version %r')
-                          % diskversion)
-    return diskversion, obsolete.formats[diskversion][0](data, off)
+if obsolete._readmarkers.__code__.co_argcount > 1:
+    # hg-4.3+ has the "offset" parameter, and _fm?readmarkers also have an
+    # extra "stop" parameter
+    _readmarkers = obsolete._readmarkers
+else:
+    # XXX copied as is from Mercurial 4.2 and added the "offset" parameters
+    @util.nogc
+    def _readmarkers(data, offset=None):
+        """Read and enumerate markers from raw data"""
+        off = 0
+        diskversion = struct.unpack('>B', data[off:off + 1])[0]
+        if offset is None:
+            off += 1
+        else:
+            assert 1 <= offset
+            off = offset
+        if diskversion not in obsolete.formats:
+            raise error.Abort(_('parsing obsolete marker: unknown version %r')
+                              % diskversion)
+        return diskversion, obsolete.formats[diskversion][0](data, off)
 
 def markersfrom(obsstore, byteoffset, firstmarker):
     if not firstmarker:
--- a/hgext3rd/evolve/obshistory.py	Mon Aug 21 14:21:49 2017 +0200
+++ b/hgext3rd/evolve/obshistory.py	Wed Aug 23 23:44:36 2017 +0200
@@ -301,7 +301,7 @@
     - The dictionnary of each node successors, values are a set
     - The dictionnary of each node precursors, values are a list
     """
-    precursors = repo.obsstore.precursors
+    precursors = repo.obsstore.predecessors
     successors = repo.obsstore.successors
     nodec = repo.changelog.node
 
@@ -358,7 +358,7 @@
 def _debugobshistoryrevs(fm, repo, revs, opts):
     """ Display the obsolescence history for revset
     """
-    precursors = repo.obsstore.precursors
+    precursors = repo.obsstore.predecessors
     successors = repo.obsstore.successors
     nodec = repo.changelog.node
     unfi = repo.unfiltered()
@@ -460,6 +460,14 @@
             fmteffect = fm.formatlist(effect, 'debugobshistory.effect', sep=', ')
             fm.write('debugobshistory.effect', '(%s)', fmteffect)
 
+    if len(succnodes) > 0:
+        fm.plain(' as ')
+
+        shortsnodes = (nodemod.short(succnode) for succnode in sorted(succnodes))
+        nodes = fm.formatlist(shortsnodes, 'debugobshistory.succnodes', sep=', ')
+        fm.write('debugobshistory.succnodes', '%s', nodes,
+                 label="evolve.node")
+
     fm.plain(' by ')
 
     fm.write('debugobshistory.marker_user', '%s', metadata['user'],
@@ -469,14 +477,6 @@
     fm.write('debugobshistory.marker_date', '(%s)', fm.formatdate(date),
              label="evolve.date")
 
-    if len(succnodes) > 0:
-        fm.plain(' as ')
-
-        shortsnodes = (nodemod.short(succnode) for succnode in sorted(succnodes))
-        nodes = fm.formatlist(shortsnodes, 'debugobshistory.succnodes', sep=', ')
-        fm.write('debugobshistory.succnodes', '%s', nodes,
-                 label="evolve.node")
-
     # Patch display
     if opts.get('patch'):
         _patchavailable = patchavailable(node, repo, marker)
--- a/hgext3rd/evolve/templatekw.py	Mon Aug 21 14:21:49 2017 +0200
+++ b/hgext3rd/evolve/templatekw.py	Wed Aug 23 23:44:36 2017 +0200
@@ -41,17 +41,17 @@
     ctx = args['ctx']
     try:
         # specify plural= explicitly to trigger TypeError on hg < 4.2
-        return templatekw.showlist('trouble', ctx.troubles(), args,
+        return templatekw.showlist('trouble', ctx.instabilities(), args,
                                    plural='troubles')
     except TypeError:
-        return templatekw.showlist('trouble', ctx.troubles(), plural='troubles',
+        return templatekw.showlist('trouble', ctx.instabilities(), plural='troubles',
                                    **args)
 
 def closestprecursors(repo, nodeid):
     """ Yield the list of next precursors pointing on visible changectx nodes
     """
 
-    precursors = repo.obsstore.precursors
+    precursors = repo.obsstore.predecessors
     stack = [nodeid]
 
     while stack:
@@ -138,8 +138,8 @@
     # Assemble them
     return {
         'obsfate_quiet': verbtempl + succtempl,
-        'obsfate': verbtempl + optionalusertempl + succtempl,
-        'obsfate_verbose': verbtempl + usertempl + succtempl + datetempl,
+        'obsfate': verbtempl + succtempl + optionalusertempl,
+        'obsfate_verbose': verbtempl + succtempl + usertempl + datetempl,
     }
 
 def obsfatedata(repo, ctx):
--- a/hgext3rd/topic/__init__.py	Mon Aug 21 14:21:49 2017 +0200
+++ b/hgext3rd/topic/__init__.py	Wed Aug 23 23:44:36 2017 +0200
@@ -118,7 +118,7 @@
               'topic.active': 'green',
              }
 
-___version___ = '0.2.1.dev'
+__version__ = '0.3.0.dev'
 testedwith = '4.0.2 4.1.3 4.2.1'
 minimumhgversion = '4.0'
 buglink = 'https://bz.mercurial-scm.org/'
@@ -356,7 +356,18 @@
             raise error.Abort('changing topic requires a topic name or --clear')
         if any(not c.mutable() for c in repo.set('%r and public()', rev)):
             raise error.Abort("can't change topic of a public change")
-        return _changetopics(ui, repo, rev, topic)
+        wl = l = txn = None
+        try:
+            wl = repo.wlock()
+            l = repo.lock()
+            txn = repo.transaction('rewrite-topics')
+            rewrote = _changetopics(ui, repo, rev, topic)
+            txn.close()
+        finally:
+            lock.release(txn, l, wl)
+            repo.invalidate()
+            ui.status('changed topic on %d changes\n' % rewrote)
+        return
 
     if clear:
         return _changecurrenttopic(repo, None)
@@ -397,72 +408,66 @@
             repo.vfs.unlink('topic')
 
 def _changetopics(ui, repo, revset, newtopic):
+    """ Changes topic to newtopic of all the revisions in the revset and return
+    the count of revisions whose topic has been changed.
+    """
     rewrote = 0
-    wl = l = txn = None
-    try:
-        wl = repo.wlock()
-        l = repo.lock()
-        txn = repo.transaction('rewrite-topics')
-        p1 = None
-        p2 = None
-        successors = {}
-        for c in repo.set('%r', revset):
-            def filectxfn(repo, ctx, path):
-                try:
-                    return c[path]
-                except error.ManifestLookupError:
-                    return None
-            fixedextra = dict(c.extra())
-            ui.debug('old node id is %s\n' % node.hex(c.node()))
-            ui.debug('origextra: %r\n' % fixedextra)
-            oldtopic = fixedextra.get(constants.extrakey, None)
-            if oldtopic == newtopic:
-                continue
-            if newtopic is None:
-                del fixedextra[constants.extrakey]
-            else:
-                fixedextra[constants.extrakey] = newtopic
-            fixedextra[constants.changekey] = c.hex()
-            if 'amend_source' in fixedextra:
-                # TODO: right now the commitctx wrapper in
-                # topicrepo overwrites the topic in extra if
-                # amend_source is set to support 'hg commit
-                # --amend'. Support for amend should be adjusted
-                # to not be so invasive.
-                del fixedextra['amend_source']
-            ui.debug('changing topic of %s from %s to %s\n' % (
-                c, oldtopic, newtopic))
-            ui.debug('fixedextra: %r\n' % fixedextra)
-            # While changing topic of set of linear commits, make sure that
-            # we base our commits on new parent rather than old parent which
-            # was obsoleted while changing the topic
-            p1 = c.p1().node()
-            p2 = c.p2().node()
-            if p1 in successors:
-                p1 = successors[p1]
-            if p2 in successors:
-                p2 = successors[p2]
-            mc = context.memctx(
-                repo, (p1, p2), c.description(),
-                c.files(), filectxfn,
-                user=c.user(), date=c.date(), extra=fixedextra)
-            newnode = repo.commitctx(mc)
-            successors[c.node()] = newnode
-            ui.debug('new node id is %s\n' % node.hex(newnode))
-            obsolete.createmarkers(repo, [(c, (repo[newnode],))])
-            rewrote += 1
-        # move the working copy too
-        wctx = repo[None]
-        # in-progress merge is a bit too complex for now.
-        if len(wctx.parents()) == 1:
-            newid = successors.get(wctx.p1().node())
-            if newid is not None:
-                hg.update(repo, newid, quietempty=True)
-        txn.close()
-    finally:
-        lock.release(txn, l, wl)
-        repo.invalidate()
-    ui.status('changed topic on %d changes\n' % rewrote)
+    p1 = None
+    p2 = None
+    successors = {}
+    for c in repo.set('%r', revset):
+        def filectxfn(repo, ctx, path):
+            try:
+                return c[path]
+            except error.ManifestLookupError:
+                return None
+        fixedextra = dict(c.extra())
+        ui.debug('old node id is %s\n' % node.hex(c.node()))
+        ui.debug('origextra: %r\n' % fixedextra)
+        oldtopic = fixedextra.get(constants.extrakey, None)
+        if oldtopic == newtopic:
+            continue
+        if newtopic is None:
+            del fixedextra[constants.extrakey]
+        else:
+            fixedextra[constants.extrakey] = newtopic
+        fixedextra[constants.changekey] = c.hex()
+        if 'amend_source' in fixedextra:
+            # TODO: right now the commitctx wrapper in
+            # topicrepo overwrites the topic in extra if
+            # amend_source is set to support 'hg commit
+            # --amend'. Support for amend should be adjusted
+            # to not be so invasive.
+            del fixedextra['amend_source']
+        ui.debug('changing topic of %s from %s to %s\n' % (
+            c, oldtopic, newtopic))
+        ui.debug('fixedextra: %r\n' % fixedextra)
+        # While changing topic of set of linear commits, make sure that
+        # we base our commits on new parent rather than old parent which
+        # was obsoleted while changing the topic
+        p1 = c.p1().node()
+        p2 = c.p2().node()
+        if p1 in successors:
+            p1 = successors[p1]
+        if p2 in successors:
+            p2 = successors[p2]
+        mc = context.memctx(
+            repo, (p1, p2), c.description(),
+            c.files(), filectxfn,
+            user=c.user(), date=c.date(), extra=fixedextra)
+        newnode = repo.commitctx(mc)
+        successors[c.node()] = newnode
+        ui.debug('new node id is %s\n' % node.hex(newnode))
+        obsolete.createmarkers(repo, [(c, (repo[newnode],))])
+        rewrote += 1
+    # move the working copy too
+    wctx = repo[None]
+    # in-progress merge is a bit too complex for now.
+    if len(wctx.parents()) == 1:
+        newid = successors.get(wctx.p1().node())
+        if newid is not None:
+            hg.update(repo, newid, quietempty=True)
+    return rewrote
 
 def _listtopics(ui, repo, opts):
     fm = ui.formatter('topics', opts)
--- a/hgext3rd/topic/stack.py	Mon Aug 21 14:21:49 2017 +0200
+++ b/hgext3rd/topic/stack.py	Wed Aug 23 23:44:36 2017 +0200
@@ -5,13 +5,23 @@
 from mercurial.i18n import _
 from mercurial import (
     destutil,
+    context,
     error,
     node,
+    util,
 )
 from .evolvebits import builddependencies, _orderrevs, _singlesuccessor
 
 short = node.short
 
+# TODO: compat
+
+if not util.safehasattr(context.basectx, 'orphan'):
+    context.basectx.orphan = context.basectx.unstable
+
+if not util.safehasattr(context.basectx, 'isunstable'):
+    context.basectx.isunstable = context.basectx.troubled
+
 def getstack(repo, branch=None, topic=None):
     # XXX need sorting
     if topic is not None and branch is not None:
@@ -122,7 +132,7 @@
             # "base" is kind of a "ghost" entry
             # skip other label for them (no current, no unstable)
             states = ['base']
-        elif ctx.unstable():
+        elif ctx.orphan():
             # current revision can be unstable also, so in that case show both
             # the states and the symbol '@' (issue5553)
             if iscurrentrevision:
@@ -171,7 +181,7 @@
     data = {}
     revs = getstack(repo, branch, topic)[1:]
     data['changesetcount'] = len(revs)
-    data['troubledcount'] = len([r for r in revs if repo[r].troubled()])
+    data['troubledcount'] = len([r for r in revs if repo[r].isunstable()])
     deps, rdeps = builddependencies(repo, revs)
     data['headcount'] = len([r for r in revs if not rdeps[r]])
     data['behindcount'] = 0
--- a/tests/test-divergent.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-divergent.t	Wed Aug 23 23:44:36 2017 +0200
@@ -47,13 +47,13 @@
   1 changesets pruned
   2 new divergent changesets
   $ hg log -G
-  @  3:e708fd28d5cf@default(draft) add bdivergent2 [divergent]
+  @  3:e708fd28d5cf@default(draft) add bdivergent2 [content-divergent]
   |
-  | o  2:c2f698071cba@default(draft) add bdivergent1 [divergent]
+  | o  2:c2f698071cba@default(draft) add bdivergent1 [content-divergent]
   |/
   o  0:135f39f4bd78@default(draft) add _a []
   
-  $ hg evolve --all --any --divergent
+  $ hg evolve --all --any --contentdivergent
   merge:[2] add bdivergent1
   with: [3] add bdivergent2
   base: [1] add _b
@@ -90,15 +90,15 @@
   1 changesets pruned
   2 new divergent changesets
   $ hg log -G
-  @  8:0a768ef678d9@default(draft) cdivergent2 [divergent]
+  @  8:0a768ef678d9@default(draft) cdivergent2 [content-divergent]
   |
-  | o  7:26c7705fee96@default(draft) add cdivergent1 [divergent]
+  | o  7:26c7705fee96@default(draft) add cdivergent1 [content-divergent]
   |/
   | o  5:c26f1d3baed2@default(draft) add bdivergent1 []
   |/
   o  0:135f39f4bd78@default(draft) add _a []
   
-  $ hg evolve --all --any --divergent
+  $ hg evolve --all --any --contentdivergent
   merge:[7] add cdivergent1
   with: [8] cdivergent2
   base: [6] add _c
@@ -126,9 +126,9 @@
   1 changesets pruned
   2 new divergent changesets
   $ hg log -G
-  @  3:e708fd28d5cf@default(draft) add bdivergent2 [divergent]
+  @  3:e708fd28d5cf@default(draft) add bdivergent2 [content-divergent]
   |
-  | o  2:c2f698071cba@default(draft) add bdivergent1 [divergent]
+  | o  2:c2f698071cba@default(draft) add bdivergent1 [content-divergent]
   |/
   o  0:135f39f4bd78@default(draft) add _a []
   
@@ -145,9 +145,9 @@
   > EOF
   $ hg evolve --all
   nothing to evolve on current working copy parent
-  (do you want to use --divergent)
+  (do you want to use --contentdivergent)
   [2]
-  $ hg evolve --divergent
+  $ hg evolve --contentdivergent
   merge:[3] add bdivergent2
   with: [2] add bdivergent1
   base: [1] add _b
--- a/tests/test-evolve-bumped.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-evolve-bumped.t	Wed Aug 23 23:44:36 2017 +0200
@@ -69,7 +69,7 @@
   no changes found
   1 new bumped changesets
 
-  $ hg evolve -a -A --bumped
+  $ hg evolve -a -A --phasedivergent
   recreate:[2] tweak a
   atop:[1] modify a
   computing new diff
@@ -121,5 +121,5 @@
   |
   o  0:d3873e73d99e@default(public) init
   
-  $ hg evolve --all --bumped
+  $ hg evolve --all --phasedivergent
   skipping b28e84916d8c : we do not handle merge yet
--- a/tests/test-evolve-cycles.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-evolve-cycles.t	Wed Aug 23 23:44:36 2017 +0200
@@ -89,48 +89,48 @@
 
   $ hg obslog "desc(A)" --hidden
   @  2a34000d3544 (1) A
-  |    rewritten(description, parent, content) by test (*) as c473644ee0e9 (glob)
+  |    rewritten(description, parent, content) as c473644ee0e9 by test (*) (glob)
   |
   x  a8df460dbbfe (3) C
-  |    rewritten(description, parent, content) by test (*) as 2a34000d3544 (glob)
+  |    rewritten(description, parent, content) as 2a34000d3544 by test (*) (glob)
   |
   x  c473644ee0e9 (2) B
-  |    rewritten(description, parent, content) by test (*) as a8df460dbbfe (glob)
+  |    rewritten(description, parent, content) as a8df460dbbfe by test (*) (glob)
   |
 
   $ hg obslog "desc(B)" --hidden
   @  2a34000d3544 (1) A
-  |    rewritten(description, parent, content) by test (*) as c473644ee0e9 (glob)
+  |    rewritten(description, parent, content) as c473644ee0e9 by test (*) (glob)
   |
   x  a8df460dbbfe (3) C
-  |    rewritten(description, parent, content) by test (*) as 2a34000d3544 (glob)
+  |    rewritten(description, parent, content) as 2a34000d3544 by test (*) (glob)
   |
   x  c473644ee0e9 (2) B
-  |    rewritten(description, parent, content) by test (*) as a8df460dbbfe (glob)
+  |    rewritten(description, parent, content) as a8df460dbbfe by test (*) (glob)
   |
 
   $ hg obslog "desc(C)" --hidden
   @  2a34000d3544 (1) A
-  |    rewritten(description, parent, content) by test (*) as c473644ee0e9 (glob)
+  |    rewritten(description, parent, content) as c473644ee0e9 by test (*) (glob)
   |
   x  a8df460dbbfe (3) C
-  |    rewritten(description, parent, content) by test (*) as 2a34000d3544 (glob)
+  |    rewritten(description, parent, content) as 2a34000d3544 by test (*) (glob)
   |
   x  c473644ee0e9 (2) B
-  |    rewritten(description, parent, content) by test (*) as a8df460dbbfe (glob)
+  |    rewritten(description, parent, content) as a8df460dbbfe by test (*) (glob)
   |
 
 Check that all option don't crash on a cycle either
 
   $ hg obslog "desc(C)" --hidden --all
   @  2a34000d3544 (1) A
-  |    rewritten(description, parent, content) by test (*) as c473644ee0e9 (glob)
+  |    rewritten(description, parent, content) as c473644ee0e9 by test (*) (glob)
   |
   x  a8df460dbbfe (3) C
-  |    rewritten(description, parent, content) by test (*) as 2a34000d3544 (glob)
+  |    rewritten(description, parent, content) as 2a34000d3544 by test (*) (glob)
   |
   x  c473644ee0e9 (2) B
-  |    rewritten(description, parent, content) by test (*) as a8df460dbbfe (glob)
+  |    rewritten(description, parent, content) as a8df460dbbfe by test (*) (glob)
   |
 
 Test with multiple cyles
@@ -252,42 +252,42 @@
 
   $ hg obslog "desc(D)" --hidden
   x  0da815c333f6 (5) E
-  |    rewritten(description, parent, content) by test (*) as d9f908fde1a1 (glob)
+  |    rewritten(description, parent, content) as d9f908fde1a1 by test (*) (glob)
   |
   @    868d2e0eb19c (4) D
-  |\     rewritten(description, parent, content) by test (*) as 0da815c333f6 (glob)
+  |\     rewritten(description, parent, content) as 0da815c333f6 by test (*) (glob)
   | |
   | x  d9f908fde1a1 (6) F
-  | |    rewritten(description, parent, content) by test (*) as 868d2e0eb19c (glob)
+  | |    rewritten(description, parent, content) as 868d2e0eb19c by test (*) (glob)
   | |
   +---x  2a34000d3544 (1) A
-  | |      rewritten(description, parent, content) by test (*) as c473644ee0e9 (glob)
+  | |      rewritten(description, parent, content) as c473644ee0e9 by test (*) (glob)
   | |
   x |  a8df460dbbfe (3) C
-  | |    rewritten(description, parent, content) by test (*) as 2a34000d3544, 868d2e0eb19c (glob)
+  | |    rewritten(description, parent, content) as 2a34000d3544, 868d2e0eb19c by test (*) (glob)
   | |
   x |  c473644ee0e9 (2) B
-  | |    rewritten(description, parent, content) by test (*) as a8df460dbbfe (glob)
+  | |    rewritten(description, parent, content) as a8df460dbbfe by test (*) (glob)
   | |
 Check that all option don't crash either on a cycle
   $ hg obslog --all --hidden "desc(F)"
   x  0da815c333f6 (5) E
-  |    rewritten(description, parent, content) by test (*) as d9f908fde1a1 (glob)
+  |    rewritten(description, parent, content) as d9f908fde1a1 by test (*) (glob)
   |
   @    868d2e0eb19c (4) D
-  |\     rewritten(description, parent, content) by test (*) as 0da815c333f6 (glob)
+  |\     rewritten(description, parent, content) as 0da815c333f6 by test (*) (glob)
   | |
   | x  d9f908fde1a1 (6) F
-  | |    rewritten(description, parent, content) by test (*) as 868d2e0eb19c (glob)
+  | |    rewritten(description, parent, content) as 868d2e0eb19c by test (*) (glob)
   | |
   +---x  2a34000d3544 (1) A
-  | |      rewritten(description, parent, content) by test (*) as c473644ee0e9 (glob)
+  | |      rewritten(description, parent, content) as c473644ee0e9 by test (*) (glob)
   | |
   x |  a8df460dbbfe (3) C
-  | |    rewritten(description, parent, content) by test (*) as 2a34000d3544, 868d2e0eb19c (glob)
+  | |    rewritten(description, parent, content) as 2a34000d3544, 868d2e0eb19c by test (*) (glob)
   | |
   x |  c473644ee0e9 (2) B
-  | |    rewritten(description, parent, content) by test (*) as a8df460dbbfe (glob)
+  | |    rewritten(description, parent, content) as a8df460dbbfe by test (*) (glob)
   | |
 Check the json output is valid in this case
 
--- a/tests/test-evolve-effectflags.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-evolve-effectflags.t	Wed Aug 23 23:44:36 2017 +0200
@@ -34,7 +34,7 @@
   @  fdf9bde5129a (2) A1
   |
   x  471f378eab4c (1) A0
-       rewritten(description) by test (*) as fdf9bde5129a (glob)
+       rewritten(description) as fdf9bde5129a by test (*) (glob)
   
 
 amend touching the user only
@@ -51,7 +51,7 @@
   @  5485c92d3433 (4) B0
   |
   x  ef4a313b1e0a (3) B0
-       rewritten(user) by test (*) as 5485c92d3433 (glob)
+       rewritten(user) as 5485c92d3433 by test (*) (glob)
   
 
 amend touching the date only
@@ -68,7 +68,7 @@
   @  4dd84345082e (6) B1
   |
   x  2ef0680ff450 (5) B1
-       rewritten(date) by test (*) as 4dd84345082e (glob)
+       rewritten(date) as 4dd84345082e by test (*) (glob)
   
 
 amend touching the branch only
@@ -89,7 +89,7 @@
   @  14a01456e057 (9) B2
   |
   x  bd3db8264cee (7) B2
-       rewritten(branch) by test (*) as 14a01456e057 (glob)
+       rewritten(branch) as 14a01456e057 by test (*) (glob)
   
 
   $ hg up default
@@ -111,7 +111,7 @@
   @  da86aa2f19a3 (12) D0
   |
   x  c85eff83a034 (11) D0
-       rewritten(parent) by test (*) as da86aa2f19a3 (glob)
+       rewritten(parent) as da86aa2f19a3 by test (*) (glob)
   
 
 amend touching the diff
@@ -130,7 +130,7 @@
   @  75781fdbdbf5 (15) E0
   |
   x  ebfe0333e0d9 (13) E0
-       rewritten(content) by test (*) as 75781fdbdbf5 (glob)
+       rewritten(content) as 75781fdbdbf5 by test (*) (glob)
   
 
 amend with multiple effect (desc and meta)
@@ -150,7 +150,7 @@
   @  a94e0fd5f1c8 (18) F1
   |
   x  fad47e5bd78e (16) F0
-       rewritten(description, user, date, branch) by test (*) as a94e0fd5f1c8 (glob)
+       rewritten(description, user, date, branch) as a94e0fd5f1c8 by test (*) (glob)
   
 rebase not touching the diff
 ----------------------------
@@ -197,7 +197,7 @@
   o  e509e2eb3df5 (22) H1
   |
   x  b57fed8d8322 (20) H1
-       rewritten(parent) by test (*) as e509e2eb3df5 (glob)
+       rewritten(parent) as e509e2eb3df5 by test (*) (glob)
   
 amend closing the branch should be detected as meta change
 ----------------------------------------------------------
@@ -214,5 +214,5 @@
   @  12c6238b5e37 (26) I0
   |
   x  2f599e54c1c6 (24) I0
-       rewritten(meta) by test (*) as 12c6238b5e37 (glob)
+       rewritten(meta) as 12c6238b5e37 by test (*) (glob)
   
--- a/tests/test-evolve-list.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-evolve-list.t	Wed Aug 23 23:44:36 2017 +0200
@@ -23,7 +23,7 @@
     unstable: cb9a9f314b8b (obsolete parent)
   
   177f92b77385: c
-    unstable: d2ae7f538514 (unstable parent)
+    orphan: d2ae7f538514 (orphan parent)
   
   $ cd ..
 
--- a/tests/test-evolve-obshistory-complex.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-evolve-obshistory-complex.t	Wed Aug 23 23:44:36 2017 +0200
@@ -80,14 +80,14 @@
   |  parent:      4:868d2e0eb19c
   |  user:        test
   |  date:        Thu Jan 01 00:00:00 1970 +0000
-  |  trouble:     unstable
+  |  instability: orphan
   |  summary:     fold2
   |
   | o  changeset:   8:d15d0ffc75f6
   | |  parent:      2:c473644ee0e9
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  trouble:     unstable
+  | |  instability: orphan
   | |  summary:     fold1
   | |
   | | o  changeset:   7:b868bc49b0a4
@@ -236,27 +236,27 @@
   |  tag:         tip
   |  user:        test
   |  date:        Thu Jan 01 00:00:00 1970 +0000
-  |  trouble:     unstable
+  |  instability: orphan
   |  summary:     fold2
   |
   o  changeset:   14:ec31316faa9d
   |  parent:      4:868d2e0eb19c
   |  user:        test
   |  date:        Thu Jan 01 00:00:00 1970 +0000
-  |  trouble:     unstable
+  |  instability: orphan
   |  summary:     fold2
   |
   | o  changeset:   13:d0f33db50670
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  trouble:     unstable
+  | |  instability: orphan
   | |  summary:     fold1
   | |
   | o  changeset:   12:7b3290f6e0a0
   | |  parent:      2:c473644ee0e9
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  trouble:     unstable
+  | |  instability: orphan
   | |  summary:     fold1
   | |
   | | o  changeset:   11:e036916b63ea
@@ -312,21 +312,21 @@
   |  tag:         tip
   |  user:        test
   |  date:        Thu Jan 01 00:00:00 1970 +0000
-  |  trouble:     unstable
+  |  instability: orphan
   |  summary:     fold2
   |
   o  changeset:   14:ec31316faa9d
   |  parent:      4:868d2e0eb19c
   |  user:        test
   |  date:        Thu Jan 01 00:00:00 1970 +0000
-  |  trouble:     unstable
+  |  instability: orphan
   |  summary:     fold2
   |
   | o  changeset:   12:7b3290f6e0a0
   | |  parent:      2:c473644ee0e9
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  trouble:     unstable
+  | |  instability: orphan
   | |  summary:     fold1
   | |
   | | o  changeset:   10:19e14c8397fc
@@ -374,25 +374,25 @@
   o    7b3290f6e0a0 (12) fold1
   |\
   x |    d15d0ffc75f6 (8) fold1
-  |\ \     rewritten(parent, content) by test (*) as 7b3290f6e0a0, d0f33db50670 (glob)
+  |\ \     rewritten(parent, content) as 7b3290f6e0a0, d0f33db50670 by test (*) (glob)
   | | |
   | | x  e036916b63ea (11) fold0
-  | | |    rewritten(description, parent, content) by test (*) as 7b3290f6e0a0 (glob)
+  | | |    rewritten(description, parent, content) as 7b3290f6e0a0 by test (*) (glob)
   | | |
   x | |  868d2e0eb19c (4) D
-   / /     rewritten(description, parent, content) by test (*) as d15d0ffc75f6 (glob)
+   / /     rewritten(description, parent, content) as d15d0ffc75f6 by test (*) (glob)
   | |
   x |  a8df460dbbfe (3) C
-   /     rewritten(description, content) by test (*) as d15d0ffc75f6 (glob)
+   /     rewritten(description, content) as d15d0ffc75f6 by test (*) (glob)
   |
   x    b868bc49b0a4 (7) fold0
-  |\     rewritten(parent, content) by test (*) as 19e14c8397fc, e036916b63ea (glob)
+  |\     rewritten(parent, content) as 19e14c8397fc, e036916b63ea by test (*) (glob)
   | |
   x |  2a34000d3544 (1) A
-   /     rewritten(description, content) by test (*) as b868bc49b0a4 (glob)
+   /     rewritten(description, content) as b868bc49b0a4 by test (*) (glob)
   |
   x  c473644ee0e9 (2) B
-       rewritten(description, parent, content) by test (*) as b868bc49b0a4 (glob)
+       rewritten(description, parent, content) as b868bc49b0a4 by test (*) (glob)
   
 While with all option, we should see 15 changesets
 
@@ -406,35 +406,35 @@
   | | | | o  ec31316faa9d (14) fold2
   | | | |/|
   | | | x |    100cc25b765f (9) fold2
-  | | | |\ \     rewritten(parent, content) by test (*) as d4a000f63ee9, ec31316faa9d (glob)
+  | | | |\ \     rewritten(parent, content) as d4a000f63ee9, ec31316faa9d by test (*) (glob)
   | | | | | |
   | +-------x  d0f33db50670 (13) fold1
-  | | | | |      rewritten(description, parent, content) by test (*) as ec31316faa9d (glob)
+  | | | | |      rewritten(description, parent, content) as ec31316faa9d by test (*) (glob)
   | | | | |
   +---x | |  e036916b63ea (11) fold0
-  | |  / /     rewritten(description, parent, content) by test (*) as 7b3290f6e0a0 (glob)
+  | |  / /     rewritten(description, parent, content) as 7b3290f6e0a0 by test (*) (glob)
   | | | |
   | | x |  0da815c333f6 (5) E
-  | |  /     rewritten(description, content) by test (*) as 100cc25b765f (glob)
+  | |  /     rewritten(description, content) as 100cc25b765f by test (*) (glob)
   | | |
   x | |    b868bc49b0a4 (7) fold0
-  |\ \ \     rewritten(parent, content) by test (*) as 19e14c8397fc, e036916b63ea (glob)
+  |\ \ \     rewritten(parent, content) as 19e14c8397fc, e036916b63ea by test (*) (glob)
   | | | |
   | | x |    d15d0ffc75f6 (8) fold1
-  | | |\ \     rewritten(parent, content) by test (*) as 7b3290f6e0a0, d0f33db50670 (glob)
+  | | |\ \     rewritten(parent, content) as 7b3290f6e0a0, d0f33db50670 by test (*) (glob)
   | | | | |
   | | | | x  d9f908fde1a1 (6) F
-  | | | |      rewritten(description, parent, content) by test (*) as 100cc25b765f (glob)
+  | | | |      rewritten(description, parent, content) as 100cc25b765f by test (*) (glob)
   | | | |
   x | | |  2a34000d3544 (1) A
-   / / /     rewritten(description, content) by test (*) as b868bc49b0a4 (glob)
+   / / /     rewritten(description, content) as b868bc49b0a4 by test (*) (glob)
   | | |
   | x |  868d2e0eb19c (4) D
-  |  /     rewritten(description, parent, content) by test (*) as d15d0ffc75f6 (glob)
+  |  /     rewritten(description, parent, content) as d15d0ffc75f6 by test (*) (glob)
   | |
   | x  a8df460dbbfe (3) C
-  |      rewritten(description, content) by test (*) as d15d0ffc75f6 (glob)
+  |      rewritten(description, content) as d15d0ffc75f6 by test (*) (glob)
   |
   x  c473644ee0e9 (2) B
-       rewritten(description, parent, content) by test (*) as b868bc49b0a4 (glob)
+       rewritten(description, parent, content) as b868bc49b0a4 by test (*) (glob)
   
--- a/tests/test-evolve-obshistory.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-evolve-obshistory.t	Wed Aug 23 23:44:36 2017 +0200
@@ -61,7 +61,7 @@
   @  4ae3a4151de9 (3) A1
   |
   x  471f378eab4c (1) A0
-       rewritten(description, content) by test (Thu Jan 01 00:00:00 1970 +0000) as 4ae3a4151de9
+       rewritten(description, content) as 4ae3a4151de9 by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/4ae3a4151de9-changeset-description
          @@ -1,1 +1,3 @@
@@ -111,7 +111,7 @@
   ]
   $ hg obslog --hidden --patch 471f378eab4c
   x  471f378eab4c (1) A0
-       rewritten(description, content) by test (*) as 4ae3a4151de9 (glob)
+       rewritten(description, content) as 4ae3a4151de9 by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/4ae3a4151de9-changeset-description
          @@ -1,1 +1,3 @@
@@ -353,7 +353,7 @@
 Check that debugobshistory on splitted commit show both targets
   $ hg obslog 471597cad322 --hidden --patch
   x  471597cad322 (1) A0
-       rewritten(parent, content) by test (*) as 337fec4d2edc, f257fde29c7a (glob)
+       rewritten(parent, content) as 337fec4d2edc, f257fde29c7a by test (*) (glob)
          (No patch available yet, too many successors (2))
   
   $ hg obslog 471597cad322 --hidden --no-graph -Tjson | python -m json.tool
@@ -388,7 +388,7 @@
   o  337fec4d2edc (2) A0
   |
   x  471597cad322 (1) A0
-       rewritten(parent, content) by test (*) as 337fec4d2edc, f257fde29c7a (glob)
+       rewritten(parent, content) as 337fec4d2edc, f257fde29c7a by test (*) (glob)
          (No patch available yet, too many successors (2))
   
 With the all option, it should show the three changesets
@@ -398,7 +398,7 @@
   | @  f257fde29c7a (3) A0
   |/
   x  471597cad322 (1) A0
-       rewritten(parent, content) by test (*) as 337fec4d2edc, f257fde29c7a (glob)
+       rewritten(parent, content) as 337fec4d2edc, f257fde29c7a by test (*) (glob)
          (No patch available yet, too many successors (2))
   
 Check that debugobshistory on the second successor after split show
@@ -407,7 +407,7 @@
   @  f257fde29c7a (3) A0
   |
   x  471597cad322 (1) A0
-       rewritten(parent, content) by test (*) as 337fec4d2edc, f257fde29c7a (glob)
+       rewritten(parent, content) as 337fec4d2edc, f257fde29c7a by test (*) (glob)
          (No patch available yet, too many successors (2))
   
 With the all option, it should show the three changesets
@@ -417,7 +417,7 @@
   | @  f257fde29c7a (3) A0
   |/
   x  471597cad322 (1) A0
-       rewritten(parent, content) by test (*) as 337fec4d2edc, f257fde29c7a (glob)
+       rewritten(parent, content) as 337fec4d2edc, f257fde29c7a by test (*) (glob)
          (No patch available yet, too many successors (2))
   
 Obslog with all option all should also works on the splitted commit
@@ -427,7 +427,7 @@
   | @  f257fde29c7a (3) A0
   |/
   x  471597cad322 (1) A0
-       rewritten(parent, content) by test (*) as 337fec4d2edc, f257fde29c7a (glob)
+       rewritten(parent, content) as 337fec4d2edc, f257fde29c7a by test (*) (glob)
          (No patch available yet, too many successors (2))
   
 Check that debugobshistory on both successors after split show
@@ -438,7 +438,7 @@
   | @  f257fde29c7a (3) A0
   |/
   x  471597cad322 (1) A0
-       rewritten(parent, content) by test (*) as 337fec4d2edc, f257fde29c7a (glob)
+       rewritten(parent, content) as 337fec4d2edc, f257fde29c7a by test (*) (glob)
          (No patch available yet, too many successors (2))
   
   $ hg update 471597cad322
@@ -606,7 +606,7 @@
 
   $ hg obslog de7290d8b885 --hidden --patch
   x  de7290d8b885 (1) A0
-       rewritten(parent, content) by test (*) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a (glob)
+       rewritten(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a by test (*) (glob)
          (No patch available yet, too many successors (4))
   
   $ hg obslog de7290d8b885 --hidden --all --patch
@@ -619,7 +619,7 @@
   | o  f257fde29c7a (3) A0
   |/
   x  de7290d8b885 (1) A0
-       rewritten(parent, content) by test (*) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a (glob)
+       rewritten(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a by test (*) (glob)
          (No patch available yet, too many successors (4))
   
   $ hg obslog de7290d8b885 --hidden --no-graph -Tjson | python -m json.tool
@@ -654,7 +654,7 @@
   @  c7f044602e9b (5) A0
   |
   x  de7290d8b885 (1) A0
-       rewritten(parent, content) by test (*) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a (glob)
+       rewritten(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a by test (*) (glob)
          (No patch available yet, too many successors (4))
   
   $ hg obslog c7f044602e9b --no-graph -Tjson | python -m json.tool
@@ -702,7 +702,7 @@
   | o  f257fde29c7a (3) A0
   |/
   x  de7290d8b885 (1) A0
-       rewritten(parent, content) by test (*) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a (glob)
+       rewritten(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a by test (*) (glob)
          (No patch available yet, too many successors (4))
   
   $ hg obslog 5 --all --patch
@@ -715,7 +715,7 @@
   | o  f257fde29c7a (3) A0
   |/
   x  de7290d8b885 (1) A0
-       rewritten(parent, content) by test (*) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a (glob)
+       rewritten(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a by test (*) (glob)
          (No patch available yet, too many successors (4))
   
   $ hg update de7290d8b885
@@ -790,7 +790,7 @@
 the revision with the target
   $ hg obslog --hidden 471f378eab4c --patch
   x  471f378eab4c (1) A0
-       rewritten(description, content) by test (*) as eb5a0daa2192 (glob)
+       rewritten(description, content) as eb5a0daa2192 by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/eb5a0daa2192-changeset-description
          @@ -1,1 +1,1 @@
@@ -809,11 +809,11 @@
   @    eb5a0daa2192 (3) C0
   |\
   x |  0dec01379d3b (2) B0
-   /     rewritten(description, parent, content) by test (*) as eb5a0daa2192 (glob)
+   /     rewritten(description, parent, content) as eb5a0daa2192 by test (*) (glob)
   |        (No patch available yet, changesets rebased)
   |
   x  471f378eab4c (1) A0
-       rewritten(description, content) by test (*) as eb5a0daa2192 (glob)
+       rewritten(description, content) as eb5a0daa2192 by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/eb5a0daa2192-changeset-description
          @@ -1,1 +1,1 @@
@@ -831,7 +831,7 @@
 the revision with the target
   $ hg obslog --hidden 0dec01379d3b --patch
   x  0dec01379d3b (2) B0
-       rewritten(description, parent, content) by test (*) as eb5a0daa2192 (glob)
+       rewritten(description, parent, content) as eb5a0daa2192 by test (*) (glob)
          (No patch available yet, changesets rebased)
   
 Check that with all option, all changesets are shown
@@ -839,11 +839,11 @@
   @    eb5a0daa2192 (3) C0
   |\
   x |  0dec01379d3b (2) B0
-   /     rewritten(description, parent, content) by test (*) as eb5a0daa2192 (glob)
+   /     rewritten(description, parent, content) as eb5a0daa2192 by test (*) (glob)
   |        (No patch available yet, changesets rebased)
   |
   x  471f378eab4c (1) A0
-       rewritten(description, content) by test (*) as eb5a0daa2192 (glob)
+       rewritten(description, content) as eb5a0daa2192 by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/eb5a0daa2192-changeset-description
          @@ -1,1 +1,1 @@
@@ -863,11 +863,11 @@
   @    eb5a0daa2192 (3) C0
   |\
   x |  0dec01379d3b (2) B0
-   /     rewritten(description, parent, content) by test (*) as eb5a0daa2192 (glob)
+   /     rewritten(description, parent, content) as eb5a0daa2192 by test (*) (glob)
   |        (No patch available yet, changesets rebased)
   |
   x  471f378eab4c (1) A0
-       rewritten(description, content) by test (*) as eb5a0daa2192 (glob)
+       rewritten(description, content) as eb5a0daa2192 by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/eb5a0daa2192-changeset-description
          @@ -1,1 +1,1 @@
@@ -996,14 +996,14 @@
   |  parent:      0:ea207398892e
   |  user:        test
   |  date:        Thu Jan 01 00:00:00 1970 +0000
-  |  trouble:     divergent
+  |  instability: content-divergent
   |  summary:     A2
   |
   | o  changeset:   2:fdf9bde5129a
   |/   parent:      0:ea207398892e
   |    user:        test
   |    date:        Thu Jan 01 00:00:00 1970 +0000
-  |    trouble:     divergent
+  |    instability: content-divergent
   |    summary:     A1
   |
   | x  changeset:   1:471f378eab4c
@@ -1024,14 +1024,14 @@
 Check that debugobshistory on the divergent revision show both destinations
   $ hg obslog --hidden 471f378eab4c --patch
   x  471f378eab4c (1) A0
-       rewritten(description) by test (*) as 65b757b745b9 (glob)
+       rewritten(description) as 65b757b745b9 by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/65b757b745b9-changeset-description
          @@ -1,1 +1,1 @@
          -A0
          +A2
   
-       rewritten(description) by test (*) as fdf9bde5129a (glob)
+       rewritten(description) as fdf9bde5129a by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/fdf9bde5129a-changeset-description
          @@ -1,1 +1,1 @@
@@ -1047,14 +1047,14 @@
   | o  fdf9bde5129a (2) A1
   |/
   x  471f378eab4c (1) A0
-       rewritten(description) by test (*) as 65b757b745b9 (glob)
+       rewritten(description) as 65b757b745b9 by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/65b757b745b9-changeset-description
          @@ -1,1 +1,1 @@
          -A0
          +A2
   
-       rewritten(description) by test (*) as fdf9bde5129a (glob)
+       rewritten(description) as fdf9bde5129a by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/fdf9bde5129a-changeset-description
          @@ -1,1 +1,1 @@
@@ -1106,14 +1106,14 @@
   o  fdf9bde5129a (2) A1
   |
   x  471f378eab4c (1) A0
-       rewritten(description) by test (*) as 65b757b745b9 (glob)
+       rewritten(description) as 65b757b745b9 by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/65b757b745b9-changeset-description
          @@ -1,1 +1,1 @@
          -A0
          +A2
   
-       rewritten(description) by test (*) as fdf9bde5129a (glob)
+       rewritten(description) as fdf9bde5129a by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/fdf9bde5129a-changeset-description
          @@ -1,1 +1,1 @@
@@ -1129,14 +1129,14 @@
   | o  fdf9bde5129a (2) A1
   |/
   x  471f378eab4c (1) A0
-       rewritten(description) by test (*) as 65b757b745b9 (glob)
+       rewritten(description) as 65b757b745b9 by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/65b757b745b9-changeset-description
          @@ -1,1 +1,1 @@
          -A0
          +A2
   
-       rewritten(description) by test (*) as fdf9bde5129a (glob)
+       rewritten(description) as fdf9bde5129a by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/fdf9bde5129a-changeset-description
          @@ -1,1 +1,1 @@
@@ -1150,14 +1150,14 @@
   @  65b757b745b9 (3) A2
   |
   x  471f378eab4c (1) A0
-       rewritten(description) by test (*) as 65b757b745b9 (glob)
+       rewritten(description) as 65b757b745b9 by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/65b757b745b9-changeset-description
          @@ -1,1 +1,1 @@
          -A0
          +A2
   
-       rewritten(description) by test (*) as fdf9bde5129a (glob)
+       rewritten(description) as fdf9bde5129a by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/fdf9bde5129a-changeset-description
          @@ -1,1 +1,1 @@
@@ -1172,14 +1172,14 @@
   | o  fdf9bde5129a (2) A1
   |/
   x  471f378eab4c (1) A0
-       rewritten(description) by test (*) as 65b757b745b9 (glob)
+       rewritten(description) as 65b757b745b9 by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/65b757b745b9-changeset-description
          @@ -1,1 +1,1 @@
          -A0
          +A2
   
-       rewritten(description) by test (*) as fdf9bde5129a (glob)
+       rewritten(description) as fdf9bde5129a by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/fdf9bde5129a-changeset-description
          @@ -1,1 +1,1 @@
@@ -1195,14 +1195,14 @@
   | o  fdf9bde5129a (2) A1
   |/
   x  471f378eab4c (1) A0
-       rewritten(description) by test (*) as 65b757b745b9 (glob)
+       rewritten(description) as 65b757b745b9 by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/65b757b745b9-changeset-description
          @@ -1,1 +1,1 @@
          -A0
          +A2
   
-       rewritten(description) by test (*) as fdf9bde5129a (glob)
+       rewritten(description) as fdf9bde5129a by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/fdf9bde5129a-changeset-description
          @@ -1,1 +1,1 @@
@@ -1267,7 +1267,7 @@
   $ hg update --hidden 'desc(A0)'
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   working directory parent is obsolete! (471f378eab4c)
-  (471f378eab4c has diverged, use 'hg evolve --list --divergent' to resolve the issue)
+  (471f378eab4c has diverged, use 'hg evolve --list --contentdivergent' to resolve the issue)
 
 Test output with amended + folded commit
 ========================================
@@ -1348,7 +1348,7 @@
   @    eb5a0daa2192 (4) C0
   |\
   x |  471f378eab4c (1) A0
-   /     rewritten(description, content) by test (*) as eb5a0daa2192 (glob)
+   /     rewritten(description, content) as eb5a0daa2192 by test (*) (glob)
   |        --- a/471f378eab4c-changeset-description
   |        +++ b/eb5a0daa2192-changeset-description
   |        @@ -1,1 +1,1 @@
@@ -1363,11 +1363,11 @@
   |
   |
   x  b7ea6d14e664 (3) B1
-  |    rewritten(description, parent, content) by test (*) as eb5a0daa2192 (glob)
+  |    rewritten(description, parent, content) as eb5a0daa2192 by test (*) (glob)
   |      (No patch available yet, changesets rebased)
   |
   x  0dec01379d3b (2) B0
-       rewritten(description) by test (*) as b7ea6d14e664 (glob)
+       rewritten(description) as b7ea6d14e664 by test (*) (glob)
          --- a/0dec01379d3b-changeset-description
          +++ b/b7ea6d14e664-changeset-description
          @@ -1,1 +1,1 @@
@@ -1380,7 +1380,7 @@
   @    eb5a0daa2192 (4) C0
   |\
   x |  471f378eab4c (1) A0
-   /     rewritten(description, content) by test (*) as eb5a0daa2192 (glob)
+   /     rewritten(description, content) as eb5a0daa2192 by test (*) (glob)
   |        --- a/471f378eab4c-changeset-description
   |        +++ b/eb5a0daa2192-changeset-description
   |        @@ -1,1 +1,1 @@
@@ -1395,11 +1395,11 @@
   |
   |
   x  b7ea6d14e664 (3) B1
-  |    rewritten(description, parent, content) by test (*) as eb5a0daa2192 (glob)
+  |    rewritten(description, parent, content) as eb5a0daa2192 by test (*) (glob)
   |      (No patch available yet, changesets rebased)
   |
   x  0dec01379d3b (2) B0
-       rewritten(description) by test (*) as b7ea6d14e664 (glob)
+       rewritten(description) as b7ea6d14e664 by test (*) (glob)
          --- a/0dec01379d3b-changeset-description
          +++ b/b7ea6d14e664-changeset-description
          @@ -1,1 +1,1 @@
@@ -1577,7 +1577,7 @@
   @  7a230b46bf61 (3) A2
   |
   x  fdf9bde5129a (2) A1
-  |    rewritten(description) by test (*) as 7a230b46bf61 (glob)
+  |    rewritten(description) as 7a230b46bf61 by test (*) (glob)
   |      --- a/fdf9bde5129a-changeset-description
   |      +++ b/7a230b46bf61-changeset-description
   |      @@ -1,1 +1,1 @@
@@ -1586,7 +1586,7 @@
   |
   |
   x  471f378eab4c (1) A0
-       rewritten(description) by test (*) as fdf9bde5129a (glob)
+       rewritten(description) as fdf9bde5129a by test (*) (glob)
          --- a/471f378eab4c-changeset-description
          +++ b/fdf9bde5129a-changeset-description
          @@ -1,1 +1,1 @@
@@ -1613,21 +1613,21 @@
   o  7a230b46bf61 (2) A2
   |
   x  fdf9bde5129a
-  |    rewritten(description) by test (*) as 7a230b46bf61 (glob)
+  |    rewritten(description) as 7a230b46bf61 by test (*) (glob)
   |      (No patch available yet, context is not local)
   |
   @  471f378eab4c (1) A0
-       rewritten(description) by test (*) as fdf9bde5129a (glob)
+       rewritten(description) as fdf9bde5129a by test (*) (glob)
          (No patch available yet, succ is unknown locally)
   
   $ hg obslog 7a230b46bf61 --color=debug --patch
   o  [evolve.node|7a230b46bf61] [evolve.rev|(2)] [evolve.short_description|A2]
   |
   x  [evolve.node evolve.missing_change_ctx|fdf9bde5129a]
-  |    [evolve.verb|rewritten](description) by [evolve.user|test] [evolve.date|(*)] as [evolve.node|7a230b46bf61] (glob)
+  |    [evolve.verb|rewritten](description) as [evolve.node|7a230b46bf61] by [evolve.user|test] [evolve.date|(*)] (glob)
   |      (No patch available yet, context is not local)
   |
   @  [evolve.node|471f378eab4c] [evolve.rev|(1)] [evolve.short_description|A0]
-       [evolve.verb|rewritten](description) by [evolve.user|test] [evolve.date|(*)] as [evolve.node|fdf9bde5129a] (glob)
+       [evolve.verb|rewritten](description) as [evolve.node|fdf9bde5129a] by [evolve.user|test] [evolve.date|(*)] (glob)
          (No patch available yet, succ is unknown locally)
   
--- a/tests/test-evolve-order.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-evolve-order.t	Wed Aug 23 23:44:36 2017 +0200
@@ -102,7 +102,7 @@
   |/
   o  0:f92638be10c7@default(public) add p
   
-  $ hg evolve --rev "unstable()"
+  $ hg evolve --rev "orphan()"
   move:[11] bprime
   atop:[12] asecond
   move:[7] add _c
@@ -257,7 +257,7 @@
   2 files updated, 0 files merged, 3 files removed, 0 files unresolved
   $ hg amend -m 'b3second'
   1 new unstable changesets
-  $ hg evolve --rev 'unstable()'
+  $ hg evolve --rev "orphan()"
   move:[30] add b4_
   atop:[35] b3second
   skipping 0b9488394e89: divergent rewriting. can't choose destination
--- a/tests/test-evolve-templates.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-evolve-templates.t	Wed Aug 23 23:44:36 2017 +0200
@@ -79,10 +79,10 @@
   o  d004c8f274b9 (4) A2
   |
   x  a468dc9b3633 (3) A1
-  |    rewritten(description) by test2 (Thu Apr 19 04:25:21 2001 +0000) as d004c8f274b9
+  |    rewritten(description) as d004c8f274b9 by test2 (Thu Apr 19 04:25:21 2001 +0000)
   |
   @  471f378eab4c (1) A0
-       rewritten(description, content) by test1 (Fri Feb 13 23:31:30 2009 +0000) as a468dc9b3633
+       rewritten(description, content) as a468dc9b3633 by test1 (Fri Feb 13 23:31:30 2009 +0000)
   
   $ hg tlog
   o  d004c8f274b9
@@ -91,7 +91,7 @@
   | @  471f378eab4c
   |/     Successors: [d004c8f274b9]
   |      semi-colon: [d004c8f274b9]
-  |      Fate: rewritten by test1, test2 as d004c8f274b9
+  |      Fate: rewritten as d004c8f274b9 by test1, test2
   |
   o  ea207398892e
   
@@ -108,7 +108,7 @@
   o  d004c8f274b9
   |
   | @  471f378eab4c
-  |/     Obsfate: rewritten by test1, test2 as d004c8f274b9
+  |/     Obsfate: rewritten as d004c8f274b9 by test1, test2
   |
   o  ea207398892e
   
@@ -116,7 +116,7 @@
   o  d004c8f274b9
   |
   | @  471f378eab4c
-  |/     Obsfate: rewritten by test1, test2 as d004c8f274b9 (between 2001-04-19 04:25 +0000 and 2009-02-13 23:31 +0000)
+  |/     Obsfate: rewritten as d004c8f274b9 by test1, test2 (between 2001-04-19 04:25 +0000 and 2009-02-13 23:31 +0000)
   |
   o  ea207398892e
   
@@ -152,7 +152,7 @@
   | @  a468dc9b3633
   |/     Successors: [d004c8f274b9]
   |      semi-colon: [d004c8f274b9]
-  |      Fate: rewritten by test2 as d004c8f274b9
+  |      Fate: rewritten as d004c8f274b9 by test2
   |
   o  ea207398892e
   
@@ -167,7 +167,7 @@
   |      semi-colon: 471f378eab4c
   |      Successors: [d004c8f274b9]
   |      semi-colon: [d004c8f274b9]
-  |      Fate: rewritten by test2 as d004c8f274b9
+  |      Fate: rewritten as d004c8f274b9 by test2
   |
   | x  f137d23bb3e1
   | |    Fate: pruned by test1
@@ -175,7 +175,7 @@
   | x  471f378eab4c
   |/     Successors: [a468dc9b3633]
   |      semi-colon: [a468dc9b3633]
-  |      Fate: rewritten by test1 as a468dc9b3633
+  |      Fate: rewritten as a468dc9b3633 by test1
   |
   o  ea207398892e
   
@@ -183,7 +183,7 @@
   o  d004c8f274b9
   |
   | @  a468dc9b3633
-  |/     Obsfate: rewritten by test2 as d004c8f274b9 (at 2001-04-19 04:25 +0000)
+  |/     Obsfate: rewritten as d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000)
   |
   o  ea207398892e
   
@@ -203,7 +203,7 @@
   |      semi-colon: 471f378eab4c
   |      Successors: [d004c8f274b9]
   |      semi-colon: [d004c8f274b9]
-  |      Fate: rewritten by test2 as d004c8f274b9
+  |      Fate: rewritten as d004c8f274b9 by test2
   |
   | x  f137d23bb3e1
   | |    Fate: pruned by test1
@@ -211,7 +211,7 @@
   | x  471f378eab4c
   |/     Successors: [a468dc9b3633]
   |      semi-colon: [a468dc9b3633]
-  |      Fate: rewritten by test1 as a468dc9b3633
+  |      Fate: rewritten as a468dc9b3633 by test1
   |
   o  ea207398892e
   
@@ -225,13 +225,13 @@
   @  d004c8f274b9
   |
   | x  a468dc9b3633
-  |/     Obsfate: rewritten by test2 as d004c8f274b9 (at 2001-04-19 04:25 +0000)
+  |/     Obsfate: rewritten as d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000)
   |
   | x  f137d23bb3e1
   | |    Obsfate: pruned by test1 (at 2009-02-13 23:31 +0000)
   | |
   | x  471f378eab4c
-  |/     Obsfate: rewritten by test1 as a468dc9b3633 (at 2009-02-13 23:31 +0000)
+  |/     Obsfate: rewritten as a468dc9b3633 by test1 (at 2009-02-13 23:31 +0000)
   |
   o  ea207398892e
   
@@ -625,14 +625,14 @@
   |  parent:      0:ea207398892e
   |  user:        test
   |  date:        Thu Jan 01 00:00:00 1970 +0000
-  |  trouble:     divergent
+  |  instability: content-divergent
   |  summary:     A2
   |
   | o  changeset:   2:fdf9bde5129a
   |/   parent:      0:ea207398892e
   |    user:        test
   |    date:        Thu Jan 01 00:00:00 1970 +0000
-  |    trouble:     divergent
+  |    instability: content-divergent
   |    summary:     A1
   |
   | x  changeset:   1:471f378eab4c
@@ -655,7 +655,7 @@
   $ hg up 'desc(A0)' --hidden
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   working directory parent is obsolete! (471f378eab4c)
-  (471f378eab4c has diverged, use 'hg evolve --list --divergent' to resolve the issue)
+  (471f378eab4c has diverged, use 'hg evolve --list --contentdivergent' to resolve the issue)
 
 Precursors template should show current revision as it is the working copy
   $ hg tlog
@@ -1074,7 +1074,7 @@
   o  7a230b46bf61
   |
   | @  471f378eab4c
-  |/     Obsfate: rewritten by test as 7a230b46bf61 (at 1970-01-01 00:00 +0000)
+  |/     Obsfate: rewritten as 7a230b46bf61 by test (at 1970-01-01 00:00 +0000)
   |
   o  ea207398892e
   
@@ -1105,7 +1105,7 @@
   @  7a230b46bf61
   |
   | x  471f378eab4c
-  |/     Obsfate: rewritten by test as 7a230b46bf61 (at 1970-01-01 00:00 +0000)
+  |/     Obsfate: rewritten as 7a230b46bf61 by test (at 1970-01-01 00:00 +0000)
   |
   o  ea207398892e
   
--- a/tests/test-evolve.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-evolve.t	Wed Aug 23 23:44:36 2017 +0200
@@ -412,7 +412,7 @@
   |
   o  0	: base - test
   
-  $ hg evolve --any --traceback --bumped
+  $ hg evolve --any --traceback --phasedivergent
   recreate:[8] another feature that rox
   atop:[7] another feature (child of ba0ec09b1bab)
   computing new diff
@@ -435,7 +435,7 @@
   @@ -3,1 +3,1 @@
   -Zwei
   +deux
-  $ hg log -r 'bumped()' # no more bumped
+  $ hg log -r 'phasedivergent()' # no more bumped
 
 test evolve --all
   $ sed -i'' -e s/deux/to/ main-file-1
@@ -453,9 +453,9 @@
   $ hg log -G --template '{rev} {troubles}\n'
   @  13
   |
-  | o  11 unstable
+  | o  11 orphan
   | |
-  | o  10 unstable
+  | o  10 orphan
   | |
   | x  9
   |/
@@ -770,12 +770,12 @@
   @    d26d339c513f (12) add 4
   |\
   x |    af636757ce3b (11) add 3
-  |\ \     rewritten(description, user, parent, content) by test (*) as d26d339c513f (glob)
+  |\ \     rewritten(description, user, parent, content) as d26d339c513f by test (*) (glob)
   | | |
   | \ \
   | |\ \
   | | | x  ce341209337f (4) add 4
-  | | |      rewritten(description, user, content) by test (*) as d26d339c513f (glob)
+  | | |      rewritten(description, user, content) as d26d339c513f by test (*) (glob)
   | | |
 
 Test obsstore stat
@@ -971,7 +971,7 @@
   
   $ hg evolve
   nothing to evolve on current working copy parent
-  (2 other unstable in the repository, do you want --any or --rev)
+  (2 other orphan in the repository, do you want --any or --rev)
   [2]
 
 
@@ -1049,7 +1049,7 @@
   |/
   o  0	: a0 - test
   
-  $ hg evolve -r 12 --bumped
+  $ hg evolve -r 12 --phasedivergent
   recreate:[12] add new file bumped
   atop:[11] a2
   computing new diff
@@ -1110,11 +1110,11 @@
   set of specified revisions is empty
   [1]
 
-  $ hg evolve --rev "14::" --bumped
-  no bumped changesets in specified revisions
-  (do you want to use --unstable)
+  $ hg evolve --rev "14::" --phasedivergent
+  no phasedivergent changesets in specified revisions
+  (do you want to use --orphan)
   [2]
-  $ hg evolve --rev "14::" --unstable
+  $ hg evolve --rev "14::" --orphan
   move:[15] add gg
   atop:[18] a3
   move:[16] add gh
@@ -1312,7 +1312,7 @@
   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ hg evolve --all
   nothing to evolve on current working copy parent
-  (2 other unstable in the repository, do you want --any or --rev)
+  (2 other orphan in the repository, do you want --any or --rev)
   [2]
   $ hg evolve --all --any
   move:[22] add j2
--- a/tests/test-inhibit.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-inhibit.t	Wed Aug 23 23:44:36 2017 +0200
@@ -159,6 +159,7 @@
   o  0:54ccbc537fc2 add cA
   
   $ hg phase --public 7
+  1 new bumped changesets
   $ hg strip 9
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   working directory now at cf5c4f4554ce
--- a/tests/test-obsolete.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-obsolete.t	Wed Aug 23 23:44:36 2017 +0200
@@ -145,7 +145,7 @@
   $ qlog -r 'suspended()'
   3
   - 0d3f46688ccc
-  $ qlog -r 'unstable()'
+  $ qlog -r "orphan()"
   5
   - a7a6f2b5d8a5
 
@@ -175,7 +175,7 @@
   $ hg push ../other-new
   pushing to ../other-new
   searching for changes
-  abort: push includes unstable changeset: a7a6f2b5d8a5!
+  abort: push includes orphan changeset: a7a6f2b5d8a5!
   (use 'hg evolve' to get a stable history or --force to ignore warnings)
   [255]
   $ hg push -f ../other-new
@@ -230,7 +230,7 @@
   $ hg push ../other-new
   pushing to ../other-new
   searching for changes
-  abort: push includes unstable changeset: 95de7fc6918d!
+  abort: push includes orphan changeset: 95de7fc6918d!
   (use 'hg evolve' to get a stable history or --force to ignore warnings)
   [255]
   $ hg push ../other-new -f # use f because there is unstability
@@ -397,7 +397,7 @@
   commit: 1 deleted, 2 unknown (clean)
   update: 2 new changesets, 2 branch heads (merge)
   phases: 4 draft
-  unstable: 1 changesets
+  orphan: 1 changesets
   $ qlog
   6
   - 909a0fb57e5d
@@ -586,19 +586,19 @@
   |
   o  0 - (public) 1f0dee641bb7 add a
   
-  $ hg log -r 'bumped()'
+  $ hg log -r 'phasedivergent()'
   changeset:   12:6db5e282cb91
   tag:         tip
   parent:      10:2033b4e49474
   user:        test
   date:        Thu Jan 01 00:00:00 1970 +0000
-  trouble:     bumped
+  instability: phase-divergent
   summary:     add obsol_d'''
   
   $ hg push ../other-new/
   pushing to ../other-new/
   searching for changes
-  abort: push includes bumped changeset: 6db5e282cb91!
+  abort: push includes phase-divergent changeset: 6db5e282cb91!
   (use 'hg evolve' to get a stable history or --force to ignore warnings)
   [255]
 
@@ -622,7 +622,7 @@
   |/   parent:      10:2033b4e49474
   |    user:        test
   |    date:        Thu Jan 01 00:00:00 1970 +0000
-  |    trouble:     bumped
+  |    instability: phase-divergent
   |    summary:     add obsol_d'''
   |
   | o  changeset:   11:9468a5f5d8b2
@@ -679,14 +679,14 @@
   commit: (clean)
   update: (2|9|11) new changesets, (3|9|10) branch heads \(merge\) (re)
   phases: 3 draft
-  bumped: 1 changesets
+  phase-divergent: 1 changesets
   $ hg debugobsolete `getid a7a6f2b5d8a5` `getid 50f11e5e3a63`
-  $ hg log -r 'divergent()'
+  $ hg log -r 'contentdivergent()'
   changeset:   12:6db5e282cb91
   parent:      10:2033b4e49474
   user:        test
   date:        Thu Jan 01 00:00:00 1970 +0000
-  trouble:     bumped, divergent
+  instability: phase-divergent, content-divergent
   summary:     add obsol_d'''
   
   changeset:   16:50f11e5e3a63
@@ -694,7 +694,7 @@
   parent:      11:9468a5f5d8b2
   user:        test
   date:        Thu Jan 01 00:00:00 1970 +0000
-  trouble:     divergent
+  instability: content-divergent
   summary:     add obsolet_conflicting_d
   
 
@@ -707,11 +707,11 @@
   [2]
   $ hg olog
   @  0d3f46688ccc (3) add obsol_c
-  |    rewritten(parent) by test (*) as 2033b4e49474 (glob)
-  |    rewritten by test (*) as 725c380fe99b (glob)
+  |    rewritten(parent) as 2033b4e49474 by test (*) (glob)
+  |    rewritten as 725c380fe99b by test (*) (glob)
   |
   x  4538525df7e2 (2) add c
-       rewritten by test (*) as 0d3f46688ccc (glob)
+       rewritten as 0d3f46688ccc by test (*) (glob)
   
 
 Check import reports new unstable changeset:
@@ -719,7 +719,7 @@
   $ hg up --hidden 2
   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
   working directory parent is obsolete! (4538525df7e2)
-  (4538525df7e2 has diverged, use 'hg evolve --list --divergent' to resolve the issue)
+  (4538525df7e2 has diverged, use 'hg evolve --list --contentdivergent' to resolve the issue)
   $ hg export 9468a5f5d8b2 | hg import -
   applying patch from stdin
   1 new unstable changesets
@@ -734,14 +734,14 @@
   |  parent:      2:4538525df7e2
   |  user:        test
   |  date:        Thu Jan 01 00:00:00 1970 +0000
-  |  trouble:     unstable
+  |  instability: orphan
   |  summary:     add obsol_d''
   |
   | o  changeset:   16:50f11e5e3a63
   | |  parent:      11:9468a5f5d8b2
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  trouble:     divergent
+  | |  instability: content-divergent
   | |  summary:     add obsolet_conflicting_d
   | |
   | | o  changeset:   15:705ab2a6b72e
@@ -767,7 +767,7 @@
   | | |/   parent:      10:2033b4e49474
   | | |    user:        test
   | | |    date:        Thu Jan 01 00:00:00 1970 +0000
-  | | |    trouble:     bumped, divergent
+  | | |    instability: phase-divergent, content-divergent
   | | |    summary:     add obsol_d'''
   | | |
   | o |  changeset:   11:9468a5f5d8b2
--- a/tests/test-sharing.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-sharing.t	Wed Aug 23 23:44:36 2017 +0200
@@ -514,13 +514,13 @@
   7:e3f99ce9d9cd  draft  fix bug 24 (v2 by alice)
 
 Use evolve to fix the divergence.
-  $ HGMERGE=internal:other hg evolve --divergent
+  $ HGMERGE=internal:other hg evolve --contentdivergent
   merge:[6] fix bug 24 (v2 by bob)
   with: [7] fix bug 24 (v2 by alice)
   base: [4] fix bug 24 (v1)
   0 files updated, 1 files merged, 0 files removed, 0 files unresolved
   working directory is now at 5ad6037c046c
-  $ hg log -q -r 'divergent()'
+  $ hg log -q -r 'contentdivergent()'
 
 Figure SG10: Bob's repository after fixing divergence.
   $ hg --hidden shortlog -G -r 3::
--- a/tests/test-stabilize-conflict.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-stabilize-conflict.t	Wed Aug 23 23:44:36 2017 +0200
@@ -65,7 +65,7 @@
   $ safesed 's/huit/eight/' babar
   $ hg diff
   diff -r 9d5daf8bd956 babar
-  --- a/babar	Thu Jan 01 00:00:00 1970 +0000
+  --- a/babar	* (glob)
   +++ b/babar	* (glob)
   @@ -5,6 +5,6 @@
    cinq
@@ -114,7 +114,7 @@
   $ hg diff
   diff -r 5977072d13c5 babar
   --- a/babar	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/babar	* (glob)
+  +++ b/babar	Thu Jan 01 00:00:00 1970 +0000
   @@ -7,4 +7,4 @@
    sept
    eight
@@ -145,7 +145,7 @@
   | o  changeset:   5:71c18f70c34f
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  trouble:     unstable
+  | |  instability: orphan
   | |  summary:     babar count up to fifteen
   | |
   | x  changeset:   4:5977072d13c5
@@ -237,7 +237,7 @@
   | o  changeset:   8:1836b91c6c1d
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  trouble:     unstable
+  | |  instability: orphan
   | |  summary:     babar count up to fifteen
   | |
   | x  changeset:   7:e04690b09bc6
--- a/tests/test-stabilize-order.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-stabilize-order.t	Wed Aug 23 23:44:36 2017 +0200
@@ -110,10 +110,10 @@
   --- successors.old* (glob)
   +++ successors.new* (glob)
   @@ -3,3 +3,4 @@
-   93418d2c0979643ad446f621195e78720edb05b4 005fe5914f78e8bc64c7eba28117b0b1fa210d0d 0 (*) {'ef1': '*', 'user': 'test'} (glob)
-   7a7d76dc97c57751de9e80f61ed2a639bd03cd24 0 {93418d2c0979643ad446f621195e78720edb05b4} (*) {'ef1': '*', 'user': 'test'} (glob)
-   22619daeed78036f80fbd326b6852519c4f0c25e 81b8bbcd5892841efed41433d7a5e9df922396cb 0 (*) {'ef1': '*', 'user': 'test'} (glob)
-  +7a7552255fb5f8bd745e46fba6f0ca633a4dd716 0f691739f91762462bf8ba21f35fdf71fe64310e 0 (*) {'ef1': '*', 'user': 'test'} (glob)
+   93418d2c0979643ad446f621195e78720edb05b4 005fe5914f78e8bc64c7eba28117b0b1fa210d0d 0 (*) {'ef1': '8', 'user': 'test'} (glob)
+   7a7d76dc97c57751de9e80f61ed2a639bd03cd24 0 {93418d2c0979643ad446f621195e78720edb05b4} (*) {'ef1': '0', 'user': 'test'} (glob)
+   22619daeed78036f80fbd326b6852519c4f0c25e 81b8bbcd5892841efed41433d7a5e9df922396cb 0 (*) {'ef1': '4', 'user': 'test'} (glob)
+  +7a7552255fb5f8bd745e46fba6f0ca633a4dd716 0f691739f91762462bf8ba21f35fdf71fe64310e 0 (*) {'ef1': '4', 'user': 'test'} (glob)
   [1]
 
 
@@ -153,7 +153,7 @@
   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg evolve -v
   nothing to evolve on current working copy parent
-  (1 other unstable in the repository, do you want --any or --rev)
+  (1 other orphan in the repository, do you want --any or --rev)
   [2]
   $ hg evolve --any -v
   move:[9] addc
@@ -179,7 +179,7 @@
   o  0:c471ef929e6a@default(draft) addroot
   
   $ hg evolve --any -v
-  no unstable changesets to evolve
+  no orphan changesets to evolve
   [1]
 
 Ambiguous evolution
@@ -208,13 +208,13 @@
   | |  parent:      12:2256dae6521f
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  trouble:     unstable
+  | |  instability: orphan
   | |  summary:     secondambiguous
   | |
   | | o  changeset:   13:bdc003b6eec2
   | |/   user:        test
   | |    date:        Thu Jan 01 00:00:00 1970 +0000
-  | |    trouble:     unstable
+  | |    instability: orphan
   | |    summary:     firstambiguous
   | |
   | x  changeset:   12:2256dae6521f
--- a/tests/test-stabilize-result.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-stabilize-result.t	Wed Aug 23 23:44:36 2017 +0200
@@ -86,7 +86,7 @@
   fix conflict and run 'hg evolve --continue' or use 'hg update -C .' to abort
   abort: unresolved merge conflicts (see hg help resolve)
   [255]
-  $ hg revert -r 'unstable()' a
+  $ hg revert -r "orphan()" a
   $ hg diff
   diff -r 66719795a494 a
   --- a/a	* (glob)
@@ -156,20 +156,20 @@
 
 Stabilize!
 
-  $ hg evolve --any --dry-run --bumped
+  $ hg evolve --any --dry-run --phasedivergent
   recreate:[12] newer a
   atop:[8] newer a
-  hg rebase --rev (73b15c7566e9|d5c7ef82d003) --dest 66719795a494; (re)
+  hg rebase --rev d5c7ef82d003 --dest 66719795a494;
   hg update 1cf0aacfd363;
-  hg revert --all --rev (73b15c7566e9|d5c7ef82d003); (re)
+  hg revert --all --rev d5c7ef82d003;
   hg commit --msg "bumped update to %s" (no-eol)
-  $ hg evolve --any --confirm --bumped
+  $ hg evolve --any --confirm --phasedivergent
   recreate:[12] newer a
   atop:[8] newer a
   perform evolve? [Ny] n
   abort: evolve aborted by user
   [255]
-  $ echo y | hg evolve --any --confirm --config ui.interactive=True --bumped
+  $ echo y | hg evolve --any --confirm --config ui.interactive=True --phasedivergent
   recreate:[12] newer a
   atop:[8] newer a
   perform evolve? [Ny] y
@@ -207,7 +207,7 @@
   $ glog
   @  15:3932c176bbaa@default(draft) bk:[] More addition
   |
-  | o  14:(a7cabd7bd9c2|671b9d7eeaec)@default\(draft\) bk:\[\] bumped update to 1cf0aacfd363: (re)
+  | o  14:c2c1151aa854@default(draft) bk:[] bumped update to 1cf0aacfd363:
   | |
   o |  9:7bc2f5967f5e@default(draft) bk:[] add c
   | |
@@ -234,7 +234,7 @@
   |
   | o  17:d2f173e25686@default(draft) bk:[] More addition
   |/
-  | o  14:(a7cabd7bd9c2|671b9d7eeaec)@default\(draft\) bk:\[\] bumped update to 1cf0aacfd363: (re)
+  | o  14:c2c1151aa854@default(draft) bk:[] bumped update to 1cf0aacfd363:
   | |
   o |  9:7bc2f5967f5e@default(draft) bk:[] add c
   | |
@@ -247,14 +247,14 @@
 
 Stabilize it
 
-  $ hg evolve -qn --confirm --divergent
+  $ hg evolve -qn --confirm --contentdivergent
   merge:[19] More addition
   with: [17] More addition
   base: [15] More addition
   perform evolve? [Ny] n
   abort: evolve aborted by user
   [255]
-  $ echo y | hg evolve -qn --confirm --config ui.interactive=True --divergent
+  $ echo y | hg evolve -qn --confirm --config ui.interactive=True --contentdivergent
   merge:[19] More addition
   with: [17] More addition
   base: [15] More addition
@@ -265,7 +265,7 @@
   hg up -C 3932c176bbaa &&
   hg revert --all --rev tip &&
   hg commit -m "`hg log -r eacc9c8240fe --template={desc}`";
-  $ hg evolve -v --divergent
+  $ hg evolve -v --contentdivergent
   merge:[19] More addition
   with: [17] More addition
   base: [15] More addition
@@ -289,7 +289,7 @@
   $ glog
   @  21:f344982e63c4@default(draft) bk:[] More addition
   |
-  | o  14:(a7cabd7bd9c2|671b9d7eeaec)@default\(draft\) bk:\[\] bumped update to 1cf0aacfd363: (re)
+  | o  14:c2c1151aa854@default(draft) bk:[] bumped update to 1cf0aacfd363:
   | |
   o |  9:7bc2f5967f5e@default(draft) bk:[] add c
   | |
@@ -341,17 +341,17 @@
   2 new divergent changesets
 # reamend so that the case is not the first precursor.
   $ hg amend -m "More addition (2)"
-  $ hg phase 'divergent()'
+  $ hg phase 'contentdivergent()'
   21: draft
   24: draft
-  $ hg evolve -qn --divergent
+  $ hg evolve -qn --contentdivergent
   hg update -c 0b336205a5d0 &&
   hg merge f344982e63c4 &&
   hg commit -m "auto merge resolving conflict between 0b336205a5d0 and f344982e63c4"&&
   hg up -C 3932c176bbaa &&
   hg revert --all --rev tip &&
   hg commit -m "`hg log -r 0b336205a5d0 --template={desc}`";
-  $ hg evolve --divergent
+  $ hg evolve --contentdivergent
   merge:[24] More addition (2)
   with: [21] More addition
   base: [15] More addition
--- a/tests/test-topic-stack-data.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-topic-stack-data.t	Wed Aug 23 23:44:36 2017 +0200
@@ -103,7 +103,7 @@
   commit: (clean)
   update: 2 new changesets (update)
   phases: 22 draft
-  unstable: 3 changesets
+  orphan: 3 changesets
   topic:  foo
   $ hg log --graph -T '{desc} ({branch}) [{topic}]'
   @  add foo_b (lake) []
--- a/tests/test-topic-tutorial.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-topic-tutorial.t	Wed Aug 23 23:44:36 2017 +0200
@@ -687,14 +687,14 @@
   | |  topic:       tools
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  trouble:     unstable
+  | |  instability: orphan
   | |  summary:     Adding drill
   | |
   | o  changeset:   14:d4f97f32f8a1
   | |  topic:       tools
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  trouble:     unstable
+  | |  instability: orphan
   | |  summary:     Adding saw
   | |
   | x  changeset:   13:a8ab3599d53d
--- a/tests/test-topic.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-topic.t	Wed Aug 23 23:44:36 2017 +0200
@@ -587,7 +587,7 @@
   | @  changeset:   10:4073470c35e1
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  trouble:     unstable
+  | |  instability: orphan
   | |  summary:     fran?
   | |
 
@@ -612,17 +612,17 @@
   changeset:   12:18b70b8de1f0
   user:        test
   date:        Thu Jan 01 00:00:00 1970 +0000
-  trouble:     unstable
+  instability: orphan
   summary:     fran?
   
   $ hg sum
-  parent: 12:18b70b8de1f0  (unstable)
+  parent: 12:18b70b8de1f0  (orphan)
    fran?
   branch: default
   commit: (clean)
   update: 5 new changesets, 2 branch heads (merge)
   phases: 3 draft
-  unstable: 1 changesets
+  orphan: 1 changesets
   $ hg topic
      wat
   $ hg log -Gr 'draft() and not obsolete()'
@@ -637,7 +637,7 @@
   | @  changeset:   12:18b70b8de1f0
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  trouble:     unstable
+  | |  instability: orphan
   | |  summary:     fran?
   | |
 
--- a/tests/test-tutorial.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-tutorial.t	Wed Aug 23 23:44:36 2017 +0200
@@ -685,7 +685,7 @@
   $ hg push other
   pushing to $TESTTMP/other (glob)
   searching for changes
-  abort: push includes unstable changeset: bf1b0d202029!
+  abort: push includes orphan changeset: bf1b0d202029!
   (use 'hg evolve' to get a stable history or --force to ignore warnings)
   [255]
  
@@ -826,7 +826,7 @@
   |
   o  7e82d3f3c2cb (public): Monthy Python Shopping list
   
-  $ hg log -r 'unstable()'
+  $ hg log -r "orphan()"
   99f039c5ec9e (draft): SPAM SPAM SPAM
 
   $ hg evolve
--- a/tests/test-uncommit.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-uncommit.t	Wed Aug 23 23:44:36 2017 +0200
@@ -287,7 +287,7 @@
   $ hg up -C 3 --hidden
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   working directory parent is obsolete! (5eb72dbe0cb4)
-  (5eb72dbe0cb4 has diverged, use 'hg evolve --list --divergent' to resolve the issue)
+  (5eb72dbe0cb4 has diverged, use 'hg evolve --list --contentdivergent' to resolve the issue)
   $ hg --config extensions.purge= purge
   $ hg uncommit --all -X e
   1 new divergent changesets
--- a/tests/test-unstable.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-unstable.t	Wed Aug 23 23:44:36 2017 +0200
@@ -53,7 +53,7 @@
   o  0:135f39f4bd78@default(draft) add _a
   
 
-  $ hg evo --all --any --unstable
+  $ hg evo --all --any --orphan
   move:[2] add _c
   atop:[3] bprime
   working directory is now at fdcf3523a74d
@@ -99,7 +99,7 @@
   o  0:b4952fcf48cf@default(draft) add base
   
 
-  $ hg evo --all --any --unstable
+  $ hg evo --all --any --orphan
   move:[3] merge
   atop:[4] aprime
   working directory is now at 0bf3f3a59c8c
@@ -152,7 +152,7 @@
   o  0:b4952fcf48cf@default(draft) add base
   
 
-  $ hg evo --all --any --unstable
+  $ hg evo --all --any --orphan
   warning: no support for evolving merge changesets with two obsolete parents yet
   (Redo the merge (6b4280e33286) and use `hg prune <old> --succ <new>` to obsolete the old one)
   $ hg log -G
@@ -198,7 +198,7 @@
   o  0:135f39f4bd78@default(draft) add _a
   
 
-  $ hg evo --all --any --unstable
+  $ hg evo --all --any --orphan
   move:[2] add _c
   atop:[4] add bprimesplit2
   working directory is now at 387cc1e837d7
@@ -252,7 +252,7 @@
   o  0:135f39f4bd78@default(draft) add _a
   
 
-  $ hg evo --all --any --unstable
+  $ hg evo --all --any --orphan
   move:[2] add _c
   atop:[6] add bsecondsplit2
   working directory is now at 98e3f21461ff
@@ -301,7 +301,7 @@
   o  0:135f39f4bd78@default(draft) add _a
   
 
-  $ hg evo --all --any --unstable
+  $ hg evo --all --any --orphan
   cannot solve split accross two branches
   $ hg log -G
   @  4:3c69ea6aa93e@default(draft) add bprimesplit2
--- a/tests/test-userguide.t	Mon Aug 21 14:21:49 2017 +0200
+++ b/tests/test-userguide.t	Wed Aug 23 23:44:36 2017 +0200
@@ -168,7 +168,7 @@
   2 new unstable changesets
   $ hg shortlog -r 'obsolete()'
   11:3e1cb8f70c02  draft  fix bug 17
-  $ hg shortlog -r 'unstable()'
+  $ hg shortlog -r "orphan()"
   12:debd46bb29dc  draft  cleanup
   13:dadcbba2d606  draft  feature 23
   $ hg --hidden shortlog -G -r 10::