NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

version.py (2820B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\distutils\version.py
      2 import string, re
      3 from types import StringType
      4 
      5 class Version:
      6 
      7     def __init__(self, vstring = None):
      8         if vstring:
      9             self.parse(vstring)
     10 
     11     def __repr__(self):
     12         return "%s ('%s')" % (self.__class__.__name__, str(self))
     13 
     14 
     15 class StrictVersion(Version):
     16     version_re = re.compile('^(\\d+) \\. (\\d+) (\\. (\\d+))? ([ab](\\d+))?$', re.VERBOSE)
     17 
     18     def parse(self, vstring):
     19         match = self.version_re.match(vstring)
     20         if not match:
     21             raise ValueError, "invalid version number '%s'" % vstring
     22         major, minor, patch, prerelease, prerelease_num = match.group(1, 2, 4, 5, 6)
     23         if patch:
     24             self.version = tuple(map(string.atoi, [major, minor, patch]))
     25         else:
     26             self.version = tuple(map(string.atoi, [major, minor]) + [0])
     27         if prerelease:
     28             self.prerelease = (prerelease[0], string.atoi(prerelease_num))
     29         else:
     30             self.prerelease = None
     31 
     32     def __str__(self):
     33         if self.version[2] == 0:
     34             vstring = string.join(map(str, self.version[0:2]), '.')
     35         else:
     36             vstring = string.join(map(str, self.version), '.')
     37         if self.prerelease:
     38             vstring = vstring + self.prerelease[0] + str(self.prerelease[1])
     39         return vstring
     40 
     41     def __cmp__(self, other):
     42         if isinstance(other, StringType):
     43             other = StrictVersion(other)
     44         compare = cmp(self.version, other.version)
     45         if compare == 0:
     46             if not self.prerelease and not other.prerelease:
     47                 return 0
     48             if self.prerelease and not other.prerelease:
     49                 return -1
     50             if not self.prerelease and other.prerelease:
     51                 return 1
     52             if self.prerelease and other.prerelease:
     53                 return cmp(self.prerelease, other.prerelease)
     54         else:
     55             return compare
     56 
     57 
     58 class LooseVersion(Version):
     59     component_re = re.compile('(\\d+ | [a-z]+ | \\.)', re.VERBOSE)
     60 
     61     def __init__(self, vstring = None):
     62         if vstring:
     63             self.parse(vstring)
     64 
     65     def parse(self, vstring):
     66         self.vstring = vstring
     67         components = filter(lambda x: x and x != '.', self.component_re.split(vstring))
     68         for i in range(len(components)):
     69             try:
     70                 components[i] = int(components[i])
     71             except ValueError:
     72                 pass
     73 
     74         self.version = components
     75 
     76     def __str__(self):
     77         return self.vstring
     78 
     79     def __repr__(self):
     80         return "LooseVersion ('%s')" % str(self)
     81 
     82     def __cmp__(self, other):
     83         if isinstance(other, StringType):
     84             other = LooseVersion(other)
     85         return cmp(self.version, other.version)