summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2011-02-26 13:29:40 -0800
committerBrett Cannon <brett@python.org>2011-02-26 13:29:40 -0800
commitc6fd22b57e5f8a0db880344b06ab5c19b9e0827d (patch)
treeecd7c9b5c884e6e78744955d3ca94c2c0464919f
parent2748b0dc7ec5fe7dbfb8c1ab6677c7c17999b25b (diff)
downloadpython-coveragepy-git-c6fd22b57e5f8a0db880344b06ab5c19b9e0827d.tar.gz
Allow coverage.py to be executed by pointing Python at a repository's
directory. Since Python 2.6 one can specify a __main__.py in a directory to tell Python what to do if it is pointed at simply a directory. For instance, assuming one has a clone of coverage.py sitting at ../coveragepy, this patch allows for:: python ../coveragepy run ... This is extremely handy if you want to use coverage.py straight from a clone without adding the clone's directory to sys.path (which can be an issue at least in the stdlib as that will pick up 'test' as a package, masking the stdlib's own 'test' package).
-rw-r--r--MANIFEST.in1
-rw-r--r--__main__.py16
2 files changed, 17 insertions, 0 deletions
diff --git a/MANIFEST.in b/MANIFEST.in
index 65a60a06..19663a2d 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -9,3 +9,4 @@ include README.txt
include CHANGES.txt
include AUTHORS.txt
prune test
+prune __main__.py
diff --git a/__main__.py b/__main__.py
new file mode 100644
index 00000000..7ad6d737
--- /dev/null
+++ b/__main__.py
@@ -0,0 +1,16 @@
+"""Be able to execute coverage.py by pointing Python at the repository's
+directory."""
+import os
+import runpy
+
+
+PKG = 'coverage'
+
+try:
+ run_globals = runpy.run_module(PKG, run_name='__main__', alter_sys=True)
+ executed = os.path.splitext(os.path.basename(run_globals['__file__']))[0]
+ if executed != '__main__': # For Python 2.5 compatibility
+ raise ImportError('Incorrectly executed %s instead of __main__' %
+ executed)
+except ImportError: # For Python 2.6 compatibility
+ runpy.run_module('%s.__main__' % PKG, run_name='__main__', alter_sys=True)