diff --git a/mercurial/help/revsets.txt b/mercurial/help/revsets.txt --- a/mercurial/help/revsets.txt +++ b/mercurial/help/revsets.txt @@ -100,6 +100,9 @@ The following predicates are supported: ``max(set)`` Changeset with highest revision number in set. +``min(set)`` + Changeset with lowest revision number in set. + ``merge()`` Changeset is a merge changeset. diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -195,6 +195,14 @@ def maxrev(repo, subset, x): return [m] return [] +def minrev(repo, subset, x): + s = getset(repo, subset, x) + if s: + m = min(s) + if m in subset: + return [m] + return [] + def limit(repo, subset, x): l = getargs(x, 2, 2, _("limit wants two arguments")) try: @@ -466,6 +474,7 @@ symbols = { "keyword": keyword, "limit": limit, "max": maxrev, + "min": minrev, "merge": merge, "modifies": modifies, "outgoing": outgoing, diff --git a/tests/test-revset b/tests/test-revset --- a/tests/test-revset +++ b/tests/test-revset @@ -110,6 +110,7 @@ log 'heads(6::)' log 'keyword(issue)' log 'limit(head(), 1)' log 'max(contains(a))' +log 'min(contains(a))' log 'merge()' log 'modifies(b)' log 'p1(merge())' diff --git a/tests/test-revset.out b/tests/test-revset.out --- a/tests/test-revset.out +++ b/tests/test-revset.out @@ -152,6 +152,8 @@ 6 0 % log 'max(contains(a))' 5 +% log 'min(contains(a))' +0 % log 'merge()' 6 % log 'modifies(b)'