Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #18224 -- Changed the dev version number.

Following the move from SVN to git.
  • Loading branch information...
commit 02a5b41db4ff8544f93a5d9854b346a9aae4f556 1 parent 905bd7f
@aaugustin aaugustin authored
View
33 django/__init__.py
@@ -1,5 +1,11 @@
+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:
@@ -17,14 +23,31 @@ def get_version(version=None):
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
+ 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')
View
41 django/utils/version.py
@@ -1,41 +0,0 @@
-import django
-import re
-
-def get_svn_revision(path=None):
- """
- Returns the SVN revision in the form SVN-XXXX,
- where XXXX is the revision number.
-
- Returns SVN-unknown if anything goes wrong, such as an unexpected
- format of internal SVN files.
-
- If path is provided, it should be a directory whose SVN info you want to
- inspect. If it's not provided, this will use the root django/ package
- directory.
- """
- rev = None
- if path is None:
- path = django.__path__[0]
- entries_path = '%s/.svn/entries' % path
-
- try:
- entries = open(entries_path, 'r').read()
- except IOError:
- pass
- else:
- # Versions >= 7 of the entries file are flat text. The first line is
- # the version number. The next set of digits after 'dir' is the revision.
- if re.match('(\d+)', entries):
- rev_match = re.search('\d+\s+dir\s+(\d+)', entries)
- if rev_match:
- rev = rev_match.groups()[0]
- # Older XML versions of the file specify revision as an attribute of
- # the first entries node.
- else:
- from xml.dom import minidom
- dom = minidom.parse(entries_path)
- rev = dom.getElementsByTagName('entry')[0].getAttribute('revision')
-
- if rev:
- return u'SVN-%s' % rev
- return u'SVN-unknown'
View
2  tests/regressiontests/version/tests.py
@@ -8,7 +8,7 @@ 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.
+ # of a git clone: 1.4.devYYYYMMDDHHMMSS or 1.4.
ver_string = get_version(ver_tuple)
self.assertRegexpMatches(ver_string, r'1\.4(\.dev\d+)?')

0 comments on commit 02a5b41

Please sign in to comment.
Something went wrong with that request. Please try again.