From 8b24af4c659cd93a28bcba1baa5e9808b23ea8f3 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Sun, 11 Mar 2018 01:29:07 -0600 Subject: [PATCH 1/3] Try hard to find a git revision to use as cache key --- .gitignore | 2 ++ setup.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++- sumpy/version.py | 28 ++++++++++++++++++++----- 3 files changed, 78 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 7fcc2940..71f03d3a 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,5 @@ doc/_build .cache .DS_Store .ipynb_checkpoints + +sumpy/_git_rev.py diff --git a/setup.py b/setup.py index 400d1b9f..8d085054 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +import os from setuptools import setup ver_dic = {} @@ -10,8 +11,59 @@ try: finally: version_file.close() +os.environ["AKPYTHON_EXEC_FROM_WITHIN_WITHIN_SETUP_PY"] = "1" exec(compile(version_file_contents, "sumpy/version.py", 'exec'), ver_dic) + +# {{{ capture git revision at install time + +# authoritative version in pytools/__init__.py +def find_git_revision(tree_root): + # Keep this routine self-contained so that it can be copy-pasted into + # setup.py. + + from os.path import join, exists, abspath + tree_root = abspath(tree_root) + + if not exists(join(tree_root, ".git")): + return None + + from subprocess import Popen, PIPE, STDOUT + p = Popen(["git", "rev-parse", "HEAD"], shell=False, + stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True, + cwd=tree_root) + (git_rev, _) = p.communicate() + + import sys + if sys.version_info >= (3,): + git_rev = git_rev.decode() + + git_rev = git_rev.rstrip() + + retcode = p.returncode + assert retcode is not None + if retcode != 0: + from warnings import warn + warn("unable to find git revision") + return None + + return git_rev + + +def write_git_revision(package_name): + from os.path import dirname, join + dn = dirname(__file__) + git_rev = find_git_revision(dn) + + with open(join(dn, package_name, "_git_rev.py"), "w") as outf: + outf.write("GIT_REVISION = %s\n" % repr(git_rev)) + + +write_git_revision("sumpy") + +# }}} + + setup(name="sumpy", version=ver_dic["VERSION_TEXT"], description="Fast summation in Python", @@ -40,8 +92,8 @@ setup(name="sumpy", packages=["sumpy", "sumpy.expansion"], install_requires=[ + "pytools>=2018.2", "loo.py>=2017.2", - "pytools>=2017.6", "boxtree>=2013.1", "pytest>=2.3", "six", diff --git a/sumpy/version.py b/sumpy/version.py index 7edeb71f..653ac047 100644 --- a/sumpy/version.py +++ b/sumpy/version.py @@ -1,3 +1,5 @@ +from __future__ import division, absolute_import + __copyright__ = "Copyright (C) 2014 Andreas Kloeckner" __license__ = """ @@ -20,13 +22,29 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +# {{{ find install- or run-time git revision + +import os +if os.environ.get("AKPYTHON_EXEC_FROM_WITHIN_WITHIN_SETUP_PY") is not None: + # We're just being exec'd by setup.py. We can't import anything. + _git_rev = None + +else: + import loopy._git_rev as _git_rev_mod + _git_rev = _git_rev_mod.GIT_REVISION + + # If we're running from a dev tree, the last install (and hence the most + # recent update of the above git rev could have taken place very long ago. + from pytools import find_module_git_revision + _runtime_git_rev = find_module_git_revision(__file__, n_levels_up=1) + if _runtime_git_rev is not None: + _git_rev = _runtime_git_rev + +# }}} + VERSION = (2016, 1) VERSION_STATUS = "beta1" VERSION_TEXT = ".".join(str(x) for x in VERSION) + VERSION_STATUS -# When developing on a branch, set the first element of this tuple to your -# branch name, so as to avoid conflicts with the master branch. Make sure -# to reset this to the next number up with "master" before merging into -# master. -KERNEL_VERSION = ("master", 29) +KERNEL_VERSION = (VERSION, _git_rev, 0) -- GitLab From 5e913977d22a5374dd7c60cbc00481ddd7dc4007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Kl=C3=B6ckner?= Date: Sun, 11 Mar 2018 03:40:19 -0400 Subject: [PATCH 2/3] Add missing paren in comment --- sumpy/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sumpy/version.py b/sumpy/version.py index 653ac047..9a2a49f1 100644 --- a/sumpy/version.py +++ b/sumpy/version.py @@ -34,7 +34,7 @@ else: _git_rev = _git_rev_mod.GIT_REVISION # If we're running from a dev tree, the last install (and hence the most - # recent update of the above git rev could have taken place very long ago. + # recent update of the above git rev) could have taken place very long ago. from pytools import find_module_git_revision _runtime_git_rev = find_module_git_revision(__file__, n_levels_up=1) if _runtime_git_rev is not None: -- GitLab From 1117165de179b7c6c1a4fad71ec9e8343507099d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Kl=C3=B6ckner?= Date: Sun, 11 Mar 2018 14:06:40 -0400 Subject: [PATCH 3/3] Fix git rev module reference: loopy->sumpy. --- sumpy/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sumpy/version.py b/sumpy/version.py index 9a2a49f1..f4233592 100644 --- a/sumpy/version.py +++ b/sumpy/version.py @@ -30,7 +30,7 @@ if os.environ.get("AKPYTHON_EXEC_FROM_WITHIN_WITHIN_SETUP_PY") is not None: _git_rev = None else: - import loopy._git_rev as _git_rev_mod + import sumpy._git_rev as _git_rev_mod _git_rev = _git_rev_mod.GIT_REVISION # If we're running from a dev tree, the last install (and hence the most -- GitLab