1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- from __future__ import unicode_literals
- import datetime
- import os
- import subprocess
- def get_version(version=None):
- "Returns a PEP 440-compliant version number from VERSION."
- version = get_complete_version(version)
- # Now build the two parts of the version number:
- # main = X.Y[.Z]
- # sub = .devN - for pre-alpha releases
- # | {a|b|rc}N - for alpha, beta, and rc releases
- main = get_main_version(version)
- sub = ""
- if version[3] == "alpha" and version[4] == 0:
- git_changeset = get_git_changeset()
- if git_changeset:
- sub = ".dev%s" % git_changeset
- else:
- sub = ".dev"
- elif version[3] != "final":
- mapping = {"alpha": "a", "beta": "b", "rc": "rc"}
- sub = mapping[version[3]] + str(version[4])
- return str(main + sub)
- def get_main_version(version=None):
- "Returns main version (X.Y[.Z]) from VERSION."
- version = get_complete_version(version)
- parts = 2 if version[2] == 0 else 3
- return ".".join(str(x) for x in version[:parts])
- def get_complete_version(version=None):
- """Returns a tuple of the promise version. If version argument is non-empty,
- then checks for correctness of the tuple provided.
- """
- if version is None:
- from promise import VERSION
- return VERSION
- else:
- assert len(version) == 5
- assert version[3] in ("alpha", "beta", "rc", "final")
- return version
- def get_docs_version(version=None):
- version = get_complete_version(version)
- if version[3] != "final":
- return "dev"
- else:
- return "%d.%d" % version[:2]
- def get_git_changeset():
- """Returns a numeric identifier of the latest git changeset.
- The result is the UTC timestamp of the changeset in YYYYMMDDHHMMSS format.
- This value isn't guaranteed to be unique, but collisions are very unlikely,
- so it's sufficient for generating the development version numbers.
- """
- repo_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
- try:
- git_log = subprocess.Popen(
- "git log --pretty=format:%ct --quiet -1 HEAD",
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- shell=True,
- cwd=repo_dir,
- universal_newlines=True,
- )
- timestamp = git_log.communicate()[0]
- timestamp = datetime.datetime.utcfromtimestamp(int(timestamp))
- except Exception:
- return None
- return timestamp.strftime("%Y%m%d%H%M%S")
|