From c19a19699a0117f553a9392285a90a5ac846120b Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 4 Dec 2014 15:29:44 +0000 Subject: [PATCH 1/2] Versioning changes --- docs/conf.py | 2 +- setup.py | 2 +- wagtail/__init__.py | 4 +++ wagtail/utils/version.py | 59 +++++++++++++++++++++++++++++++++ wagtail/wagtailcore/__init__.py | 4 ++- 5 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 wagtail/utils/version.py diff --git a/docs/conf.py b/docs/conf.py index b8ff46164..5e6432667 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -30,7 +30,7 @@ if not on_rtd: # only import and set the theme if we're building docs locally sys.path.insert(0, os.path.abspath('..')) # Get Wagtail version -from wagtail.wagtailcore import __version__ +from wagtail import __version__ # Autodoc may need to import some models modules which require django settings # be configured diff --git a/setup.py b/setup.py index 1bf7dbf37..eae7333c9 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ import sys, os -from wagtail.wagtailcore import __version__ +from wagtail import __version__ try: diff --git a/wagtail/__init__.py b/wagtail/__init__.py index e69de29bb..b3b462a9f 100644 --- a/wagtail/__init__.py +++ b/wagtail/__init__.py @@ -0,0 +1,4 @@ +from wagtail.utils.version import get_version + +VERSION = (0, 9, 0, 'alpha', 0) +__version__ = get_version(VERSION) diff --git a/wagtail/utils/version.py b/wagtail/utils/version.py new file mode 100644 index 000000000..695f0b885 --- /dev/null +++ b/wagtail/utils/version.py @@ -0,0 +1,59 @@ +# https://raw.githubusercontent.com/django/django/stable/1.6.x/django/utils/version.py + +# This was copied into Wagtail so the get_git_changeset will use a file located in Wagtail instead of Django + +# Replace this with version that uses lru cache when we drop Django 1.6 support + +from __future__ import unicode_literals + +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 str(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_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] + try: + timestamp = datetime.datetime.utcfromtimestamp(int(timestamp)) + except ValueError: + return None + return timestamp.strftime('%Y%m%d%H%M%S') diff --git a/wagtail/wagtailcore/__init__.py b/wagtail/wagtailcore/__init__.py index fbeaf156c..6b9b8907d 100644 --- a/wagtail/wagtailcore/__init__.py +++ b/wagtail/wagtailcore/__init__.py @@ -1,2 +1,4 @@ -__version__ = '0.9.dev0' default_app_config = 'wagtail.wagtailcore.apps.WagtailCoreAppConfig' + +# Import Wagtail version so Django debug toolbar can see it +from wagtail import __version__ From 7f39cc4eab563e8853ee412819deee120bee7c1d Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 9 Feb 2015 13:25:11 +0000 Subject: [PATCH 2/2] Updated versioning code --- wagtail/utils/version.py | 51 ++++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/wagtail/utils/version.py b/wagtail/utils/version.py index 695f0b885..f3991332e 100644 --- a/wagtail/utils/version.py +++ b/wagtail/utils/version.py @@ -1,31 +1,25 @@ -# https://raw.githubusercontent.com/django/django/stable/1.6.x/django/utils/version.py - +# https://raw.githubusercontent.com/django/django/master/django/utils/version.py # This was copied into Wagtail so the get_git_changeset will use a file located in Wagtail instead of Django -# Replace this with version that uses lru cache when we drop Django 1.6 support - from __future__ import unicode_literals import datetime import os import subprocess +from django.utils.lru_cache import lru_cache + 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') + version = get_complete_version(version) # Now build the two parts of the version number: - # main = X.Y[.Z] + # major = 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]) + major = get_major_version(version) sub = '' if version[3] == 'alpha' and version[4] == 0: @@ -37,9 +31,39 @@ def get_version(version=None): mapping = {'alpha': 'a', 'beta': 'b', 'rc': 'c'} sub = mapping[version[3]] + str(version[4]) - return str(main + sub) + return str(major + sub) +def get_major_version(version=None): + "Returns major version from VERSION." + version = get_complete_version(version) + parts = 2 if version[2] == 0 else 3 + major = '.'.join(str(x) for x in version[:parts]) + return major + + +def get_complete_version(version=None): + """Returns a tuple of the wagtail version. If version argument is non-empty, + then checks for correctness of the tuple provided. + """ + if version is None: + from wagtail import VERSION as 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] + + +@lru_cache() def get_git_changeset(): """Returns a numeric identifier of the latest git changeset. @@ -57,3 +81,4 @@ def get_git_changeset(): except ValueError: return None return timestamp.strftime('%Y%m%d%H%M%S') +