Author: aaugustin Date: 2012-01-08 07:05:15 -0800 (Sun, 08 Jan 2012) New Revision: 17357
Added: django/trunk/tests/regressiontests/version/ django/trunk/tests/regressiontests/version/__init__.py django/trunk/tests/regressiontests/version/models.py django/trunk/tests/regressiontests/version/tests.py Modified: django/trunk/django/__init__.py django/trunk/django/core/management/__init__.py django/trunk/setup.py django/trunk/tests/regressiontests/admin_scripts/tests.py Log: Implemented PEP386-compatible version numbers. Thanks Jannis for the guidance. Modified: django/trunk/django/__init__.py =================================================================== --- django/trunk/django/__init__.py 2012-01-08 09:51:36 UTC (rev 17356) +++ django/trunk/django/__init__.py 2012-01-08 15:05:15 UTC (rev 17357) @@ -1,30 +1,30 @@ VERSION = (1, 4, 0, 'alpha', 1) -def get_version(): - version = '%s.%s' % (VERSION[0], VERSION[1]) - if VERSION[2]: - version = '%s.%s' % (version, VERSION[2]) - if VERSION[3:] == ('alpha', 0): - version = '%s pre-alpha' % version - else: - if VERSION[3] != 'final': - version = '%s %s %s' % (version, VERSION[3], VERSION[4]) - from django.utils.version import get_svn_revision - svn_rev = get_svn_revision() - if svn_rev != u'SVN-unknown': - version = "%s %s" % (version, svn_rev) - return version +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') -def get_distutils_version(): - # Distutils expects a version number formatted as major.minor[.patch][sub] - parts = 5 - if VERSION[3] == 'final': - parts = 3 - if VERSION[2] == 0: - parts = 2 - version = VERSION[:parts] - version = [str(x)[0] for x in version] # ['1', '4', '0', 'a', '1'] - if parts > 2: - version[2:] = [''.join(version[2:])] # ['1', '4', '0a1'] - version = '.'.join(version) # '1.4.0a1' - return version + # 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: + # At the toplevel, this would cause an import loop. + from django.utils.version import get_svn_revision + svn_revision = get_svn_revision()[4:] + if svn_revision != 'unknown': + sub = '.dev%s' % svn_revision + + elif version[3] != 'final': + mapping = {'alpha': 'a', 'beta': 'b', 'rc': 'c'} + sub = mapping[version[3]] + str(version[4]) + + return main + sub Modified: django/trunk/django/core/management/__init__.py =================================================================== --- django/trunk/django/core/management/__init__.py 2012-01-08 09:51:36 UTC (rev 17356) +++ django/trunk/django/core/management/__init__.py 2012-01-08 15:05:15 UTC (rev 17357) @@ -4,12 +4,11 @@ import imp import warnings -import django from django.core.management.base import BaseCommand, CommandError, handle_default_options from django.utils.importlib import import_module # For backwards compatibility: get_version() used to be in this module. -get_version = django.get_version +from django import get_version # A cache of loaded commands, so that call_command # doesn't have to reload every time it's called. Modified: django/trunk/setup.py =================================================================== --- django/trunk/setup.py 2012-01-08 09:51:36 UTC (rev 17356) +++ django/trunk/setup.py 2012-01-08 15:05:15 UTC (rev 17357) @@ -66,7 +66,7 @@ file_info[0] = '\\PURELIB\\%s' % file_info[0] # Dynamically calculate the version based on django.VERSION. -version = __import__('django').get_distutils_version() +version = __import__('django').get_version() setup( name = "Django", Modified: django/trunk/tests/regressiontests/admin_scripts/tests.py =================================================================== --- django/trunk/tests/regressiontests/admin_scripts/tests.py 2012-01-08 09:51:36 UTC (rev 17356) +++ django/trunk/tests/regressiontests/admin_scripts/tests.py 2012-01-08 15:05:15 UTC (rev 17357) @@ -1177,8 +1177,7 @@ args = ['--version'] out, err = self.run_manage(args) self.assertNoOutput(err) - # Only check the first part of the version number - self.assertOutput(out, get_version().split('-')[0]) + self.assertOutput(out, get_version()) def test_help(self): "--help is handled as a special case" Added: django/trunk/tests/regressiontests/version/__init__.py =================================================================== Added: django/trunk/tests/regressiontests/version/models.py =================================================================== Added: django/trunk/tests/regressiontests/version/tests.py =================================================================== --- django/trunk/tests/regressiontests/version/tests.py (rev 0) +++ django/trunk/tests/regressiontests/version/tests.py 2012-01-08 15:05:15 UTC (rev 17357) @@ -0,0 +1,26 @@ +import re + +from django import get_version +from django.utils.unittest import TestCase + +class VersionTests(TestCase): + + def test_development(self): + ver_tuple = (1, 4, 0, 'alpha', 0) + # This will return a different result when it's run within or outside + # of a SVN checkout: 1.4.devNNNNN or 1.4. + ver_string = get_version(ver_tuple) + self.assertRegexpMatches(ver_string, r'1\.4(\.dev\d+)?') + + def test_releases(self): + tuples_to_strings = ( + ((1, 4, 0, 'alpha', 1), '1.4a1'), + ((1, 4, 0, 'beta', 1), '1.4b1'), + ((1, 4, 0, 'rc', 1), '1.4c1'), + ((1, 4, 0, 'final', 0), '1.4'), + ((1, 4, 1, 'rc', 2), '1.4.1c2'), + ((1, 4, 1, 'final', 0), '1.4.1'), + ) + for ver_tuple, ver_string in tuples_to_strings: + self.assertEqual(get_version(ver_tuple), ver_string) + -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.