Source code for radical.utils.get_version


import re
import os

from .misc import ru_open

_pat = r'^\s*(?P<detail>(?P<short>[^-]*)(?P<base>-[^-@]+?)?(-[^@]+?)?(?P<branch>@.+?)?)\s*$'


# ------------------------------------------------------------------------------
#
# versioning mechanism:
#
#   - version_short :  1.2.3                       - used for installation
#   - version_detail:  1.2.3-v1.1-9-g0684b06@devel - used at runtime (ru.version)
#   - both are derived from the last git tag and branch information
#   - VERSION files are created on install, with the version_detail
#
[docs]def get_version(paths=None): """ paths: a VERSION file containing the detailed version is checked for in every directory listed in paths. """ if not paths: # by default, get version for myself pwd = os.path.dirname(__file__) root = "%s/.." % pwd paths = [root, pwd] if not isinstance(paths, list): paths = [paths] version_short = None version_base = None version_branch = None version_tag = None version_detail = None err = '' # if in any of the paths a VERSION file exists, we use the detailed version # in there. for path in paths: try: version_path = "%s/VERSION" % path with ru_open(version_path) as f: data = f.read() lines = data.split('\n') lines = [line.strip() for line in lines] # make sure we have a valid version file assert len(lines) > 1 version_short = lines[0] if len(lines) > 2: version_base = lines[1] version_branch = lines[2] version_tag = lines[3] version_detail = lines[4] except Exception as e: # ignore missing VERSION file, but keep error message err += '%s\n' % repr(e) # check if any one worked ok if not version_short: raise RuntimeError("Cannot determine version from %s (%s)" % (paths, err.strip())) return (version_short, version_base, version_branch, version_tag, version_detail)
# ------------------------------------------------------------------------------