aboutsummaryrefslogtreecommitdiffhomepage
path: root/version_parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'version_parser.py')
-rw-r--r--version_parser.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/version_parser.py b/version_parser.py
new file mode 100644
index 00000000..793d77db
--- /dev/null
+++ b/version_parser.py
@@ -0,0 +1,42 @@
+import os
+import subprocess
+
+
+VERSION_PY_PATH = 'gbp/version.py'
+
+
+def _parse_changelog():
+ """Get version from debian changelog and write it to gbp/version.py"""
+ popen = subprocess.Popen('dpkg-parsechangelog', stdout=subprocess.PIPE)
+ out, ret = popen.communicate()
+ for line in out.decode('utf-8').split('\n'):
+ if line.startswith('Version:'):
+ version = line.split(' ')[1].strip()
+ return version
+
+ raise ValueError('Could not parse version from debian/changelog')
+
+
+def _save_version_py(version):
+ with open(VERSION_PY_PATH, 'w') as f:
+ f.write('"The current gbp version number"\n')
+ f.write('gbp_version = "%s"\n' % version)
+
+
+def _load_version():
+ with open(VERSION_PY_PATH, 'r') as f:
+ version_py = f.read()
+ version_py_globals = {}
+ exec(version_py, version_py_globals)
+ return version_py_globals['gbp_version']
+
+
+def parse_and_fetch_version():
+ if os.path.exists('debian/changelog'):
+ version = _parse_changelog()
+ _save_version_py(version)
+ # we could return with the version here, but instead we check that
+ # the file has been properly written and it can be loaded back
+
+ version = _load_version()
+ return version