123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- import datetime
- class VersionType:
- Unknown = 0
- Semantic = 1
- Date = 2
- class VersionFlags:
- No = 0
- Git = 1
-
-
- Dirty = 2
- Extra = 4
-
-
-
- Unknown = 8
- Invalid = 128
- VERSION_TYPE_STR = [
- "Unknown",
- "Semantic",
- "Date"
- ]
- VERSION_FLAG_STR = {
- 0: "None",
- 1: "Git",
- 2: "Dirty",
- 4: "Extra",
- 8: "Unknown",
- 128: "Invalid"
- }
- class InstanceVersion:
- def __init__(self, versionString=""):
- self.set(versionString)
- def __str__(self):
- return self.__str
- def __ge__(self, other):
-
- otherParts = other.parts()
- if self.__parts[0] < otherParts[0]:
- return False
- elif self.__parts[0] == otherParts[0]:
-
- if self.__parts[1] < otherParts[1]:
- return False
- elif self.__parts[1] == otherParts[1]:
-
- if self.__parts[2] < otherParts[2]:
- return False
- return True
- def __lt__(self, other):
- return not (self >= other)
- def type(self):
- return self.__type
- def flags(self):
- return self.__flags
- def isValid(self):
- return self.__valid
- def error(self):
- return self.__error
- def parts(self):
-
- return self.__parts
- def partsString(self):
- return f"{self.__parts[0]}.{self.__parts[1]}.{self.__parts[2]}"
- def commitHash(self):
- return self.__commit
- def set(self, versionString):
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- self.__str = str(versionString)
- self.__type = VersionType.Unknown
- self.__flags = VersionFlags.No
- self.__parts = (0,0,0)
- self.__commit = ""
- self.__otherCommit = ""
- self.__valid = False
- self.__error = ""
- if not versionString:
- return
- separator = ""
- if "+" in versionString:
- elements = versionString.split("+")
- separator = "+"
- elif "-" in versionString:
- elements = versionString.split("-")
- separator = "-"
- else:
- elements = [versionString]
- vElements = elements[0].split(".")
-
- if len(vElements) != 3:
- self.__error = "not 3 elements seperated by '.'"
- return
- for vElem in vElements:
- if not vElem.isdigit():
- self.__error = "non digit value in version"
- return
-
- if int(vElements[0]) > 2000:
-
- vYear = int(vElements[0])
- vMonth = int(vElements[1])
- vDay = int(vElements[2])
- thisYear = datetime.date.today().year
-
-
- if vYear > thisYear or vYear < (thisYear - 3):
- self.__error = "year of the date is out of range"
- return
-
- if vMonth < 1 or vMonth > 12:
- self.__error = "month of the date is out of range [1-12]"
- return
-
- if vDay < 1 or vDay > 31:
- self.__error = "day of the date is out of range [1-31]"
- return
- self.__type = VersionType.Date
- self.__parts = (vYear, vMonth, vDay)
-
- else:
- vMajor = int(vElements[0])
- vMinor = int(vElements[1])
- vPatch = int(vElements[2])
- self.__type = VersionType.Semantic
- self.__parts = (vMajor, vMinor, vPatch)
-
-
-
- if len(elements) > 1:
-
-
- if elements[1] == "unknown":
- if len(elements) > 2:
- self.__error = "did not expect anything after '-unknown'"
- return
- self.__flags += VersionFlags.Unknown
- self.__valid = True
- return
-
- vHash = elements[1]
-
-
-
-
- if " " in vHash:
- spaceSepElems = vHash.split(" ")
-
- if len(spaceSepElems) != 2:
- self.__error = "unknown format (1)"
- return
- otherHash = spaceSepElems[1]
-
- if len(otherHash) < 10 or len(otherHash) > 12:
- self.__error = "otherHash check: invalid test string length"
- return
-
- if otherHash[0] != "(" or otherHash[-1] != ")":
- self.__error = ("otherHash check: does not start with '(' or does not"
- "end with ')'")
- return
-
- otherHash = otherHash[1:len(otherHash)-2]
-
- try:
- int(otherHash, 16)
- except ValueError:
- self.__error = "invalid other short commit hash, none hex characters in the string"
- return
-
- vHash = spaceSepElems[0]
- self.__otherCommit = otherHash[1:len(otherHash)-2]
-
- if separator == "-" and len(elements) == 3:
- if not elements[1].isnumeric():
- self.__error = "unknown format (2)"
- return
- try:
- int(elements[2], 16)
- except ValueError:
- self.__error = "unknown format (3)"
- return
- self.__flags += VersionFlags.Git
- self.__commit = elements[2]
- self.__valid = True
- return
-
-
-
- try:
- int(vHash, 16)
- except ValueError:
- self.__error = "invalid short commit hash, none hex characters in the string"
- return
- self.__flags += VersionFlags.Git
- self.__commit = vHash
-
- if len(elements) >= 3:
- for i in range(2, len(elements)):
- if elements[i] == "dirty":
- self.__flags += VersionFlags.Dirty
- elif elements[i] == "extra":
- self.__flags += VersionFlags.Extra
- else:
- self.__error = f"unknown addition '{elements[i]}')"
- return
- self.__valid = True
|