diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -223,13 +223,9 @@ def symbolset(repo, subset, x): return stringset(repo, subset, x) def rangeset(repo, subset, x, y): - m = getset(repo, subset, x) - if not m: - m = getset(repo, list(repo), x) - - n = getset(repo, subset, y) - if not n: - n = getset(repo, list(repo), y) + cl = repo.changelog + m = getset(repo, cl, x) + n = getset(repo, cl, y) if not m or not n: return [] @@ -326,7 +322,7 @@ def ancestorspec(repo, subset, x, n): raise error.ParseError(_("~ expects a number")) ps = set() cl = repo.changelog - for r in getset(repo, subset, x): + for r in getset(repo, cl, x): for i in range(n): r = cl.parentrevs(r)[0] ps.add(r) @@ -1139,7 +1135,7 @@ def parentspec(repo, subset, x, n): raise error.ParseError(_("^ expects a number 0, 1, or 2")) ps = set() cl = repo.changelog - for r in getset(repo, subset, x): + for r in getset(repo, cl, x): if n == 0: ps.add(r) elif n == 1: diff --git a/tests/test-revset.t b/tests/test-revset.t --- a/tests/test-revset.t +++ b/tests/test-revset.t @@ -758,6 +758,37 @@ test revsets started with 40-chars hash $ hg log -r "${ISSUE3669_TIP}^" --template '{rev}\n' 8 +test or-ed indirect predicates (issue3775) + + $ log '6 or 6^1' | sort + 5 + 6 + $ log '6^1 or 6' | sort + 5 + 6 + $ log '4 or 4~1' | sort + 2 + 4 + $ log '4~1 or 4' | sort + 2 + 4 + $ log '(0 or 2):(4 or 6) or 0 or 6' | sort + 0 + 1 + 2 + 3 + 4 + 5 + 6 + $ log '0 or 6 or (0 or 2):(4 or 6)' | sort + 0 + 1 + 2 + 3 + 4 + 5 + 6 + tests for 'remote()' predicate: #. (csets in remote) (id) (remote) 1. less than local current branch "default"