diff -r 668c5a527eff -r 7a0a90d63a8c mercurial/cmdutil.py --- a/mercurial/cmdutil.py Tue Jan 02 17:00:48 2018 +0900 +++ b/mercurial/cmdutil.py Tue Jan 02 17:13:18 2018 +0900 @@ -41,6 +41,7 @@ registrar, revlog, revset, + revsetlang, scmutil, smartset, templatekw, @@ -2347,13 +2348,13 @@ '_fdescendants': ('_firstdescendants(%(val)s)', None), '_matchfiles': ('_matchfiles(%(val)s)', None), 'date': ('date(%(val)r)', None), - 'branch': ('branch(%(val)r)', ' or '), - '_patslog': ('filelog(%(val)r)', ' or '), - '_patsfollow': ('follow(%(val)r)', ' or '), - '_patsfollowfirst': ('_followfirst(%(val)r)', ' or '), - 'keyword': ('keyword(%(val)r)', ' or '), - 'prune': ('not ancestors(%(val)r)', ' and '), - 'user': ('user(%(val)r)', ' or '), + 'branch': ('branch(%(val)r)', '%lr'), + '_patslog': ('filelog(%(val)r)', '%lr'), + '_patsfollow': ('follow(%(val)r)', '%lr'), + '_patsfollowfirst': ('_followfirst(%(val)r)', '%lr'), + 'keyword': ('keyword(%(val)r)', '%lr'), + 'prune': ('ancestors(%(val)r)', 'not %lr'), + 'user': ('user(%(val)r)', '%lr'), } def _makelogrevset(repo, pats, opts, revs): @@ -2473,14 +2474,15 @@ continue if op not in _opt2logrevset: continue - revop, andor = _opt2logrevset[op] + revop, listop = _opt2logrevset[op] if '%(val)' not in revop: expr.append(revop) else: - if not isinstance(val, list): + if not listop: e = revop % {'val': val} else: - e = '(' + andor.join((revop % {'val': v}) for v in val) + ')' + e = [revop % {'val': v} for v in val] + e = revsetlang.formatspec(listop, e) expr.append(e) if expr: