Mercurial > public > mercurial-scm > hg-stable
diff mercurial/revset.py @ 11456:88abbb046e66 stable
revset: deal with empty sets in range endpoints
(spotted by Julian Cowley <julian@lava.net>)
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 28 Jun 2010 11:07:27 -0500 |
parents | 0f623839a5cc |
children | 6b836d5c8c9e |
line wrap: on
line diff
--- a/mercurial/revset.py Sun Jun 27 18:20:49 2010 -0500 +++ b/mercurial/revset.py Mon Jun 28 11:07:27 2010 -0500 @@ -129,11 +129,24 @@ return stringset(repo, subset, x) def rangeset(repo, subset, x, y): - m = getset(repo, subset, x)[0] - n = getset(repo, subset, y)[-1] + m = getset(repo, subset, x) + if not m: + m = getset(repo, range(len(repo)), x) + + n = getset(repo, subset, y) + if not n: + n = getset(repo, range(len(repo)), y) + + if not m or not n: + return [] + m, n = m[0], n[-1] + if m < n: - return range(m, n + 1) - return range(m, n - 1, -1) + r = range(m, n + 1) + else: + r = range(m, n - 1, -1) + s = set(subset) + return [x for x in r if x in s] def andset(repo, subset, x, y): return getset(repo, getset(repo, subset, x), y) @@ -222,11 +235,15 @@ def ancestors(repo, subset, x): args = getset(repo, range(len(repo)), x) + if not args: + return [] s = set(repo.changelog.ancestors(*args)) | set(args) return [r for r in subset if r in s] def descendants(repo, subset, x): args = getset(repo, range(len(repo)), x) + if not args: + return [] s = set(repo.changelog.descendants(*args)) | set(args) return [r for r in subset if r in s]