summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2012-11-12 10:52:55 -0500
committerNed Batchelder <ned@nedbatchelder.com>2012-11-12 10:52:55 -0500
commit46140346e2dbacebddfa007cae793f3e2e3fadc1 (patch)
treeb8ee353720ce54f7c49d07a8245879d5fc125036
parent2be7a0db8713bbcc8682eb58c7d1b5b5a9b2c06f (diff)
downloadpython-coveragepy-git-46140346e2dbacebddfa007cae793f3e2e3fadc1.tar.gz
Don't import coverage into setup.py to get the version number. Do something far worse... :) #73
-rw-r--r--coverage/__init__.py8
-rw-r--r--coverage/version.py9
-rw-r--r--howto.txt2
-rw-r--r--setup.py21
-rw-r--r--test/test_misc.py18
5 files changed, 41 insertions, 17 deletions
diff --git a/coverage/__init__.py b/coverage/__init__.py
index 2653853b..0ccc699f 100644
--- a/coverage/__init__.py
+++ b/coverage/__init__.py
@@ -5,19 +5,13 @@ http://nedbatchelder.com/code/coverage
"""
-__version__ = "3.5.4b1" # see detailed history in CHANGES.txt
-
-__url__ = "http://nedbatchelder.com/code/coverage"
-if max(__version__).isalpha():
- # For pre-releases, use a version-specific URL.
- __url__ += "/" + __version__
+from coverage.version import __version__, __url__
from coverage.control import coverage, process_startup
from coverage.data import CoverageData
from coverage.cmdline import main, CoverageScript
from coverage.misc import CoverageException
-
# Module-level functions. The original API to this module was based on
# functions defined directly in the module, with a singleton of the coverage()
# class. That design hampered programmability, so the current api uses
diff --git a/coverage/version.py b/coverage/version.py
new file mode 100644
index 00000000..5a8a2d6e
--- /dev/null
+++ b/coverage/version.py
@@ -0,0 +1,9 @@
+"""The version and URL for coverage.py"""
+# This file is exec'ed in setup.py, don't import anything!
+
+__version__ = "3.5.4b1" # see detailed history in CHANGES.txt
+
+__url__ = "http://nedbatchelder.com/code/coverage"
+if max(__version__).isalpha():
+ # For pre-releases, use a version-specific URL.
+ __url__ += "/" + __version__
diff --git a/howto.txt b/howto.txt
index 915a4555..2cde1a17 100644
--- a/howto.txt
+++ b/howto.txt
@@ -5,7 +5,7 @@
- Ubuntu
- Mac
- Pythons 2.3, 2.4, 2.5, 2.6, 2.7, 3.1, 3.2, 3.3
-- Version number in coverage/__init__.py
+- Version number in coverage/version.py
- 3.1a1, 3.1b1, 3.1c1, 3.1
- Update CHANGES.txt, including release date.
- Update docstring in setup.py, including "New in x.y:"
diff --git a/setup.py b/setup.py
index 1d4e9efd..60953eed 100644
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,4 @@
-# setup.py for coverage.
+# setup.py for coverage.py
"""Code coverage measurement for Python
@@ -19,12 +19,11 @@ can be reported.
New in 3.3: .coveragerc files.
New in 3.2: Branch coverage!
-
"""
# This file is used unchanged under all versions of Python, 2.x and 3.x.
-classifiers = """
+classifiers = """\
Environment :: Console
Intended Audience :: Developers
License :: OSI Approved :: BSD License
@@ -36,7 +35,7 @@ Topic :: Software Development :: Testing
"""
# Pull in the tools we need.
-import sys
+import os, sys
# Distribute is a new fork of setuptools. It's supported on Py3.x, so we use
# it there, but stick with classic setuptools on Py2.x until Distribute becomes
@@ -51,13 +50,17 @@ use_setuptools()
from setuptools import setup
from distutils.core import Extension # pylint: disable=E0611,F0401
-# Get or massage our metadata.
+# Get or massage our metadata. We exec coverage/version.py so we can avoid
+# importing the product code into setup.py.
-from coverage import __url__, __version__
+doc = __doc__ # __doc__ will be overwritten by version.py.
+__version__ = __url__ = "" # keep pylint happy.
-doclines = (__doc__ % __url__).split('\n')
+cov_ver_py = os.path.join(os.path.split(__file__)[0], "coverage/version.py")
+exec(compile(open(cov_ver_py).read(), cov_ver_py, 'exec'))
-classifier_list = [c for c in classifiers.split("\n") if c]
+doclines = (doc % __url__).splitlines()
+classifier_list = classifiers.splitlines()
if 'a' in __version__:
devstat = "3 - Alpha"
@@ -67,7 +70,7 @@ else:
devstat = "5 - Production/Stable"
classifier_list.append("Development Status :: " + devstat)
-# Set it up!
+# Create the keyword arguments for setup()
setup_args = dict(
name = 'coverage',
diff --git a/test/test_misc.py b/test/test_misc.py
index eb73cc81..857f4cd8 100644
--- a/test/test_misc.py
+++ b/test/test_misc.py
@@ -3,6 +3,7 @@
import os, sys
from coverage.misc import Hasher
+from coverage import __version__, __url__
sys.path.insert(0, os.path.split(__file__)[0]) # Force relative import for Py3k
from coveragetest import CoverageTest
@@ -25,3 +26,20 @@ class HasherTest(CoverageTest):
h2 = Hasher()
h2.update({'b': 23, 'a': 17})
self.assertEqual(h1.digest(), h2.digest())
+
+
+class SetupPyTest(CoverageTest):
+ """Tests of setup.py"""
+
+ run_in_temp_dir = False
+
+ def test_version(self):
+ status, output = self.run_command_status(
+ "python setup.py --description --version --url --author"
+ )
+ self.assertEqual(status, 0)
+ out = output.splitlines()
+ self.assertIn("measurement", out[0])
+ self.assertEqual(out[1], __version__)
+ self.assertEqual(out[2], __url__)
+ self.assertIn("Ned Batchelder", out[3])