mercurial/fileset.py
changeset 19194 1d08df65cd3c
parent 18842 3ce3f2b059a1
child 19470 19ac0d8ee9a2
equal deleted inserted replaced
19191:ab9de1e8fc36 19194:1d08df65cd3c
   261         r = re.compile(getstring(x, _("grep requires a pattern")))
   261         r = re.compile(getstring(x, _("grep requires a pattern")))
   262     except re.error, e:
   262     except re.error, e:
   263         raise error.ParseError(_('invalid match pattern: %s') % e)
   263         raise error.ParseError(_('invalid match pattern: %s') % e)
   264     return [f for f in mctx.existing() if r.search(mctx.ctx[f].data())]
   264     return [f for f in mctx.existing() if r.search(mctx.ctx[f].data())]
   265 
   265 
   266 _units = dict(k=2**10, K=2**10, kB=2**10, KB=2**10,
       
   267               M=2**20, MB=2**20, G=2**30, GB=2**30)
       
   268 
       
   269 def _sizetoint(s):
       
   270     try:
       
   271         s = s.strip()
       
   272         for k, v in _units.items():
       
   273             if s.endswith(k):
       
   274                 return int(float(s[:-len(k)]) * v)
       
   275         return int(s)
       
   276     except ValueError:
       
   277         raise error.ParseError(_("couldn't parse size: %s") % s)
       
   278 
       
   279 def _sizetomax(s):
   266 def _sizetomax(s):
   280     try:
   267     try:
   281         s = s.strip()
   268         s = s.strip()
   282         for k, v in _units.items():
   269         for k, v in util._sizeunits:
   283             if s.endswith(k):
   270             if s.endswith(k):
   284                 # max(4k) = 5k - 1, max(4.5k) = 4.6k - 1
   271                 # max(4k) = 5k - 1, max(4.5k) = 4.6k - 1
   285                 n = s[:-len(k)]
   272                 n = s[:-len(k)]
   286                 inc = 1.0
   273                 inc = 1.0
   287                 if "." in n:
   274                 if "." in n:
   304 
   291 
   305     # i18n: "size" is a keyword
   292     # i18n: "size" is a keyword
   306     expr = getstring(x, _("size requires an expression")).strip()
   293     expr = getstring(x, _("size requires an expression")).strip()
   307     if '-' in expr: # do we have a range?
   294     if '-' in expr: # do we have a range?
   308         a, b = expr.split('-', 1)
   295         a, b = expr.split('-', 1)
   309         a = _sizetoint(a)
   296         a = util.sizetoint(a)
   310         b = _sizetoint(b)
   297         b = util.sizetoint(b)
   311         m = lambda x: x >= a and x <= b
   298         m = lambda x: x >= a and x <= b
   312     elif expr.startswith("<="):
   299     elif expr.startswith("<="):
   313         a = _sizetoint(expr[2:])
   300         a = util.sizetoint(expr[2:])
   314         m = lambda x: x <= a
   301         m = lambda x: x <= a
   315     elif expr.startswith("<"):
   302     elif expr.startswith("<"):
   316         a = _sizetoint(expr[1:])
   303         a = util.sizetoint(expr[1:])
   317         m = lambda x: x < a
   304         m = lambda x: x < a
   318     elif expr.startswith(">="):
   305     elif expr.startswith(">="):
   319         a = _sizetoint(expr[2:])
   306         a = util.sizetoint(expr[2:])
   320         m = lambda x: x >= a
   307         m = lambda x: x >= a
   321     elif expr.startswith(">"):
   308     elif expr.startswith(">"):
   322         a = _sizetoint(expr[1:])
   309         a = util.sizetoint(expr[1:])
   323         m = lambda x: x > a
   310         m = lambda x: x > a
   324     elif expr[0].isdigit or expr[0] == '.':
   311     elif expr[0].isdigit or expr[0] == '.':
   325         a = _sizetoint(expr)
   312         a = util.sizetoint(expr)
   326         b = _sizetomax(expr)
   313         b = _sizetomax(expr)
   327         m = lambda x: x >= a and x <= b
   314         m = lambda x: x >= a and x <= b
   328     else:
   315     else:
   329         raise error.ParseError(_("couldn't parse size: %s") % expr)
   316         raise error.ParseError(_("couldn't parse size: %s") % expr)
   330 
   317