# HG changeset patch # User Augie Fackler # Date 1302715841 18000 # 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 -r c3372529247f -r 34f577007ffe mercurial/revset.py --- a/mercurial/revset.py Wed Apr 13 07:40:24 2011 +0530 +++ b/mercurial/revset.py Wed Apr 13 12:30:41 2011 -0500 @@ -156,9 +156,10 @@ 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 -r c3372529247f -r 34f577007ffe tests/test-revset.t --- a/tests/test-revset.t Wed Apr 13 07:40:24 2011 +0530 +++ b/tests/test-revset.t Wed Apr 13 12:30:41 2011 -0500 @@ -369,3 +369,8 @@ hg: parse error at 2: invalid token [255] +or operator should preserve ordering: + $ log 'reverse(2::4) or tip' + 4 + 2 + 9