/usr/lib/python2.7/dist-packages/Bcfg2/version.py is in bcfg2 1.3.3-1ubuntu3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | """ bcfg2 version declaration and handling """
import re
__version__ = "1.3.3"
class Bcfg2VersionInfo(tuple): # pylint: disable=E0012,R0924
""" object to make granular version operations (particularly
comparisons) easier """
v_re = re.compile(r'(\d+)(\w+)(\d+)')
def __new__(cls, vstr):
(major, minor, rest) = vstr.split(".")
match = cls.v_re.match(rest)
if match:
micro, releaselevel, serial = match.groups()
else:
micro = rest
releaselevel = 'final'
serial = 0
return tuple.__new__(cls, [int(major), int(minor), int(micro),
releaselevel, int(serial)])
def __init__(self, vstr): # pylint: disable=W0613
tuple.__init__(self)
self.major, self.minor, self.micro, self.releaselevel, self.serial = \
tuple(self)
def __repr__(self):
return "%s(major=%s, minor=%s, micro=%s, releaselevel=%s, serial=%s)" \
% ((self.__class__.__name__,) + tuple(self))
def _release_cmp(self, rel1, rel2): # pylint: disable=R0911
""" compare two release numbers """
if rel1 == rel2:
return 0
elif rel1 == "final":
return -1
elif rel2 == "final":
return 1
elif rel1 == "rc":
return -1
elif rel2 == "rc":
return 1
# should never get to anything past this point
elif rel1 == "pre":
return -1
elif rel2 == "pre":
return 1
else:
# wtf?
return 0
def __gt__(self, version):
if version is None:
# older bcfg2 clients didn't report their version, so we
# handle this case specially and assume that any reported
# version is newer than any indeterminate version
return True
try:
for i in range(3):
if self[i] != version[i]:
return self[i] > version[i]
rel = self._release_cmp(self[3], version[3])
if rel != 0:
return rel < 0
return self[4] > version[4]
except TypeError:
return self > Bcfg2VersionInfo(version)
def __lt__(self, version):
if version is None:
# older bcfg2 clients didn't report their version, so we
# handle this case specially and assume that any reported
# version is newer than any indeterminate version
return False
try:
for i in range(3):
if self[i] != version[i]:
return self[i] < version[i]
rel = self._release_cmp(self[3], version[3])
if rel != 0:
return rel > 0
return self[4] < version[4]
except TypeError:
return self < Bcfg2VersionInfo(version)
def __eq__(self, version):
if version is None:
# older bcfg2 clients didn't report their version, so we
# handle this case specially and assume that any reported
# version is newer than any indeterminate version
return False
try:
rv = True
for i in range(len(self)):
rv &= self[i] == version[i]
return rv
except TypeError:
return self == Bcfg2VersionInfo(version)
def __ge__(self, version):
return not self < version
def __le__(self, version):
return not self > version
|