diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -646,6 +646,15 @@ def destination(repo, subset, x): return [r for r in subset if r in dests] +def divergent(repo, subset, x): + """``divergent()`` + Final successors of changesets with an alternative set of final successors. + """ + # i18n: "divergent" is a keyword + getargs(x, 0, 0, _("divergent takes no arguments")) + divergent = obsmod.getrevs(repo, 'divergent') + return [r for r in subset if r in divergent] + def draft(repo, subset, x): """``draft()`` Changeset in draft phase.""" @@ -1541,6 +1550,7 @@ symbols = { "descendants": descendants, "_firstdescendants": _firstdescendants, "destination": destination, + "divergent": divergent, "draft": draft, "extinct": extinct, "extra": extra, diff --git a/tests/test-obsolete-divergent.t b/tests/test-obsolete-divergent.t --- a/tests/test-obsolete-divergent.t +++ b/tests/test-obsolete-divergent.t @@ -81,6 +81,9 @@ A_1 have two direct and divergent succes 82623d38b9ba 392fd25390da 392fd25390da + $ hg log -r 'divergent()' + 2:82623d38b9ba A_1 + 3:392fd25390da A_2 $ cd .. @@ -116,6 +119,9 @@ indirect divergence with known changeset 01f36c5a8fda 01f36c5a8fda 01f36c5a8fda + $ hg log -r 'divergent()' + 2:82623d38b9ba A_1 + 4:01f36c5a8fda A_3 $ cd .. @@ -145,6 +151,9 @@ indirect divergence with known changeset 82623d38b9ba 392fd25390da 392fd25390da + $ hg log -r 'divergent()' + 2:82623d38b9ba A_1 + 3:392fd25390da A_2 $ cd .. do not take unknown node in account if they are final @@ -195,6 +204,7 @@ divergence that converge again is not di 01f36c5a8fda 01f36c5a8fda 01f36c5a8fda + $ hg log -r 'divergent()' $ cd .. split is not divergences @@ -220,6 +230,7 @@ split is not divergences 82623d38b9ba 392fd25390da 392fd25390da + $ hg log -r 'divergent()' Even when subsequente rewriting happen @@ -266,6 +277,7 @@ Even when subsequente rewriting happen e442cfc57690 e442cfc57690 e442cfc57690 + $ hg log -r 'divergent()' Check more complexe obsolescence graft (with divergence) @@ -334,6 +346,11 @@ Check more complexe obsolescence graft ( 14608b260df8 bed64f5d2f5a bed64f5d2f5a + $ hg log -r 'divergent()' + 4:01f36c5a8fda A_3 + 8:7ae126973a96 A_7 + 9:14608b260df8 A_8 + 10:bed64f5d2f5a A_9 fix the divergence @@ -393,6 +410,7 @@ fix the divergence a139f71be9da a139f71be9da a139f71be9da + $ hg log -r 'divergent()' $ cd ..