← Back to team overview

testtools-dev team mailing list archive

[Merge] lp:~jml/testtools/better-snapshot-613734 into lp:testtools

 

Jonathan Lange has proposed merging lp:~jml/testtools/better-snapshot-613734 into lp:testtools.

Requested reviews:
  testtools developers (testtools-dev)
Related bugs:
  #613734 Hard to make snapshots for use with buildout
  https://bugs.launchpad.net/bugs/613734


This branch addresses bug 613734 by attempting to read the version number from PKG-INFO if it is present.  This prevents bzrlib from being used to get the revno when using a testtools snapshot in buildout.

PKG-INFO is defined as being an RFC 822 message, and the 'email' module is the recommended way of reading such.

I changed the version number for development versions to be of the form 0.9.8-r123.  This is largely because buildout explodes on the ~.

setup.py is also refactored a little to make it more readable to me.
-- 
https://code.launchpad.net/~jml/testtools/better-snapshot-613734/+merge/38719
Your team testtools developers is requested to review the proposed merge of lp:~jml/testtools/better-snapshot-613734 into lp:testtools.
=== modified file 'MANIFEST.in'
--- MANIFEST.in	2009-12-13 00:34:05 +0000
+++ MANIFEST.in	2010-10-18 13:33:39 +0000
@@ -5,5 +5,4 @@
 include MANUAL
 include NEWS
 include README
-include run-tests
 include .bzrignore

=== modified file 'setup.py'
--- setup.py	2010-09-11 13:44:56 +0000
+++ setup.py	2010-10-18 13:33:39 +0000
@@ -2,20 +2,49 @@
 """Distutils installer for testtools."""
 
 from distutils.core import setup
+import email
 import os
 
 import testtools
-version = '.'.join(str(component) for component in testtools.__version__[0:3])
-phase = testtools.__version__[3]
-if phase != 'final':
+
+
+def get_revno():
     import bzrlib.workingtree
     t = bzrlib.workingtree.WorkingTree.open_containing(__file__)[0]
+    return t.branch.revno()
+
+
+def get_version_from_pkg_info():
+    """Get the version from PKG-INFO file if we can."""
+    pkg_info_path = os.path.join(os.path.dirname(__file__), 'PKG-INFO')
+    try:
+        pkg_info_file = open(pkg_info_path, 'r')
+    except (IOError, OSError):
+        return None
+    try:
+        pkg_info = email.message_from_file(pkg_info_file)
+    except email.MessageError:
+        return None
+    return pkg_info.get('Version', None)
+
+
+def get_version():
+    """Return the version of testtools that we are building."""
+    version = '.'.join(
+        str(component) for component in testtools.__version__[0:3])
+    phase = testtools.__version__[3]
+    if phase == 'final':
+        return version
+    pkg_info_version = get_version_from_pkg_info()
+    if pkg_info_version:
+        return pkg_info_version
+    revno = get_revno()
     if phase == 'alpha':
         # No idea what the next version will be
-        version = 'next-%s' % t.branch.revno()
+        return 'next-r%s' % revno
     else:
         # Preserve the version number but give it a revno prefix
-        version = version + '~%s' % t.branch.revno()
+        return version + '-r%s' % revno
 
 
 def get_long_description():
@@ -30,6 +59,6 @@
       description=('Extensions to the Python standard library unit testing '
                    'framework'),
       long_description=get_long_description(),
-      version=version,
+      version=get_version(),
       classifiers=["License :: OSI Approved :: MIT License"],
       packages=['testtools', 'testtools.testresult', 'testtools.tests'])


Follow ups