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
|
#!/usr/bin/env python3
__doc__ = """
Determines asymptote version for release, or with git info for development
"""
__author__ = "Supakorn 'Jamie' Rassameemasmuang <jamievlin@outlook.com>"
import pathlib
import re
import subprocess
from argparse import ArgumentParser
from subprocess import CalledProcessError
from determine_pkg_info import determine_asy_pkg_info
def parse_args():
parser = ArgumentParser()
parser.add_argument(
"--base-version",
type=str,
help="Base version string. If blank, this information is "
+ "fetched from configure.ac",
)
version_mode = parser.add_mutually_exclusive_group()
version_mode.add_argument("--version-for-release", action="store_true")
version_mode.add_argument(
"--version-with-git-info",
action="store_true",
help="Includes number of commits since last tag, if directory is a git repo. "
+ "If commit information cannot be determined, reverts to baseline version",
)
return parser.parse_args()
def determine_version_for_release(version_base: str):
git_string = "git"
if version_base.endswith("git"):
return version_base[: -len(git_string)]
return version_base
def determine_version_with_git_info(version_base: str):
try:
long_description = subprocess.run(
["git", "describe", "--long"],
cwd=pathlib.Path(__file__).parent,
check=True,
stderr=subprocess.DEVNULL,
stdout=subprocess.PIPE,
text=True,
)
except CalledProcessError:
return version_base
first_version_base = re.sub(r"git-([0-9]*)-g.*", r"-\1", long_description.stdout)
return re.sub(r"-0-g.*", r"", first_version_base)
def main():
args = parse_args()
version_base = args.base_version or determine_asy_pkg_info()["version-base"]
if args.version_for_release:
version = determine_version_for_release(version_base)
elif args.version_with_git_info:
version = determine_version_with_git_info(version_base)
else:
version = version_base
print(version, end="")
if __name__ == "__main__":
main()
|