aquafire / repo_info.py

Last active 6 months ago

Like 0
repo_info.py Raw
1#!/usr/bin/env python3
2import os
3import re
4
5
6class GitVersion:
7 def __init__(self):
8 self._default_version = "0.1.0"
9 os.chdir(os.path.dirname(os.path.realpath(__file__)))
10
11 @property
12 def tag(self):
13 stream = os.popen("git describe --match v[0-9]* --abbrev=0 --tags")
14 return stream.read().strip()
15
16 @property
17 def version(self):
18 version = f"{self.tag[1:]}.{self.build}"
19
20 if version == ".":
21 return self._default_version
22
23 return version
24
25 @property
26 def default_branch(self):
27 stream = os.popen("git config --get init.defaultBranch")
28 result = stream.read().strip()
29
30 if not result:
31 result = "main"
32
33 return result
34
35 @property
36 def build(self):
37 stream = os.popen(f"git rev-list {self.tag}.. --count")
38 return stream.read().strip()
39
40 @property
41 def branch(self):
42 stream = os.popen("git branch --show-current")
43 return stream.read().strip()
44
45 @property
46 def full(self):
47 return f"{self.version}-{self.branch}"
48
49 @property
50 def standard(self):
51 standard = f"{self.version}-{self.branch}"
52 if self.branch == self.default_branch or re.match("release/.*", self.branch):
53 standard = f"{self.version}"
54 return standard
55
56 @property
57 def commit(self):
58 stream = os.popen("git rev-parse HEAD")
59 return stream.read().strip()
60
61 @property
62 def commit_hash(self):
63 stream = os.popen("git rev-parse --short HEAD")
64 return stream.read().strip()
65
66 def __str__(self):
67 return f"""
68Tag: {self.tag}
69Version: {self.version}
70Full: {self.full}
71Branch: {self.branch}
72Build: {self.build}
73Standard: {self.standard}
74Commit: {self.commit}
75
76GitRepo {self.full} {self.commit_hash}
77"""
78
79
80if __name__ == "__main__":
81 git_version = GitVersion()
82 print(git_version)