Prechod na unifikovane ziskavani verze z gitu
This commit is contained in:
81
gitrev/__init__.py
Normal file
81
gitrev/__init__.py
Normal file
@ -0,0 +1,81 @@
|
||||
""" Automatic version number generator
|
||||
Automatically generates a version number from information provided by git
|
||||
Copyright (c) 2019, 2020, 2021, 2022 xPablo.cz
|
||||
"""
|
||||
import subprocess
|
||||
import dataclasses
|
||||
from typing import Optional
|
||||
|
||||
__author__ = "Pavel Brychta"
|
||||
__copyright__ = "Copyright (c) 2019-2022, Pavel Brychta"
|
||||
__credits__ = ["Pavel Brychta","Jan Breuer"]
|
||||
__license__ = "Private"
|
||||
__version__ = "2.0.0"
|
||||
__maintainer__ = "Pavel Brychta"
|
||||
__email__ = "Pablo@xPablo.cz"
|
||||
__status__ = "Stable"
|
||||
|
||||
__all__ = ['version_info']
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Version:
|
||||
major: int = 0
|
||||
minor: int = 0
|
||||
patch: int = 0
|
||||
user: int = 0
|
||||
dirty: bool = False
|
||||
branch: Optional[str] = None
|
||||
variant: Optional[str] = None
|
||||
|
||||
def __str__(self):
|
||||
dirty = "m" if self.dirty else ""
|
||||
branch = ""
|
||||
if self.branch is not None:
|
||||
branch = f'({self.branch})'
|
||||
variant = ''
|
||||
if self.variant is not None:
|
||||
variant = f'-{self.variant}'
|
||||
if self.user == 0:
|
||||
return f"{self.major}.{self.minor}.{self.patch}{dirty}{variant}{branch}"
|
||||
else:
|
||||
return f"{self.major}.{self.minor}.{self.patch}.{self.user}{dirty}{variant}{branch}"
|
||||
|
||||
|
||||
def version_info():
|
||||
version = Version()
|
||||
|
||||
try:
|
||||
branch = subprocess.check_output(["git", "rev-parse", "--abbrev-ref", "HEAD"]).decode().strip()
|
||||
if branch not in ("master", "main", "HEAD"):
|
||||
version.branch = branch
|
||||
|
||||
info = subprocess.check_output(["git", "describe", "--tags", "--dirty", "--long", "--always"]).decode().strip().split('-')
|
||||
if info[-1] == "dirty":
|
||||
version.dirty = True
|
||||
info.pop()
|
||||
|
||||
if len(info) >= 3:
|
||||
# drop abbrev
|
||||
info.pop()
|
||||
version.user = int(info.pop())
|
||||
text = info.pop(0)
|
||||
if text.startswith('v') or text.startswith('V'):
|
||||
text = text[1:]
|
||||
parts = text.split('.')
|
||||
version.major = int(parts[0])
|
||||
if len(parts) > 1:
|
||||
version.minor = int(parts[1])
|
||||
if len(parts) > 2:
|
||||
version.patch = int(parts[2])
|
||||
|
||||
if info:
|
||||
# there was some additional text in the tag, store it in the variant
|
||||
version.variant = '-'.join(info)
|
||||
else:
|
||||
# no tag so far
|
||||
version.user = int(subprocess.check_output(["git", "rev-list", "--all", "--count"]).decode().strip())
|
||||
except Exception as e:
|
||||
version.major = -1
|
||||
|
||||
return version
|
Reference in New Issue
Block a user