Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
113 lines (88 loc) · 3.05 KB

File metadata and controls

113 lines (88 loc) · 3.05 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
109
110
111
112
113
"""
Versioning: we use a hard-coded version number, because it's simple and always
works. For dev installs we add extra version info from Git.
"""
import logging
import subprocess
from pathlib import Path
# This is the reference version number, to be bumped before each release.
# The build system detects this definition when building a distribution.
__version__ = "0.6.1"
# Allow using nearly the same code in different projects
project_name = "fastplotlib"
logger = logging.getLogger(project_name.lower())
# Get whether this is a repo. If so, repo_dir is the path, otherwise repo_dir is None.
repo_dir = Path(__file__).parents[1]
repo_dir = repo_dir if repo_dir.joinpath(".git").is_dir() else None
def get_version():
"""Get the version string."""
if repo_dir:
return get_extended_version()
else:
return __version__
def get_extended_version():
"""Get an extended version string with information from git."""
release, post, labels = get_version_info_from_git()
# Sample first 3 parts of __version__
base_release = ".".join(__version__.split(".")[:3])
# Check release
if not release:
release = base_release
elif release != base_release:
logger.warning(
f"{project_name} version from git ({release}) and __version__ ({base_release}) don't match."
)
# Build the total version
version = release
if post and post != "0":
version += f".post{post}"
if labels:
version += "+" + ".".join(labels)
return version
def get_version_info_from_git():
"""Get (release, post, labels) from Git.
With `release` the version number from the latest tag, `post` the
number of commits since that tag, and `labels` a tuple with the
git-hash and optionally a dirty flag.
"""
# Call out to Git
command = [
"git",
"describe",
"--long",
"--always",
"--tags",
"--dirty",
"--first-parent",
]
try:
p = subprocess.run(command, cwd=repo_dir, capture_output=True)
except Exception as e:
logger.warning(f"Could not get {project_name} version: {e}")
p = None
# Parse the result into parts
if p is None:
parts = (None, None, "unknown")
else:
output = p.stdout.decode(errors="ignore")
if p.returncode:
stderr = p.stderr.decode(errors="ignore")
logger.warning(
f"Could not get {project_name} version.\n\nstdout: "
+ output
+ "\n\nstderr: "
+ stderr
)
parts = (None, None, "unknown")
else:
parts = output.strip().lstrip("v").split("-")
if len(parts) <= 2:
# No tags (and thus also no post). Only git hash and maybe 'dirty'
parts = (None, None, *parts)
# Return unpacked parts
release, post, *labels = parts
return release, post, labels
__version__ = get_version()
version_info = tuple(
int(i) if i.isnumeric() else i for i in __version__.split("+")[0].split(".")
)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.