mercurial/revset.py
changeset 11278 7df88cdf47fd
parent 11275 c9ce8ecd6ca1
child 11279 62ccf4cd6e7f
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,