comparison mercurial/fileset.py @ 19194:1d08df65cd3c

util: migrate fileset._sizetoint to util.sizetoint The size counting code introduced in 2c4cd1c42365 duplicated existing (but unknown-to-me) code in fileset, so prepare to eliminate the duplication.
author Bryan O'Sullivan <bryano@fb.com>
date Tue, 14 May 2013 15:16:43 -0700
parents 3ce3f2b059a1
children 19ac0d8ee9a2
comparison
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