diff options
Diffstat (limited to 'youtube/get_app_version')
| -rw-r--r-- | youtube/get_app_version/__init__.py | 3 | ||||
| -rw-r--r-- | youtube/get_app_version/get_app_version.py | 56 |
2 files changed, 59 insertions, 0 deletions
diff --git a/youtube/get_app_version/__init__.py b/youtube/get_app_version/__init__.py new file mode 100644 index 0000000..665b7b5 --- /dev/null +++ b/youtube/get_app_version/__init__.py @@ -0,0 +1,3 @@ +from .get_app_version import app_version + +__all__ = ['app_version'] diff --git a/youtube/get_app_version/get_app_version.py b/youtube/get_app_version/get_app_version.py new file mode 100644 index 0000000..a73b857 --- /dev/null +++ b/youtube/get_app_version/get_app_version.py @@ -0,0 +1,56 @@ +from __future__ import unicode_literals +import os +import shutil +import subprocess + +from ..version import __version__ + + +def app_version(): + def minimal_env_cmd(cmd): + # make minimal environment + env = {k: os.environ[k] for k in ['SYSTEMROOT', 'PATH'] if k in os.environ} + env.update({'LANGUAGE': 'C', 'LANG': 'C', 'LC_ALL': 'C'}) + out = subprocess.Popen(cmd, stdout=subprocess.PIPE, env=env).communicate()[0] + return out + + subst_list = { + 'version': __version__, + 'branch': None, + 'commit': None, + } + + # Use shutil.which instead of `command -v`/os.system so we don't spawn a + # shell (CWE-78 hardening) and so it works cross-platform. + if shutil.which('git') is None: + return subst_list + + try: + # Check we are inside a git work tree. Using DEVNULL avoids the + # file-handle leak from `open(os.devnull, 'w')`. + rc = subprocess.call( + ['git', 'branch'], + stderr=subprocess.DEVNULL, + stdout=subprocess.DEVNULL, + ) + except OSError: + return subst_list + if rc != 0: + return subst_list + + describe = minimal_env_cmd(['git', 'describe', '--tags', '--always']) + git_revision = describe.strip().decode('ascii') + + branch = minimal_env_cmd(['git', 'branch']) + git_branch = branch.strip().decode('ascii').replace('* ', '') + + subst_list.update({ + 'branch': git_branch, + 'commit': git_revision, + }) + + return subst_list + + +if __name__ == '__main__': + app_version() |
