Mercurial > public > mercurial-scm > hg
comparison mercurial/util.py @ 27112:39c14e89b881
util: add versiontuple() for returning parsed version information
We have similar code in dispatch.py. Another consumer is about to be
created, so establish a generic function in an accessible location.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Tue, 24 Nov 2015 14:23:51 -0800 |
parents | 6f1f8e88f036 |
children | 7f5a0bd4c9aa |
comparison
equal
deleted
inserted
replaced
27111:9de814b35808 | 27112:39c14e89b881 |
---|---|
334 import __version__ | 334 import __version__ |
335 return __version__.version | 335 return __version__.version |
336 except ImportError: | 336 except ImportError: |
337 return 'unknown' | 337 return 'unknown' |
338 | 338 |
339 def versiontuple(v=None, n=4): | |
340 """Parses a Mercurial version string into an N-tuple. | |
341 | |
342 The version string to be parsed is specified with the ``v`` argument. | |
343 If it isn't defined, the current Mercurial version string will be parsed. | |
344 | |
345 ``n`` can be 2, 3, or 4. Here is how some version strings map to | |
346 returned values: | |
347 | |
348 >>> v = '3.6.1+190-df9b73d2d444' | |
349 >>> versiontuple(v, 2) | |
350 (3, 6) | |
351 >>> versiontuple(v, 3) | |
352 (3, 6, 1) | |
353 >>> versiontuple(v, 4) | |
354 (3, 6, 1, '190-df9b73d2d444') | |
355 | |
356 >>> versiontuple('3.6.1+190-df9b73d2d444+20151118') | |
357 (3, 6, 1, '190-df9b73d2d444+20151118') | |
358 | |
359 >>> v = '3.6' | |
360 >>> versiontuple(v, 2) | |
361 (3, 6) | |
362 >>> versiontuple(v, 3) | |
363 (3, 6, None) | |
364 >>> versiontuple(v, 4) | |
365 (3, 6, None, None) | |
366 """ | |
367 if not v: | |
368 v = version() | |
369 parts = v.split('+', 1) | |
370 if len(parts) == 1: | |
371 vparts, extra = parts[0], None | |
372 else: | |
373 vparts, extra = parts | |
374 | |
375 vints = [] | |
376 for i in vparts.split('.'): | |
377 try: | |
378 vints.append(int(i)) | |
379 except ValueError: | |
380 break | |
381 # (3, 6) -> (3, 6, None) | |
382 while len(vints) < 3: | |
383 vints.append(None) | |
384 | |
385 if n == 2: | |
386 return (vints[0], vints[1]) | |
387 if n == 3: | |
388 return (vints[0], vints[1], vints[2]) | |
389 if n == 4: | |
390 return (vints[0], vints[1], vints[2], extra) | |
391 | |
339 # used by parsedate | 392 # used by parsedate |
340 defaultdateformats = ( | 393 defaultdateformats = ( |
341 '%Y-%m-%d %H:%M:%S', | 394 '%Y-%m-%d %H:%M:%S', |
342 '%Y-%m-%d %I:%M:%S%p', | 395 '%Y-%m-%d %I:%M:%S%p', |
343 '%Y-%m-%d %H:%M', | 396 '%Y-%m-%d %H:%M', |