Mercurial > public > mercurial-scm > hg
comparison 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 |
comparison
equal
deleted
inserted
replaced
11277:2698a95f3f1b | 11278:7df88cdf47fd |
---|---|
10 import match as _match | 10 import match as _match |
11 | 11 |
12 elements = { | 12 elements = { |
13 "(": (20, ("group", 1, ")"), ("func", 1, ")")), | 13 "(": (20, ("group", 1, ")"), ("func", 1, ")")), |
14 "-": (19, ("negate", 19), ("minus", 19)), | 14 "-": (19, ("negate", 19), ("minus", 19)), |
15 "..": (17, None, ("dagrange", 17)), | 15 "::": (17, ("dagrangepre", 17), ("dagrange", 17), |
16 ":": (15, None, ("range", 15)), | 16 ("dagrangepost", 17)), |
17 "..": (17, ("dagrangepre", 17), ("dagrange", 17), | |
18 ("dagrangepost", 17)), | |
19 ":": (15, ("rangepre", 15), ("range", 15), ("rangepost", 15)), | |
17 "not": (10, ("not", 10)), | 20 "not": (10, ("not", 10)), |
18 "!": (10, ("not", 10)), | 21 "!": (10, ("not", 10)), |
19 "and": (5, None, ("and", 5)), | 22 "and": (5, None, ("and", 5)), |
20 "&": (5, None, ("and", 5)), | 23 "&": (5, None, ("and", 5)), |
21 "or": (4, None, ("or", 4)), | 24 "or": (4, None, ("or", 4)), |
34 pos, l = 0, len(program) | 37 pos, l = 0, len(program) |
35 while pos < l: | 38 while pos < l: |
36 c = program[pos] | 39 c = program[pos] |
37 if c.isspace(): # skip inter-token whitespace | 40 if c.isspace(): # skip inter-token whitespace |
38 pass | 41 pass |
39 elif c in "():,-|&+!": # handle simple operators | 42 elif c == ':' and program[pos:pos + 2] == '::': # look ahead carefully |
40 yield (c, None) | 43 yield ('::', None) |
44 pos += 1 # skip ahead | |
41 elif c == '.' and program[pos:pos + 2] == '..': # look ahead carefully | 45 elif c == '.' and program[pos:pos + 2] == '..': # look ahead carefully |
42 yield ('..', None) | 46 yield ('..', None) |
43 pos += 1 # skip ahead | 47 pos += 1 # skip ahead |
48 elif c in "():,-|&+!": # handle simple operators | |
49 yield (c, None) | |
44 elif c in '"\'': # handle quoted strings | 50 elif c in '"\'': # handle quoted strings |
45 pos += 1 | 51 pos += 1 |
46 s = pos | 52 s = pos |
47 while pos < l: # find closing quote | 53 while pos < l: # find closing quote |
48 d = program[pos] | 54 d = program[pos] |
124 n = getset(repo, subset, y)[-1] | 130 n = getset(repo, subset, y)[-1] |
125 if m < n: | 131 if m < n: |
126 return range(m, n + 1) | 132 return range(m, n + 1) |
127 return range(m, n - 1, -1) | 133 return range(m, n - 1, -1) |
128 | 134 |
135 def rangepreset(repo, subset, x): | |
136 return range(0, getset(repo, subset, x)[-1] + 1) | |
137 | |
138 def rangepostset(repo, subset, x): | |
139 return range(getset(repo, subset, x)[0], len(repo)) | |
140 | |
129 def dagrangeset(repo, subset, x, y): | 141 def dagrangeset(repo, subset, x, y): |
130 return andset(repo, subset, | 142 return andset(repo, subset, |
131 ('func', ('symbol', 'descendants'), x), | 143 ('func', ('symbol', 'descendants'), x), |
132 ('func', ('symbol', 'ancestors'), y)) | 144 ('func', ('symbol', 'ancestors'), y)) |
133 | 145 |
467 | 479 |
468 methods = { | 480 methods = { |
469 "negate": negate, | 481 "negate": negate, |
470 "minus": minusset, | 482 "minus": minusset, |
471 "range": rangeset, | 483 "range": rangeset, |
484 "rangepre": rangepreset, | |
485 "rangepost": rangepostset, | |
472 "dagrange": dagrangeset, | 486 "dagrange": dagrangeset, |
487 "dagrangepre": ancestors, | |
488 "dagrangepost": descendants, | |
473 "string": stringset, | 489 "string": stringset, |
474 "symbol": symbolset, | 490 "symbol": symbolset, |
475 "and": andset, | 491 "and": andset, |
476 "or": orset, | 492 "or": orset, |
477 "not": notset, | 493 "not": notset, |