Mercurial > hg > mercurial-source
diff mercurial/revset.py @ 11278:7df88cdf47fd
revset: add support for prefix and suffix versions of : and ::
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 02 Jun 2010 14:07:46 -0500 |
parents | c9ce8ecd6ca1 |
children | 62ccf4cd6e7f |
line wrap: on
line diff
--- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -12,8 +12,11 @@ elements = { "(": (20, ("group", 1, ")"), ("func", 1, ")")), "-": (19, ("negate", 19), ("minus", 19)), - "..": (17, None, ("dagrange", 17)), - ":": (15, None, ("range", 15)), + "::": (17, ("dagrangepre", 17), ("dagrange", 17), + ("dagrangepost", 17)), + "..": (17, ("dagrangepre", 17), ("dagrange", 17), + ("dagrangepost", 17)), + ":": (15, ("rangepre", 15), ("range", 15), ("rangepost", 15)), "not": (10, ("not", 10)), "!": (10, ("not", 10)), "and": (5, None, ("and", 5)), @@ -36,11 +39,14 @@ c = program[pos] if c.isspace(): # skip inter-token whitespace pass - elif c in "():,-|&+!": # handle simple operators - yield (c, None) + elif c == ':' and program[pos:pos + 2] == '::': # look ahead carefully + yield ('::', None) + pos += 1 # skip ahead elif c == '.' and program[pos:pos + 2] == '..': # look ahead carefully yield ('..', None) pos += 1 # skip ahead + elif c in "():,-|&+!": # handle simple operators + yield (c, None) elif c in '"\'': # handle quoted strings pos += 1 s = pos @@ -126,6 +132,12 @@ return range(m, n + 1) return range(m, n - 1, -1) +def rangepreset(repo, subset, x): + return range(0, getset(repo, subset, x)[-1] + 1) + +def rangepostset(repo, subset, x): + return range(getset(repo, subset, x)[0], len(repo)) + def dagrangeset(repo, subset, x, y): return andset(repo, subset, ('func', ('symbol', 'descendants'), x), @@ -469,7 +481,11 @@ "negate": negate, "minus": minusset, "range": rangeset, + "rangepre": rangepreset, + "rangepost": rangepostset, "dagrange": dagrangeset, + "dagrangepre": ancestors, + "dagrangepost": descendants, "string": stringset, "symbol": symbolset, "and": andset,