Mercurial > public > mercurial-scm > hg
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 |