2340 return None |
2340 return None |
2341 |
2341 |
2342 _opt2logrevset = { |
2342 _opt2logrevset = { |
2343 'no_merges': ('not merge()', None), |
2343 'no_merges': ('not merge()', None), |
2344 'only_merges': ('merge()', None), |
2344 'only_merges': ('merge()', None), |
2345 '_ancestors': ('ancestors(%(val)s)', None), |
2345 '_ancestors': ('ancestors(%r)', None), |
2346 '_fancestors': ('_firstancestors(%(val)s)', None), |
2346 '_fancestors': ('_firstancestors(%r)', None), |
2347 '_descendants': ('descendants(%(val)s)', None), |
2347 '_descendants': ('descendants(%r)', None), |
2348 '_fdescendants': ('_firstdescendants(%(val)s)', None), |
2348 '_fdescendants': ('_firstdescendants(%r)', None), |
2349 '_matchfiles': ('_matchfiles(%(val)s)', None), |
2349 '_matchfiles': (None, '_matchfiles(%ps)'), |
2350 'date': ('date(%(val)r)', None), |
2350 'date': ('date(%s)', None), |
2351 'branch': ('branch(%(val)r)', '%lr'), |
2351 'branch': ('branch(%s)', '%lr'), |
2352 '_patslog': ('filelog(%(val)r)', '%lr'), |
2352 '_patslog': ('filelog(%s)', '%lr'), |
2353 '_patsfollow': ('follow(%(val)r)', '%lr'), |
2353 '_patsfollow': ('follow(%s)', '%lr'), |
2354 '_patsfollowfirst': ('_followfirst(%(val)r)', '%lr'), |
2354 '_patsfollowfirst': ('_followfirst(%s)', '%lr'), |
2355 'keyword': ('keyword(%(val)r)', '%lr'), |
2355 'keyword': ('keyword(%s)', '%lr'), |
2356 'prune': ('ancestors(%(val)r)', 'not %lr'), |
2356 'prune': ('ancestors(%s)', 'not %lr'), |
2357 'user': ('user(%(val)r)', '%lr'), |
2357 'user': ('user(%s)', '%lr'), |
2358 } |
2358 } |
2359 |
2359 |
2360 def _makelogrevset(repo, pats, opts, revs): |
2360 def _makelogrevset(repo, pats, opts, revs): |
2361 """Return (expr, filematcher) where expr is a revset string built |
2361 """Return (expr, filematcher) where expr is a revset string built |
2362 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 |
2435 matchargs.append('p:' + p) |
2435 matchargs.append('p:' + p) |
2436 for p in opts.get('include', []): |
2436 for p in opts.get('include', []): |
2437 matchargs.append('i:' + p) |
2437 matchargs.append('i:' + p) |
2438 for p in opts.get('exclude', []): |
2438 for p in opts.get('exclude', []): |
2439 matchargs.append('x:' + p) |
2439 matchargs.append('x:' + p) |
2440 matchargs = ','.join(('%r' % p) for p in matchargs) |
|
2441 opts['_matchfiles'] = matchargs |
2440 opts['_matchfiles'] = matchargs |
2442 if follow: |
2441 if follow: |
2443 opts[fnopats[0][followfirst]] = '.' |
2442 opts[fnopats[0][followfirst]] = '.' |
2444 else: |
2443 else: |
2445 if follow: |
2444 if follow: |
2473 if not val: |
2472 if not val: |
2474 continue |
2473 continue |
2475 if op not in _opt2logrevset: |
2474 if op not in _opt2logrevset: |
2476 continue |
2475 continue |
2477 revop, listop = _opt2logrevset[op] |
2476 revop, listop = _opt2logrevset[op] |
2478 if '%(val)' not in revop: |
2477 if revop and '%' not in revop: |
2479 expr.append(revop) |
2478 expr.append(revop) |
|
2479 elif not listop: |
|
2480 expr.append(revsetlang.formatspec(revop, val)) |
2480 else: |
2481 else: |
2481 if not listop: |
2482 if revop: |
2482 e = revop % {'val': val} |
2483 val = [revsetlang.formatspec(revop, v) for v in val] |
2483 else: |
2484 expr.append(revsetlang.formatspec(listop, val)) |
2484 e = [revop % {'val': v} for v in val] |
|
2485 e = revsetlang.formatspec(listop, e) |
|
2486 expr.append(e) |
|
2487 |
2485 |
2488 if expr: |
2486 if expr: |
2489 expr = '(' + ' and '.join(expr) + ')' |
2487 expr = '(' + ' and '.join(expr) + ')' |
2490 else: |
2488 else: |
2491 expr = None |
2489 expr = None |