diff --git a/.gitignore b/.gitignore index b58b992fd..35b779b61 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ /dist /MANIFEST .gdb_history +/alot/VERSION diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 000000000..8fb908876 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +include alot/VERSION diff --git a/alot/__init__.py b/alot/__init__.py index 2704c6cd2..7575f5cbf 100644 --- a/alot/__init__.py +++ b/alot/__init__.py @@ -1,5 +1,8 @@ + +from version import get_git_version + __productname__ = 'alot' -__version__ = '0.20' +__version__ = get_git_version() __copyright__ = "Copyright (C) 2011 Patrick Totzke" __author__ = "Patrick Totzke" __author_email__ = "patricktotzke@gmail.com" diff --git a/alot/version.py b/alot/version.py new file mode 100644 index 000000000..e5dc8cb58 --- /dev/null +++ b/alot/version.py @@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- +# Author: Douglas Creager +# This file is placed into the public domain. + +# It's customized for alot. changes: +# * read VERSION file relative to this file + +# Calculates the current version number. If possible, this is the +# output of “git describe”, modified to conform to the versioning +# scheme that setuptools uses. If “git describe” returns an error +# (most likely because we're in an unpacked copy of a release tarball, +# rather than in a git working copy), then we fall back on reading the +# contents of the RELEASE-VERSION file. +# +# To use this script, simply import it your setup.py file, and use the +# results of get_git_version() as your package version: +# +# from version import * +# +# setup( +# version=get_git_version(), +# . +# . +# . +# ) +# +# This will automatically update the RELEASE-VERSION file, if +# necessary. Note that the RELEASE-VERSION file should *not* be +# checked into git; please add it to your top-level .gitignore file. +# +# You'll probably want to distribute the RELEASE-VERSION file in your +# sdist tarballs; to do this, just create a MANIFEST.in file that +# contains the following line: +# +# include RELEASE-VERSION + +__all__ = ("get_git_version") + +import os.path +VERSIONFILE = os.path.join(os.path.dirname(__file__), 'VERSION') + +try: + from subprocess import Popen, PIPE +except ImportError: + import warnings + warnings.warn("Can't import subprocess module," + "git version will not be available.") + + +def call_git_describe(abbrev=4): + try: + p = Popen(['git', 'describe', '--abbrev=%d' % abbrev], + stdout=PIPE, stderr=PIPE) + p.stderr.close() + line = p.stdout.readlines()[0] + version = line.strip() + if version[:1] == 'v': + version = version[1:] + return version + + except: + return None + + +def read_release_version(): + try: + f = open(VERSIONFILE, "r") + + try: + version = f.readlines()[0] + return version.strip() + + finally: + f.close() + + except: + return None + + +def write_release_version(version): + f = open(VERSIONFILE, "w") + f.write("%s\n" % version) + f.close() + + +def get_git_version(abbrev=4): + # Read in the version that's currently in RELEASE-VERSION. + + release_version = read_release_version() + + # First try to get the current version using “git describe”. + + version = call_git_describe(abbrev) + + # If that doesn't work, fall back on the value that's in + # RELEASE-VERSION. + + if version is None: + version = release_version + + # If we still don't have anything, that's an error. + + if version is None: + raise ValueError("Cannot find the version number!") + + # If the current version is different from what's in the + # RELEASE-VERSION file, update the file to be current. + + if version != release_version: + write_release_version(version) + + # Finally, return the current version. + + return version + + +if __name__ == "__main__": + print (get_git_version()) diff --git a/setup.py b/setup.py index 6d7340aec..93d1f18d5 100755 --- a/setup.py +++ b/setup.py @@ -3,6 +3,7 @@ from distutils.core import setup import alot + setup(name='alot', version=alot.__version__, description=alot.__description__, @@ -10,7 +11,8 @@ author_email=alot.__author_email__, url=alot.__url__, packages=['alot', 'alot.commands'], - package_data={'alot': ['defaults/alot.rc', 'defaults/notmuch.rc']}, + package_data={'alot': ['defaults/alot.rc', 'defaults/notmuch.rc', + 'VERSION']}, scripts=['bin/alot'], license=alot.__copyright__, requires=[ @@ -19,6 +21,5 @@ 'urwid (>=1.0)', 'twisted (>=10.2.0)', 'subprocess (>=2.7)'], - provides='alot' + provides='alot', ) -