aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xsetup.py27
-rw-r--r--version_parser.py42
2 files changed, 45 insertions, 24 deletions
diff --git a/setup.py b/setup.py
index f505b39d..150dfdde 100755
--- a/setup.py
+++ b/setup.py
@@ -17,30 +17,9 @@
# <http://www.gnu.org/licenses/>
# END OF COPYRIGHT #
-import subprocess
-from setuptools import setup, find_packages
import os
-
-
-def fetch_version():
- """Get version from debian changelog and write it to gbp/version.py"""
- version = "0.0"
-
- try:
- 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()
- break
- except OSError:
- pass # Failing is fine, we just can't print the version then
-
- with open('gbp/version.py', 'w') as f:
- f.write('"The current gbp version number"\n')
- f.write('gbp_version = "%s"\n' % version)
-
- return version
+from setuptools import setup, find_packages
+from version_parser import parse_and_fetch_version
def readme():
@@ -56,7 +35,7 @@ def setup_requires():
setup(name="gbp",
- version=fetch_version(),
+ version=parse_and_fetch_version(),
author=u'Guido Günther',
author_email='agx@sigxcpu.org',
url='https://honk.sigxcpu.org/piki/projects/git-buildpackage/',
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