mercurial/util.py
changeset 27112 39c14e89b881
parent 27066 6f1f8e88f036
child 27357 7f5a0bd4c9aa
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',