Merge branch 'version_strings' into develop

* __init__.py now contains latest release version string
* installing from git checkout that does not correspond to a release commit
  will result in a more descriptive version string
This commit is contained in:
Luke Campagnola 2013-12-15 13:19:00 -05:00
commit 768c2b3356
4 changed files with 113 additions and 5 deletions

View File

@ -50,9 +50,9 @@ copyright = '2011, Luke Campagnola'
# built documents.
#
# The short X.Y version.
version = ''
version = '0.9.8'
# The full version, including alpha/beta/rc tags.
release = ''
release = '0.9.8'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

View File

@ -4,7 +4,7 @@ PyQtGraph - Scientific Graphics and GUI Library for Python
www.pyqtgraph.org
"""
__version__ = None
__version__ = '0.9.8'
### import all the goodies and add some helper functions for easy CLI use

View File

@ -1,6 +1,7 @@
from distutils.core import setup
import distutils.dir_util
import os
import os, sys, re
from subprocess import check_output
## generate list of all sub-packages
path = os.path.abspath(os.path.dirname(__file__))
@ -14,8 +15,89 @@ buildPath = os.path.join(path, 'build')
if os.path.isdir(buildPath):
distutils.dir_util.remove_tree(buildPath)
## Determine current version string
initfile = os.path.join(path, 'pyqtgraph', '__init__.py')
init = open(initfile).read()
m = re.search(r'__version__ = (\S+)\n', init)
if m is None or len(m.groups()) != 1:
raise Exception("Cannot determine __version__ from init file: '%s'!" % initfile)
version = m.group(1).strip('\'\"')
initVersion = version
# If this is a git checkout, try to generate a more decriptive version string
try:
if os.path.isdir(os.path.join(path, '.git')):
def gitCommit(name):
commit = check_output(['git', 'show', name], universal_newlines=True).split('\n')[0]
assert commit[:7] == 'commit '
return commit[7:]
# Find last tag matching "pyqtgraph-.*"
tagNames = check_output(['git', 'tag'], universal_newlines=True).strip().split('\n')
while True:
if len(tagNames) == 0:
raise Exception("Could not determine last tagged version.")
lastTagName = tagNames.pop()
if re.match(r'pyqtgraph-.*', lastTagName):
break
# is this commit an unchanged checkout of the last tagged version?
lastTag = gitCommit(lastTagName)
head = gitCommit('HEAD')
if head != lastTag:
branch = re.search(r'\* (.*)', check_output(['git', 'branch'])).group(1)
version = version + "-%s-%s" % (branch, head[:10])
# any uncommitted modifications?
modified = False
status = check_output(['git', 'status', '-s'], universal_newlines=True).strip().split('\n')
for line in status:
if line[:2] != '??':
modified = True
break
if modified:
version = version + '+'
sys.stderr.write("Detected git commit; will use version string: '%s'\n" % version)
except:
version = initVersion
sys.stderr.write("This appears to be a git checkout, but an error occurred "
"while attempting to determine a version string for the "
"current commit.\nUsing the unmodified version string "
"instead: '%s'\n" % version)
sys.excepthook(*sys.exc_info())
import distutils.command.build
class Build(distutils.command.build.build):
def run(self):
ret = distutils.command.build.build.run(self)
# If the version in __init__ is different from the automatically-generated
# version string, then we will update __init__ in the build directory
global path, version, initVersion
if initVersion == version:
return ret
initfile = os.path.join(path, self.build_lib, 'pyqtgraph', '__init__.py')
if not os.path.isfile(initfile):
sys.stderr.write("Warning: setup detected a git install and attempted "
"to generate a descriptive version string; however, "
"the expected build file at %s was not found. "
"Installation will use the original version string "
"%s instead.\n" % (initfile, initVersion)
)
else:
data = open(initfile, 'r').read()
open(initfile, 'w').write(re.sub(r"__version__ = .*", "__version__ = '%s'" % version, data))
return ret
setup(name='pyqtgraph',
version='',
version=version,
cmdclass={'build': Build},
description='Scientific Graphics and GUI Library for Python',
long_description="""\
PyQtGraph is a pure-python graphics and GUI library built on PyQt4/PySide and

26
tools/setVersion.py Normal file
View File

@ -0,0 +1,26 @@
import re, os, sys
version = sys.argv[1]
replace = [
("pyqtgraph/__init__.py", r"__version__ = .*", "__version__ = '%s'" % version),
#("setup.py", r" version=.*,", " version='%s'," % version), # setup.py automatically detects version
("doc/source/conf.py", r"version = .*", "version = '%s'" % version),
("doc/source/conf.py", r"release = .*", "release = '%s'" % version),
#("tools/debian/control", r"^Version: .*", "Version: %s" % version)
]
path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')
for filename, search, sub in replace:
filename = os.path.join(path, filename)
data = open(filename, 'r').read()
if re.search(search, data) is None:
print('Error: Search expression "%s" not found in file %s.' % (search, filename))
os._exit(1)
open(filename, 'w').write(re.sub(search, sub, data))
print("Updated version strings to %s" % version)