# HG changeset patch # User Augie Fackler # Date 2011-04-13 17:30:41 # Node ID 34f577007ffe1743b81798bdfa4221932e3f8a23 # Parent c3372529247f1b77ae2ed0b9f5379c73e1209c3c revsets: preserve ordering with the or operator This is valuable because now revsets like 'bookmarks() or tip' will always show tip after bookmarks unless tip was itself a bookmark. This is a somewhat contrived example, but this behavior is useful for "where am I" type aliases that use log and revsets. diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -156,9 +156,10 @@ def andset(repo, subset, x, y): return getset(repo, getset(repo, subset, x), y) def orset(repo, subset, x, y): - s = set(getset(repo, subset, x)) - s |= set(getset(repo, [r for r in subset if r not in s], y)) - return [r for r in subset if r in s] + xl = getset(repo, subset, x) + s = set(xl) + yl = getset(repo, [r for r in subset if r not in s], y) + return xl + yl def notset(repo, subset, x): s = set(getset(repo, subset, x)) diff --git a/tests/test-revset.t b/tests/test-revset.t --- a/tests/test-revset.t +++ b/tests/test-revset.t @@ -369,3 +369,8 @@ issue2654: report a parse error if the r hg: parse error at 2: invalid token [255] +or operator should preserve ordering: + $ log 'reverse(2::4) or tip' + 4 + 2 + 9