Remove testr entry point

A "testr" entry-point was added to PBR in
I2227adf3643ffe6bcece0c7d2127d23e20d52f7a in Jun 2013.  However,
testrepository had already started providing this same
disutils.commands entry-point in Jan 2013 [1].

I am not sure if it is deterministic who wins when two packages
declare the same entry-point, but at least for me, running "python
setup.py testr ..." was not calling into any of the pbr hooks.  I
discovered this because I wanted to use the --coverage-package-name
argument provided by the pbr testr wrapper because to s/-/_ in dib.

The original change (I8e4bc9bb78be37b4d13f8d6c2edfe2d67554ad78)
overrides the setuptools provided "test" [2] to call testrepository
when it sees a .testr.conf file (falling back to nose for
compatability).  So it seems the intention was not to add a "testr"
command, but that "test" is overridden to run testr automatically when
available.

Therefore I think that testrepository owns the distutils.command
entry-point for "testr".  To avoid confusion we should remove the
duplicate entry-point here and just leave the "test" command
overrides.

I've added documentation on the test command.  The testr/test split is
quite confusing, being only one letter different, so that is called
out explicitly.  Comments in testr_command are updated to reflect
what's happening better.  This also converts the calls in tox.ini to
use the PBR wrapper "test".

[1] 2a36806c69 (diff-2eeaed663bd0d25b7e608891384b7298R96)
[2] https://github.com/pypa/setuptools/blob/master/setuptools/command/test.py

Change-Id: I5b68f03e782fef5c45424c04cc851be5988f9019
This commit is contained in:
Ian Wienand 2017-01-19 15:07:35 +11:00
parent 714990806a
commit e3ad98ca19
4 changed files with 59 additions and 12 deletions

View File

@ -390,6 +390,53 @@ environment, you can use::
testing =
quux:python_version=='2.7'
Testing
-------
pbr overrides the ``setuptools`` hook ``test`` (i.e. ``setup.py
test``). The following sequence is followed:
#. If a ``.testr.conf`` file exists and `testrepository
<https://pypi.python.org/pypi/testrepository>`__ is installed, PBR
will use it as the test runner. See the ``testr`` documentation
for more details.
.. note::
This is separate to ``setup.py testr`` (note the extra ``r``) which
is provided directly by the ``testrepository`` package. Be careful
as there is some overlap of command arguments.
#. Although deprecated, if ``[nosetests]`` is defined in ``setup.cfg``
and `nose <http://nose.readthedocs.io/en/latest/>`__ is installed,
the ``nose`` runner will be used.
#. In other cases no override will be installed and the ``test``
command will revert to `setuptools
<http://setuptools.readthedocs.io/en/latest/setuptools.html#test-build-package-and-run-a-unittest-suite>`__.
A typical usage would be in ``tox.ini`` such as::
[tox]
minversion = 2.0
skipsdist = True
envlist = py33,py34,py35,py26,py27,pypy,pep8,docs
[testenv]
usedevelop = True
setenv =
VIRTUAL_ENV={envdir}
CLIENT_NAME=pbr
deps = .
-r{toxinidir}/test-requirements.txt
commands =
python setup.py test --testr-args='{posargs}'
The argument ``--coverage`` will set ``PYTHON`` to ``coverage run`` to
produce a coverage report. ``--coverage-package-name`` can be used to
modify or narrow the packages traced.
Additional Docs
===============

View File

@ -26,16 +26,18 @@
# license you chose for the specific language governing permissions and
# limitations under that license.
"""setuptools/distutils commands to run testr via setup.py
"""setuptools/distutils command to run testr via setup.py
Currently provides 'testr' which runs tests using testr. You can pass
--coverage which will also export PYTHON='coverage run --source <your package>'
and automatically combine the coverage from each testr backend test runner
after the run completes.
PBR will hook in the Testr class to provide "setup.py test" when
.testr.conf is present in the repository (see pbr/hooks/commands.py).
If we are activated but testrepository is not installed, we provide a
sensible error.
You can pass --coverage which will also export PYTHON='coverage run
--source <your package>' and automatically combine the coverage from
each testr backend test runner after the run completes.
To use, just use setuptools/distribute and depend on testr, and it should be
picked up automatically (as the commands are exported in the testrepository
package metadata.
"""
from distutils import cmd

View File

@ -42,8 +42,6 @@ autodoc_tree_excludes =
[entry_points]
distutils.setup_keywords =
pbr = pbr.core:pbr
distutils.commands =
testr = pbr.testr_command:Testr
egg_info.writers =
pbr.json = pbr.pbr_json:write_pbr_json
console_scripts =

View File

@ -13,7 +13,7 @@ setenv =
deps = .
-r{toxinidir}/test-requirements.txt
commands =
python setup.py testr --testr-args='{posargs}'
python setup.py test --testr-args='{posargs}'
[tox:jenkins]
sitepackages = True
@ -26,7 +26,7 @@ commands = python setup.py build_sphinx
[testenv:cover]
commands =
python setup.py testr --coverage
python setup.py test --coverage
[testenv:venv]
commands = {posargs}