[PATCH 4 of 7] revset: add inspection data to all filter() calls
Yuya Nishihara
yuya at tcha.org
Sat Feb 27 14:38:18 UTC 2016
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1455361557 -32400
# Sat Feb 13 20:05:57 2016 +0900
# Node ID 48bd5b691d1a6ae09a112dc87caeeaa941228083
# Parent 254f83b3fd6cd28a0648d89ed5815d1a75b30242
revset: add inspection data to all filter() calls
This is useful for debugging revset construction.
diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -629,7 +629,8 @@ def author(repo, subset, x):
# i18n: "author" is a keyword
n = encoding.lower(getstring(x, _("author requires a string")))
kind, pattern, matcher = _substringmatcher(n)
- return subset.filter(lambda x: matcher(encoding.lower(repo[x].user())))
+ return subset.filter(lambda x: matcher(encoding.lower(repo[x].user())),
+ condrepr=('<user %r>', n))
@predicate('bisect(string)', safe=True)
def bisect(repo, subset, x):
@@ -715,19 +716,22 @@ def branch(repo, subset, x):
# note: falls through to the revspec case if no branch with
# this name exists and pattern kind is not specified explicitly
if pattern in repo.branchmap():
- return subset.filter(lambda r: matcher(getbi(r)[0]))
+ return subset.filter(lambda r: matcher(getbi(r)[0]),
+ condrepr=('<branch %r>', b))
if b.startswith('literal:'):
raise error.RepoLookupError(_("branch '%s' does not exist")
% pattern)
else:
- return subset.filter(lambda r: matcher(getbi(r)[0]))
+ return subset.filter(lambda r: matcher(getbi(r)[0]),
+ condrepr=('<branch %r>', b))
s = getset(repo, fullreposet(repo), x)
b = set()
for r in s:
b.add(getbi(r)[0])
c = s.__contains__
- return subset.filter(lambda r: c(r) or getbi(r)[0] in b)
+ return subset.filter(lambda r: c(r) or getbi(r)[0] in b,
+ condrepr=lambda: '<branch %r>' % sorted(b))
@predicate('bumped()', safe=True)
def bumped(repo, subset, x):
@@ -782,7 +786,7 @@ def checkstatus(repo, subset, pat, field
if m(f):
return True
- return subset.filter(matches)
+ return subset.filter(matches, condrepr=('<status[%r] %r>', field, pat))
def _children(repo, narrow, parentset):
if not parentset:
@@ -814,7 +818,8 @@ def closed(repo, subset, x):
"""
# i18n: "closed" is a keyword
getargs(x, 0, 0, _("closed takes no arguments"))
- return subset.filter(lambda r: repo[r].closesbranch())
+ return subset.filter(lambda r: repo[r].closesbranch(),
+ condrepr='<branch closed>')
@predicate('contains(pattern)')
def contains(repo, subset, x):
@@ -841,7 +846,7 @@ def contains(repo, subset, x):
return True
return False
- return subset.filter(matches)
+ return subset.filter(matches, condrepr=('<contains %r>', pat))
@predicate('converted([id])', safe=True)
def converted(repo, subset, x):
@@ -863,7 +868,8 @@ def converted(repo, subset, x):
source = repo[r].extra().get('convert_revision', None)
return source is not None and (rev is None or source.startswith(rev))
- return subset.filter(lambda r: _matchvalue(r))
+ return subset.filter(lambda r: _matchvalue(r),
+ condrepr=('<converted %r>', rev))
@predicate('date(interval)', safe=True)
def date(repo, subset, x):
@@ -872,7 +878,8 @@ def date(repo, subset, x):
# i18n: "date" is a keyword
ds = getstring(x, _("date requires a string"))
dm = util.matchdate(ds)
- return subset.filter(lambda x: dm(repo[x].date()[0]))
+ return subset.filter(lambda x: dm(repo[x].date()[0]),
+ condrepr=('<date %r>', ds))
@predicate('desc(string)', safe=True)
def desc(repo, subset, x):
@@ -885,7 +892,7 @@ def desc(repo, subset, x):
c = repo[x]
return ds in encoding.lower(c.description())
- return subset.filter(matches)
+ return subset.filter(matches, condrepr=('<desc %r>', ds))
def _descendants(repo, subset, x, followfirst=False):
roots = getset(repo, fullreposet(repo), x)
@@ -960,7 +967,8 @@ def destination(repo, subset, x):
r = src
src = _getrevsource(repo, r)
- return subset.filter(dests.__contains__)
+ return subset.filter(dests.__contains__,
+ condrepr=lambda: '<destination %r>' % sorted(dests))
@predicate('divergent()', safe=True)
def divergent(repo, subset, x):
@@ -1009,7 +1017,8 @@ def extra(repo, subset, x):
extra = repo[r].extra()
return label in extra and (value is None or matcher(extra[label]))
- return subset.filter(lambda r: _matchvalue(r))
+ return subset.filter(lambda r: _matchvalue(r),
+ condrepr=('<extra[%r] %r>', label, value))
@predicate('filelog(pattern)', safe=True)
def filelog(repo, subset, x):
@@ -1147,7 +1156,7 @@ def grep(repo, subset, x):
return True
return False
- return subset.filter(matches)
+ return subset.filter(matches, condrepr=('<grep %r>', gr.pattern))
@predicate('_matchfiles', safe=True)
def _matchfiles(repo, subset, x):
@@ -1208,7 +1217,10 @@ def _matchfiles(repo, subset, x):
return True
return False
- return subset.filter(matches)
+ return subset.filter(matches,
+ condrepr=('<matchfiles patterns=%r, include=%r '
+ 'exclude=%r, default=%r, rev=%r>',
+ pats, inc, exc, default, rev))
@predicate('file(pattern)', safe=True)
def hasfile(repo, subset, x):
@@ -1269,7 +1281,7 @@ def keyword(repo, subset, x):
return any(kw in encoding.lower(t)
for t in c.files() + [c.user(), c.description()])
- return subset.filter(matches)
+ return subset.filter(matches, condrepr=('<keyword %r>', kw))
@predicate('limit(set[, n[, offset]])', safe=True)
def limit(repo, subset, x):
@@ -1355,7 +1367,8 @@ def merge(repo, subset, x):
# i18n: "merge" is a keyword
getargs(x, 0, 0, _("merge takes no arguments"))
cl = repo.changelog
- return subset.filter(lambda r: cl.parentrevs(r)[1] != -1)
+ return subset.filter(lambda r: cl.parentrevs(r)[1] != -1,
+ condrepr='<merge>')
@predicate('branchpoint()', safe=True)
def branchpoint(repo, subset, x):
@@ -1374,7 +1387,8 @@ def branchpoint(repo, subset, x):
for p in cl.parentrevs(r):
if p >= baserev:
parentscount[p - baserev] += 1
- return subset.filter(lambda r: parentscount[r - baserev] > 1)
+ return subset.filter(lambda r: parentscount[r - baserev] > 1,
+ condrepr='<branchpoint>')
@predicate('min(set)', safe=True)
def minrev(repo, subset, x):
@@ -1631,7 +1645,8 @@ def _phase(repo, subset, target):
else:
phase = repo._phasecache.phase
condition = lambda r: phase(repo, r) == target
- return subset.filter(condition, cache=False)
+ return subset.filter(condition, condrepr=('<phase %r>', target),
+ cache=False)
@predicate('draft()', safe=True)
def draft(repo, subset, x):
@@ -1704,7 +1719,8 @@ def _notpublic(repo, subset, x):
phase = repo._phasecache.phase
target = phases.public
condition = lambda r: phase(repo, r) != target
- return subset.filter(condition, cache=False)
+ return subset.filter(condition, condrepr=('<phase %r>', target),
+ cache=False)
@predicate('public()', safe=True)
def public(repo, subset, x):
@@ -1714,7 +1730,8 @@ def public(repo, subset, x):
phase = repo._phasecache.phase
target = phases.public
condition = lambda r: phase(repo, r) == target
- return subset.filter(condition, cache=False)
+ return subset.filter(condition, condrepr=('<phase %r>', target),
+ cache=False)
@predicate('remote([id [,path]])', safe=True)
def remote(repo, subset, x):
@@ -1889,7 +1906,7 @@ def matching(repo, subset, x):
return True
return False
- return subset.filter(matches)
+ return subset.filter(matches, condrepr=('<matching%r %r>', fields, revs))
@predicate('reverse(set)', safe=True)
def reverse(repo, subset, x):
@@ -1910,7 +1927,7 @@ def roots(repo, subset, x):
if 0 <= p and p in s:
return False
return True
- return subset & s.filter(filter)
+ return subset & s.filter(filter, condrepr='<roots>')
@predicate('sort(set[, [-]key...])', safe=True)
def sort(repo, subset, x):
@@ -2017,7 +2034,7 @@ def subrepo(repo, subset, x):
return False
- return subset.filter(matches)
+ return subset.filter(matches, condrepr=('<subrepo %r>', pat))
def _substringmatcher(pattern):
kind, pattern, matcher = util.stringmatcher(pattern)
diff --git a/tests/test-revset.t b/tests/test-revset.t
--- a/tests/test-revset.t
+++ b/tests/test-revset.t
@@ -545,14 +545,16 @@ test ancestors
('string', '\x08issue\\d+'))
* set:
<filteredset
- <fullreposet+ 0:9>>
+ <fullreposet+ 0:9>,
+ <grep '\x08issue\\d+'>>
$ try 'grep(r"\bissue\d+")'
(func
('symbol', 'grep')
('string', '\\bissue\\d+'))
* set:
<filteredset
- <fullreposet+ 0:9>>
+ <fullreposet+ 0:9>,
+ <grep '\\bissue\\d+'>>
6
$ try 'grep(r"\")'
hg: parse error at 7: unterminated string
@@ -1593,7 +1595,8 @@ aliases:
None)
* set:
<filteredset
- <fullreposet+ 0:9>>
+ <fullreposet+ 0:9>,
+ <merge>>
6
$ HGPLAIN=1
@@ -1612,7 +1615,8 @@ aliases:
None)
* set:
<filteredset
- <fullreposet+ 0:9>>
+ <fullreposet+ 0:9>,
+ <merge>>
6
$ unset HGPLAIN
@@ -1666,7 +1670,8 @@ test alias recursion
* set:
<addset+
<filteredset
- <fullreposet+ 0:9>>,
+ <fullreposet+ 0:9>,
+ <merge>>,
<generatorset+>>
6
7
@@ -1830,7 +1835,8 @@ far away.
<addset
<baseset [9]>,
<filteredset
- <fullreposet+ 0:9>>>
+ <fullreposet+ 0:9>,
+ <desc '$1'>>>
9
$ try 'd(2:5)'
More information about the Mercurial-devel
mailing list