Try to get the built-in version string first, and fall back to git describe if there is no built-in string, instead of the other way around. This makes computing the version string much cheaper in the common case (whenever StGit is not run directly from a git-controlled tree). In order for this to work when StGit _is_ run directly from a git-controlled tree, setup.py has to delete the builtin version file once the installation process is over. (Otherwise, the StGit version in a git-controlled tree would be frozen at whatever value it happened to have when setup.py was last run.) Signed-off-by: Karl Hasselström <kha@xxxxxxxxxxx> --- On 2008-05-20 23:02:49 +0200, Karl Hasselström wrote: > Nah, easier to just change the order of the checks (try r2 before r1) > as I outlined. I'll whip up a patch. setup.py | 45 +++++++++++++++++++++++++-------------------- stgit/.gitignore | 1 - stgit/version.py | 15 ++++++++++++--- 3 files changed, 37 insertions(+), 24 deletions(-) diff --git a/setup.py b/setup.py index 40022a7..8d8f7a8 100755 --- a/setup.py +++ b/setup.py @@ -43,34 +43,39 @@ def __check_git_version(): % (version.git_min_ver, gitver) sys.exit(1) +def __run_setup(): + setup(name = 'stgit', + version = version.version, + license = 'GPLv2', + author = 'Catalin Marinas', + author_email = 'catalin.marinas@xxxxxxxxx', + url = 'http://www.procode.org/stgit/', + description = 'Stacked GIT', + long_description = 'Push/pop utility on top of GIT', + scripts = ['stg'], + packages = ['stgit', 'stgit.commands', 'stgit.lib'], + data_files = [ + ('share/stgit/templates', glob.glob('templates/*.tmpl')), + ('share/stgit/examples', glob.glob('examples/*.tmpl')), + ('share/stgit/examples', ['examples/gitconfig']), + ('share/stgit/contrib', ['contrib/diffcol.sh', + 'contrib/stgbashprompt.sh', + 'contrib/stgit-completion.bash']), + ('share/doc/stgit', glob.glob('doc/*.txt'))]) + # Check the minimum versions required if sys.argv[1] in ['install', 'build']: __check_python_version() __check_git_version() -version.write_builtin_version() - # ensure readable template files old_mask = os.umask(0022) -setup(name = 'stgit', - version = version.version, - license = 'GPLv2', - author = 'Catalin Marinas', - author_email = 'catalin.marinas@xxxxxxxxx', - url = 'http://www.procode.org/stgit/', - description = 'Stacked GIT', - long_description = 'Push/pop utility on top of GIT', - scripts = ['stg'], - packages = ['stgit', 'stgit.commands', 'stgit.lib'], - data_files = [('share/stgit/templates', glob.glob('templates/*.tmpl')), - ('share/stgit/examples', glob.glob('examples/*.tmpl')), - ('share/stgit/examples', ['examples/gitconfig']), - ('share/stgit/contrib', ['contrib/diffcol.sh', - 'contrib/stgbashprompt.sh', - 'contrib/stgit-completion.bash']), - ('share/doc/stgit', glob.glob('doc/*.txt'))] - ) +try: + version.write_builtin_version() + __run_setup() +finally: + version.delete_builtin_version() # restore the old mask os.umask(old_mask) diff --git a/stgit/.gitignore b/stgit/.gitignore index 4f9c8f1..0d20b64 100644 --- a/stgit/.gitignore +++ b/stgit/.gitignore @@ -1,2 +1 @@ *.pyc -/builtin_version.py diff --git a/stgit/version.py b/stgit/version.py index 8ee5009..d57053d 100644 --- a/stgit/version.py +++ b/stgit/version.py @@ -1,6 +1,6 @@ from stgit.exception import StgException from stgit import run, utils -import os.path, re, sys +import os, os.path, re, sys class VersionUnavailable(StgException): pass @@ -31,17 +31,26 @@ def builtin_version(): else: return bv.version +def _builtin_version_file(ext = 'py'): + return os.path.join(sys.path[0], 'stgit', 'builtin_version.%s' % ext) + def write_builtin_version(): try: v = git_describe_version() except VersionUnavailable: return - f = file(os.path.join(sys.path[0], 'stgit', 'builtin_version.py'), 'w') + f = file(_builtin_version_file(), 'w') f.write('# This file was generated automatically. Do not edit by hand.\n' 'version = %r\n' % v) +def delete_builtin_version(): + for ext in ['py', 'pyc', 'pyo']: + fn = _builtin_version_file(ext) + if os.path.exists(fn): + os.remove(fn) + def get_version(): - for v in [git_describe_version, builtin_version]: + for v in [builtin_version, git_describe_version]: try: return v() except VersionUnavailable: -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html