fileset: parse argument of size() by predicate function
This change is necessary to pass in a size expression to predicatematcher.
See the next patch.
--- a/mercurial/fileset.py Sun Jun 10 22:19:56 2018 +0900
+++ b/mercurial/fileset.py Sun Jun 10 20:58:10 2018 +0900
@@ -384,11 +384,9 @@
except ValueError:
raise error.ParseError(_("couldn't parse size: %s") % s)
-def sizematcher(x):
+def sizematcher(expr):
"""Return a function(size) -> bool from the ``size()`` expression"""
-
- # i18n: "size" is a keyword
- expr = getstring(x, _("size requires an expression")).strip()
+ expr = expr.strip()
if '-' in expr: # do we have a range?
a, b = expr.split('-', 1)
a = util.sizetoint(a)
@@ -420,7 +418,9 @@
- size('>= .5MB') - files at least 524288 bytes
- size('4k - 1MB') - files from 4096 bytes to 1048576 bytes
"""
- m = sizematcher(x)
+ # i18n: "size" is a keyword
+ expr = getstring(x, _("size requires an expression"))
+ m = sizematcher(expr)
return [f for f in mctx.existing() if m(mctx.ctx[f].size())]
@predicate('encoding(name)', callexisting=True)
--- a/mercurial/minifileset.py Sun Jun 10 22:19:56 2018 +0900
+++ b/mercurial/minifileset.py Sun Jun 10 20:58:10 2018 +0900
@@ -14,6 +14,11 @@
pycompat,
)
+def _sizep(x):
+ # i18n: "size" is a keyword
+ expr = fileset.getstring(x, _("size requires an expression"))
+ return fileset.sizematcher(expr)
+
def _compile(tree):
if not tree:
raise error.ParseError(_("missing argument"))
@@ -50,7 +55,7 @@
symbols = {
'all': lambda n, s: True,
'none': lambda n, s: False,
- 'size': lambda n, s: fileset.sizematcher(tree[2])(s),
+ 'size': lambda n, s: _sizep(tree[2])(s),
}
name = fileset.getsymbol(tree[1])