aboutsummaryrefslogtreecommitdiffstats
path: root/youtube/get_app_version
diff options
context:
space:
mode:
Diffstat (limited to 'youtube/get_app_version')
-rw-r--r--youtube/get_app_version/__init__.py3
-rw-r--r--youtube/get_app_version/get_app_version.py56
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()