diff --git a/django/__init__.py b/django/__init__.py index 85cf02c9a4..32e1374765 100644 --- a/django/__init__.py +++ b/django/__init__.py @@ -1,53 +1,7 @@ -import datetime -import os -import subprocess - - VERSION = (1, 5, 0, 'alpha', 0) - -def get_version(version=None): - """Derives a PEP386-compliant version number from VERSION.""" - if version is None: - version = VERSION - assert len(version) == 5 - assert version[3] in ('alpha', 'beta', 'rc', 'final') - - # Now build the two parts of the version number: - # main = X.Y[.Z] - # sub = .devN - for pre-alpha releases - # | {a|b|c}N - for alpha, beta and rc releases - - parts = 2 if version[2] == 0 else 3 - main = '.'.join(str(x) for x in version[:parts]) - - sub = '' - if version[3] == 'alpha' and version[4] == 0: - git_changeset = get_git_changeset() - if git_changeset: - sub = '.dev%s' % git_changeset - - elif version[3] != 'final': - mapping = {'alpha': 'a', 'beta': 'b', 'rc': 'c'} - sub = mapping[version[3]] + str(version[4]) - - return main + sub - - -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__))) - git_show = subprocess.Popen('git show --pretty=format:%ct --quiet HEAD', - stdout=subprocess.PIPE, stderr=subprocess.PIPE, - shell=True, cwd=repo_dir, universal_newlines=True) - timestamp = git_show.communicate()[0].partition('\n')[0] - try: - timestamp = datetime.datetime.utcfromtimestamp(int(timestamp)) - except ValueError: - return None - return timestamp.strftime('%Y%m%d%H%M%S') +def get_version(*args, **kwargs): + # Don't litter django/__init__.py with all the get_version stuff. + # Only import if it's actually called. + from django.utils.version import get_version + return get_version(*args, **kwargs) diff --git a/django/utils/version.py b/django/utils/version.py new file mode 100644 index 0000000000..3f108b8af2 --- /dev/null +++ b/django/utils/version.py @@ -0,0 +1,49 @@ +import datetime +import os +import subprocess + +def get_version(version=None): + "Returns a PEP 386-compliant version number from VERSION." + if version is None: + from django import VERSION as version + else: + assert len(version) == 5 + assert version[3] in ('alpha', 'beta', 'rc', 'final') + + # Now build the two parts of the version number: + # main = X.Y[.Z] + # sub = .devN - for pre-alpha releases + # | {a|b|c}N - for alpha, beta and rc releases + + parts = 2 if version[2] == 0 else 3 + main = '.'.join(str(x) for x in version[:parts]) + + sub = '' + if version[3] == 'alpha' and version[4] == 0: + git_changeset = get_git_changeset() + if git_changeset: + sub = '.dev%s' % git_changeset + + elif version[3] != 'final': + mapping = {'alpha': 'a', 'beta': 'b', 'rc': 'c'} + sub = mapping[version[3]] + str(version[4]) + + return main + sub + +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__))) + git_show = subprocess.Popen('git show --pretty=format:%ct --quiet HEAD', + stdout=subprocess.PIPE, stderr=subprocess.PIPE, + shell=True, cwd=repo_dir, universal_newlines=True) + timestamp = git_show.communicate()[0].partition('\n')[0] + try: + timestamp = datetime.datetime.utcfromtimestamp(int(timestamp)) + except ValueError: + return None + return timestamp.strftime('%Y%m%d%H%M%S')