Dynamic version and Makefile target to generate a distribution

The version is extracted from the last tag name minus the 'release/'
prefix.

* AUTHORS: Add mysel as contributor.

* setup.py: Add a function to get version from extracted version.in file
  or from the last tag name.

* Makefile: Add a target to generate the version.in file from the last
  tag name.

* .gitignore: Ignore the version.in file.
This commit is contained in:
Daniel Dehennin 2012-07-24 14:13:27 +02:00
parent 5024751d3d
commit 5730a97728
4 changed files with 48 additions and 6 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
*~ *~
*# *#
*.pyc *.pyc
version.in
build/ build/

View File

@ -3,4 +3,4 @@ Authors
Gwenaël Rémond <gremond@cadoles.com> lead developer Gwenaël Rémond <gremond@cadoles.com> lead developer
Emmanuel Garette <egarette@cadoles.com> contributor Emmanuel Garette <egarette@cadoles.com> contributor
Daniel Dehennin <daniel.dehennin@ac-dijon.fr> contributor

View File

@ -1,5 +1,7 @@
#!/usr/bin/make #!/usr/bin/make
PACKAGE := tiramisu
INSTALL := install INSTALL := install
INSTALL_DATA := install -m 644 INSTALL_DATA := install -m 644
INSTALL_PROGRAM := install -m 755 INSTALL_PROGRAM := install -m 755
@ -10,7 +12,11 @@ ifneq ($(DESTDIR),)
PYTHON_OPTS += --root $(DESTDIR) PYTHON_OPTS += --root $(DESTDIR)
endif endif
all: test LAST_TAG := $(shell git describe --tags --abbrev=0)
VERSION := $(shell echo $(LAST_TAG) | awk -F'/' '{print $$2}' || true)
VERSION_FILE := version.in
all:
clean: clean:
$(RM) -r build $(RM) -r build
@ -22,4 +28,15 @@ test: clean
install: install:
python setup.py install --no-compile $(PYTHON_OPTS) python setup.py install --no-compile $(PYTHON_OPTS)
.PHONY: all clean test install # List in .PHONY to force generation at each call
version.in:
@if test -n $(VERSION) ; then \
echo $(VERSION) > $(VERSION_FILE) ; \
fi
dist: version.in
git archive --format=tar --prefix $(PACKAGE)-$(VERSION)/ -o $(PACKAGE)-$(VERSION).tar $(LAST_TAG) \
&& tar --xform "s,\(.*\),$(PACKAGE)-$(VERSION)/\1," -f $(PACKAGE)-$(VERSION).tar -r version.in \
&& gzip -9 $(PACKAGE)-$(VERSION).tar
.PHONY: all clean test install version.in dist

View File

@ -2,11 +2,35 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from distutils.core import setup from distutils.core import setup
import os
def fetch_version():
"""Get version from version.in or latest git tag"""
version_file='version.in'
version = "0.0"
git_last_tag_cmd = ['git', 'describe', '--tags', '--abbrev=0']
try:
if os.path.isfile(version_file):
version=file(version_file).readline().strip()
elif os.path.isdir('.git'):
popen = subprocess.Popen(git_last_tag_cmd, stdout=subprocess.PIPE)
out, ret = popen.communicate()
for line in out.split('\n'):
if line:
version = line.lstrip('release/')
break
except OSError:
pass # Failing is fine, we just can't print the version then
return version
setup( setup(
author='Gwenaël Rémond', author='Gwenaël Rémond',
author_email='gremond@cadoles.com', author_email='gremond@cadoles.com',
name='tiramisu', name='tiramisu',
version='0.1', version=fetch_version(),
description='configuration management tool', description='configuration management tool',
url='http://labs.libre-entreprise.org/projects/tiramisu', url='http://labs.libre-entreprise.org/projects/tiramisu',
packages=['tiramisu'] packages=['tiramisu']