diff options
| author | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-23 21:52:41 -0400 | 
|---|---|---|
| committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-23 21:52:41 -0400 | 
| commit | b413141d1652d9935d433c081adbd97b3c091625 (patch) | |
| tree | a46a14e83d058b69d7e5f276c1ea962406c5de7a | |
| parent | 2622bcf956178d4b3dd7e4011511172a60747383 (diff) | |
| download | cbc-b413141d1652d9935d433c081adbd97b3c091625.tar.gz | |
Implement versioning schema
| -rw-r--r-- | cbc/extern/__init__.py | 0 | ||||
| -rw-r--r-- | cbc/extern/version.py | 114 | 
2 files changed, 114 insertions, 0 deletions
| diff --git a/cbc/extern/__init__.py b/cbc/extern/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/cbc/extern/__init__.py diff --git a/cbc/extern/version.py b/cbc/extern/version.py new file mode 100644 index 0000000..8e775c6 --- /dev/null +++ b/cbc/extern/version.py @@ -0,0 +1,114 @@ +# -*- coding: utf-8 -*- +# Author: Douglas Creager <dcreager@dcreager.net> +# This file is placed into the public domain. + +# 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 +from __future__ import print_function +from subprocess import Popen, PIPE +import sys + +__all__ = ("get_git_version") + +PY3 = sys.version_info[0] == 3 + + +def call_git_describe(abbrev=4): +    line = '' +    try: +        p = Popen(['git', 'describe', '--abbrev=%d' % abbrev], +                  stdout=PIPE, stderr=PIPE) +        p.stderr.close() +        if PY3: +            line = p.stdout.readlines()[0].decode() +        else: +            line = p.stdout.readlines()[0] +        return line.strip() + +    except: +        return None + + +def read_release_version(): +    try: +        f = open("RELEASE-VERSION", "r") + +        try: +            if PY3: +                version = f.readlines()[0].decode() +            else: +                version = f.readlines()[0] +            return version.strip() + +        finally: +            f.close() + +    except: +        return None + + +def write_release_version(version): +    f = open("RELEASE-VERSION", "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()) | 
