mercurial/cmdutil.py
changeset 35644 7a0a90d63a8c
parent 35643 668c5a527eff
child 35645 b6b7855c79aa
equal deleted inserted replaced
35643:668c5a527eff 35644:7a0a90d63a8c
    39     pathutil,
    39     pathutil,
    40     pycompat,
    40     pycompat,
    41     registrar,
    41     registrar,
    42     revlog,
    42     revlog,
    43     revset,
    43     revset,
       
    44     revsetlang,
    44     scmutil,
    45     scmutil,
    45     smartset,
    46     smartset,
    46     templatekw,
    47     templatekw,
    47     templater,
    48     templater,
    48     util,
    49     util,
  2345     '_fancestors':      ('_firstancestors(%(val)s)', None),
  2346     '_fancestors':      ('_firstancestors(%(val)s)', None),
  2346     '_descendants':     ('descendants(%(val)s)', None),
  2347     '_descendants':     ('descendants(%(val)s)', None),
  2347     '_fdescendants':    ('_firstdescendants(%(val)s)', None),
  2348     '_fdescendants':    ('_firstdescendants(%(val)s)', None),
  2348     '_matchfiles':      ('_matchfiles(%(val)s)', None),
  2349     '_matchfiles':      ('_matchfiles(%(val)s)', None),
  2349     'date':             ('date(%(val)r)', None),
  2350     'date':             ('date(%(val)r)', None),
  2350     'branch':           ('branch(%(val)r)', ' or '),
  2351     'branch':           ('branch(%(val)r)', '%lr'),
  2351     '_patslog':         ('filelog(%(val)r)', ' or '),
  2352     '_patslog':         ('filelog(%(val)r)', '%lr'),
  2352     '_patsfollow':      ('follow(%(val)r)', ' or '),
  2353     '_patsfollow':      ('follow(%(val)r)', '%lr'),
  2353     '_patsfollowfirst': ('_followfirst(%(val)r)', ' or '),
  2354     '_patsfollowfirst': ('_followfirst(%(val)r)', '%lr'),
  2354     'keyword':          ('keyword(%(val)r)', ' or '),
  2355     'keyword':          ('keyword(%(val)r)', '%lr'),
  2355     'prune':            ('not ancestors(%(val)r)', ' and '),
  2356     'prune':            ('ancestors(%(val)r)', 'not %lr'),
  2356     'user':             ('user(%(val)r)', ' or '),
  2357     'user':             ('user(%(val)r)', '%lr'),
  2357 }
  2358 }
  2358 
  2359 
  2359 def _makelogrevset(repo, pats, opts, revs):
  2360 def _makelogrevset(repo, pats, opts, revs):
  2360     """Return (expr, filematcher) where expr is a revset string built
  2361     """Return (expr, filematcher) where expr is a revset string built
  2361     from log options and file patterns or None. If --stat or --patch
  2362     from log options and file patterns or None. If --stat or --patch
  2471     for op, val in sorted(opts.iteritems()):
  2472     for op, val in sorted(opts.iteritems()):
  2472         if not val:
  2473         if not val:
  2473             continue
  2474             continue
  2474         if op not in _opt2logrevset:
  2475         if op not in _opt2logrevset:
  2475             continue
  2476             continue
  2476         revop, andor = _opt2logrevset[op]
  2477         revop, listop = _opt2logrevset[op]
  2477         if '%(val)' not in revop:
  2478         if '%(val)' not in revop:
  2478             expr.append(revop)
  2479             expr.append(revop)
  2479         else:
  2480         else:
  2480             if not isinstance(val, list):
  2481             if not listop:
  2481                 e = revop % {'val': val}
  2482                 e = revop % {'val': val}
  2482             else:
  2483             else:
  2483                 e = '(' + andor.join((revop % {'val': v}) for v in val) + ')'
  2484                 e = [revop % {'val': v} for v in val]
       
  2485                 e = revsetlang.formatspec(listop, e)
  2484             expr.append(e)
  2486             expr.append(e)
  2485 
  2487 
  2486     if expr:
  2488     if expr:
  2487         expr = '(' + ' and '.join(expr) + ')'
  2489         expr = '(' + ' and '.join(expr) + ')'
  2488     else:
  2490     else: