--- a/hgext/evolve.py Wed Jun 24 16:38:24 2015 -0700
+++ b/hgext/evolve.py Wed Jun 24 16:54:23 2015 -0700
@@ -1415,6 +1415,24 @@
rdependencies[succ].add(r)
return dependencies, rdependencies
+def _dedupedivergents(repo, revs):
+ """Dedupe the divergents revs in revs to get one from each group with the
+ lowest revision numbers
+ """
+ repo = repo.unfiltered()
+ res = set()
+ # To not reevaluate divergents of the same group once one is encountered
+ discarded = set()
+ for rev in revs:
+ if rev in discarded:
+ continue
+ divergent = repo[rev]
+ base, others = divergentdata(divergent)
+ othersrevs = [o.rev() for o in others]
+ res.add(min([divergent.rev()] + othersrevs))
+ discarded.update(othersrevs)
+ return res
+
def _selectrevs(repo, allopt, revopt, anyopt, targetcat):
"""select troubles in repo matching according to given options"""
revs = set()
@@ -1424,6 +1442,9 @@
revs = scmutil.revrange(repo, revopt) & revs
elif not anyopt and targetcat == 'unstable':
revs = set(_aspiringdescendant(repo, repo.revs('(.::) - obsolete()::')))
+ if targetcat == 'divergent':
+ # Pick one divergent per group of divergents
+ revs = _dedupedivergents(repo, revs)
elif anyopt:
revs = repo.revs('first(%s())' % (targetcat))
elif targetcat == 'unstable':