Mercurial > hg
changeset 35644:7a0a90d63a8c
log: use revsetlang.formatspec() to concatenate list expression
This rewrites 'not ancestors(x) and not ...' as 'not (ancestors(x) or ...)'
so we can use '%lr'. 'isinstance(val, list)' is replaced with 'listop' to
make sure 'listop' is applied.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Tue, 02 Jan 2018 17:13:18 +0900 |
parents | 668c5a527eff |
children | b6b7855c79aa |
files | mercurial/cmdutil.py tests/test-glog.t |
diffstat | 2 files changed, 36 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- 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:
--- a/tests/test-glog.t Tue Jan 02 17:00:48 2018 +0900 +++ b/tests/test-glog.t Tue Jan 02 17:13:18 2018 +0900 @@ -1500,12 +1500,14 @@ (func (symbol 'branch') (string 'default')) - (func - (symbol 'branch') - (string 'branch')) - (func - (symbol 'branch') - (string 'branch')))) + (or + (list + (func + (symbol 'branch') + (string 'branch')) + (func + (symbol 'branch') + (string 'branch')))))) <filteredset <spanset- 0:37>, <addset @@ -1571,26 +1573,25 @@ [255] $ testlog --prune 31 --prune 32 [] - (and - (not - (func - (symbol 'ancestors') - (string '31'))) - (not - (func - (symbol 'ancestors') - (string '32')))) + (not + (or + (list + (func + (symbol 'ancestors') + (string '31')) + (func + (symbol 'ancestors') + (string '32'))))) <filteredset - <filteredset - <spanset- 0:37>, - <not + <spanset- 0:37>, + <not + <addset <filteredset <spanset- 0:37>, - <generatorsetdesc+>>>>, - <not - <filteredset - <spanset- 0:37>, - <generatorsetdesc+>>>> + <generatorsetdesc+>>, + <filteredset + <spanset- 0:37>, + <generatorsetdesc+>>>>> Dedicated repo for --follow and paths filtering. The g is crafted to have 2 filelog topological heads in a linear changeset graph.