Hello community, here is the log from the commit of package python-tox for openSUSE:Factory checked in at 2013-06-29 14:35:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-tox (Old) and /work/SRC/openSUSE:Factory/.python-tox.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "python-tox" Changes: -------- --- /work/SRC/openSUSE:Factory/python-tox/python-tox.changes 2013-04-23 11:39:27.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python-tox.new/python-tox.changes 2013-06-29 14:35:57.000000000 +0200 @@ -1,0 +2,25 @@ +Tue Jun 25 11:49:47 UTC 2013 - dmueller@suse.com + +- update to 1.5.0: + - fix issue104: use setuptools by default, instead of distribute, + now that setuptools has distribute merged. + - make sure test commands are searched first in the virtualenv + - re-fix issue2 - add whitelist_externals to be used in ``[testenv*]`` + sections, allowing to avoid warnings for commands such as ``make``, + used from the commands value. + - fix issue97 - allow substitutions to reference from other sections + (thanks Krisztian Fekete) + - fix issue92 - fix {envsitepackagesdir} to actually work again + - show (test) command that is being executed, thanks + Lukasz Balcerzak + - re-license tox to MIT license + - depend on virtualenv-1.9.1 + - rename README.txt to README.rst to make bitbucket happier + + +------------------------------------------------------------------- +Mon Jun 17 12:14:38 UTC 2013 - speilicke@suse.com + +- Only require argparse on SLE, it's part of Python-2.7 + +------------------------------------------------------------------- Old: ---- tox-1.4.3.tar.gz New: ---- tox-1.5.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-tox.spec ++++++ --- /var/tmp/diff_new_pack.MlI82X/_old 2013-06-29 14:35:57.000000000 +0200 +++ /var/tmp/diff_new_pack.MlI82X/_new 2013-06-29 14:35:57.000000000 +0200 @@ -15,11 +15,12 @@ # Please submit bugfixes or comments via http://bugs.opensuse.org/ # + Name: python-tox -Version: 1.4.3 +Version: 1.5.0 Release: 0 Summary: Virtualenv-based automation of test activities -License: GPL-2.0+ +License: MIT Group: Development/Languages/Python Url: http://codespeak.net/tox Source: http://pypi.python.org/packages/source/t/tox/tox-%{version}.tar.gz @@ -29,12 +30,12 @@ BuildRequires: python-pytest BuildRequires: python-virtualenv BuildRequires: unzip -Requires: python-argparse Requires: python-py Requires: python-virtualenv BuildRoot: %{_tmppath}/%{name}-%{version}-build %if 0%{?suse_version} && 0%{?suse_version} <= 1110 %{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} +Requires: python-argparse %else BuildArch: noarch %endif @@ -68,7 +69,7 @@ %files %defattr(-,root,root,-) -%doc LICENSE README.txt doc/_build/html +%doc LICENSE README.rst doc/_build/html %{_bindir}/* %{python_sitelib}/* ++++++ tox-1.4.3.tar.gz -> tox-1.5.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/CHANGELOG new/tox-1.5.0/CHANGELOG --- old/tox-1.4.3/CHANGELOG 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/CHANGELOG 2013-06-22 15:00:49.000000000 +0200 @@ -1,3 +1,30 @@ +1.5.0 +----------------- + +- fix issue104: use setuptools by default, instead of distribute, + now that setuptools has distribute merged. + +- make sure test commands are searched first in the virtualenv + +- re-fix issue2 - add whitelist_externals to be used in ``[testenv*]`` + sections, allowing to avoid warnings for commands such as ``make``, + used from the commands value. + +- fix issue97 - allow substitutions to reference from other sections + (thanks Krisztian Fekete) + +- fix issue92 - fix {envsitepackagesdir} to actually work again + +- show (test) command that is being executed, thanks + Lukasz Balcerzak + +- re-license tox to MIT license + +- depend on virtualenv-1.9.1 + +- rename README.txt to README.rst to make bitbucket happier + + 1.4.3 ----------------- @@ -44,7 +71,7 @@ - change tests to not rely on os.path.expanduser (closes #60), also make mock session return args[1:] for more precise checking (closes #61) - thanks to Barry Warszaw for both. + thanks to Barry Warsaw for both. 1.4.2 ----------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/CONTRIBUTORS new/tox-1.5.0/CONTRIBUTORS --- old/tox-1.4.3/CONTRIBUTORS 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/CONTRIBUTORS 2013-06-22 15:00:49.000000000 +0200 @@ -1,8 +1,10 @@ -contributions (under the MIT license): +contributions: +Krisztian Fekete Marc Abramowitz Sridhar Ratnakumar +Barry Warsaw Chris Rose Jannis Leidl Ronny Pfannschmidt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/LICENSE new/tox-1.5.0/LICENSE --- old/tox-1.4.3/LICENSE 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/LICENSE 2013-06-22 15:00:49.000000000 +0200 @@ -1,10 +1,20 @@ -The tox package is released under the provisions of the GNU General -Public License (GPL), version 2 or later. -See http://www.fsf.org/licensing/licenses/ for more information. +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. -If you have questions and/or want to use parts of -the code under a different license than the GPL -please contact me. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -holger krekel, May 2011, holger at merlinux eu diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/PKG-INFO new/tox-1.5.0/PKG-INFO --- old/tox-1.4.3/PKG-INFO 2013-03-01 07:39:20.000000000 +0100 +++ new/tox-1.5.0/PKG-INFO 2013-06-22 15:00:49.000000000 +0200 @@ -1,33 +1,38 @@ Metadata-Version: 1.1 Name: tox -Version: 1.4.3 +Version: 1.5.0 Summary: virtualenv-based automation of test activities Home-page: http://tox.testrun.org/ Author: holger krekel Author-email: holger@merlinux.eu -License: GPLv2 or later +License: http://opensource.org/licenses/MIT Description: What is Tox? - ========================== + -------------------- - Tox as is a generic virtualenv management and test command line tool you can - use for: + Tox as is a generic virtualenv_ management and test command line tool you can use for: - * checking your package installs correctly with different - Python versions and interpreters + * checking your package installs correctly with different Python versions and + interpreters - * running your tests in each of the - environments, configuring your test tool of choice + * running your tests in each of the environments, configuring your test tool of choice - * acting as a frontend to Continuous Integration - servers, greatly reducing boilerplate and merging - CI and shell-based testing. + * acting as a frontend to Continuous Integration servers, greatly + reducing boilerplate and merging CI and shell-based testing. - For more information, docs and many examples please checkout the `home page`_: + For more information and the repository please checkout: - http://tox.testrun.org/ + - homepage: http://tox.testrun.org + + - repository: https://bitbucket.org/hpk42/tox + + have fun, + + + have fun, + + holger krekel, May 2013 - .. _`home page`: http://tox.testrun.org/ Platform: unix Platform: linux @@ -36,7 +41,7 @@ Platform: win32 Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: GNU General Public License (GPL) +Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: POSIX Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: MacOS :: MacOS X diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/README.rst new/tox-1.5.0/README.rst --- old/tox-1.4.3/README.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/tox-1.5.0/README.rst 2013-06-22 15:00:49.000000000 +0200 @@ -0,0 +1,27 @@ + +What is Tox? +-------------------- + +Tox as is a generic virtualenv_ management and test command line tool you can use for: + +* checking your package installs correctly with different Python versions and + interpreters + +* running your tests in each of the environments, configuring your test tool of choice + +* acting as a frontend to Continuous Integration servers, greatly + reducing boilerplate and merging CI and shell-based testing. + +For more information and the repository please checkout: + +- homepage: http://tox.testrun.org + +- repository: https://bitbucket.org/hpk42/tox + +have fun, + + +have fun, + +holger krekel, May 2013 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/README.txt new/tox-1.5.0/README.txt --- old/tox-1.4.3/README.txt 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/README.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ - -What is Tox? --------------------- - -Tox as is a generic virtualenv_ management and test command line tool you can use for: - -* checking your package installs correctly with different Python versions and - interpreters - -* running your tests in each of the environments, configuring your test tool of choice - -* acting as a frontend to Continuous Integration servers, greatly - reducing boilerplate and merging CI and shell-based testing. - -For more information, docs and many examples please checkout: - - http://tox.testrun.org - -have fun, - -holger krekel, May 2012 - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/doc/conf.py new/tox-1.5.0/doc/conf.py --- old/tox-1.4.3/doc/conf.py 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/doc/conf.py 2013-06-22 15:00:49.000000000 +0200 @@ -41,14 +41,14 @@ # General information about the project. project = u'tox' -copyright = u'2011, holger krekel and others' +copyright = u'2013, holger krekel and others' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. -release = version = "1.4.2-1" +release = version = "1.5.0" # The full version, including alpha/beta/rc tags. # The language for content autogenerated by Sphinx. Refer to documentation diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/doc/config.txt new/tox-1.5.0/doc/config.txt --- old/tox-1.4.3/doc/config.txt 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/doc/config.txt 2013-06-22 15:00:49.000000000 +0200 @@ -75,6 +75,16 @@ For eventually performing a call to ``subprocess.Popen(args, ...)`` ``args`` are determined by splitting the whole command by whitespace. +.. confval:: whitelist_externals=MULTI-LINE-LIST + + each line specifies a command name (in glob-style pattern format) + which can be used in the ``commands`` section without triggering + a "not installed in virtualenv" warning. Example: if you use the + unix ``make`` for running tests you can list ``whitelist_externals=make`` + or ``whitelist_externals=/usr/bin/make`` if you want more precision. + If you don't want tox to issue a warning in any case, just use + ``whitelist_externals=*`` which will match all commands (not recommended). + .. confval:: changedir=path change to this working directory when executing the test command. @@ -115,9 +125,12 @@ .. confval:: distribute=True|False - Set to ``False`` if you want to use setuptools_ instead of the default - distribute_ in the virtual environment. - **default:** True. + Set to ``True`` if you want to use distribute_ instead of the default + setuptools_ in the virtual environment. Prior to tox-1.5 the + default was True and now is False, meaning ``setuptools`` is used + (note that setuptools-0.7 merged with distribute). In future versions + of tox this option might be ignored and setuptools always chosen. + **default:** False. .. confval:: sitepackages=True|False diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/doc/example/basic.txt new/tox-1.5.0/doc/example/basic.txt --- old/tox-1.4.3/doc/example/basic.txt 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/doc/example/basic.txt 2013-06-22 15:00:49.000000000 +0200 @@ -44,6 +44,22 @@ However, you can also create your own test environment names, see some of the examples in :doc:`examples <../examples>`. +whitelisting a non-virtualenv commands +----------------------------------------------- + +.. versionadded:: 1.5 + +Sometimes you may want to use tools not contained in your +virtualenv such as ``make``, ``bash`` or others. To avoid +warnings you can use the ``whitelist_externals`` testenv +configuration:: + + # content of tox.ini + [testenv] + whitelist_externals = make + /bin/bash + + .. _virtualenv: http://pypi.python.org/pypi/virtualenv .. _multiindex: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/doc/example/pytest.txt new/tox-1.5.0/doc/example/pytest.txt --- old/tox-1.4.3/doc/example/pytest.txt 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/doc/example/pytest.txt 2013-06-22 15:00:49.000000000 +0200 @@ -85,16 +85,30 @@ **installed-versus-checkout version**. ``py.test`` collects test modules on the filesystem and then tries to import them under their -`fully qualified name`_. This means that if your test directory contains -an ``__init__.py`` file then your ``py.test`` invocation may end up +`fully qualified name`_. This means that if your test files are +importable from somewhere then your ``py.test`` invocation may end up importing the package from the checkout directory rather than the -installed package. Therefore it is better to try to avoid -``__init__.py`` files in test directories and also try to avoid custom -``PYTHONPATH`` settings. After all, it is the job of your ``setup.py`` -file and the install tools to care for making the package properly -available for importing. +installed package. + +There are a few ways to prevent this. + +With installed tests (the tests packages are known to ``setup.py``), a +safe and explicit option is to give the explicit path +``{envsitepackagesdir}/mypkg`` to pytest. +Alternatively, it is possible to use ``changedir`` so that checked-out +files are outside the import path, then pass ``--pyargs mypkg`` to +pytest. + +Installed tests are particularly convenient when combined with +`Distribute's 2to3 support` (``use_2to3``). + +With tests that won't be installed, the simplest way is to avoid +``__init__.py`` files in test directories; pytest will still find them +but they won't be copied to other places or be found by Python's import +system. .. _`fully qualified name`: http://pytest.org/latest/goodpractises.html#package-name +.. _`Distribute's 2to3 support`: http://packages.python.org/distribute/python3.html .. include:: ../links.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/doc/index.txt new/tox-1.5.0/doc/index.txt --- old/tox-1.4.3/doc/index.txt 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/doc/index.txt 2013-06-22 15:00:49.000000000 +0200 @@ -1,7 +1,7 @@ Welcome to the tox automation project =============================================== -.. note:: Upcoming: `professional testing with pytest and tox <`http://www.python-academy.com/courses/specialtopics/python_course_testing.html>`_ , 24th-26th June 2013, Leipzig. +.. note:: Upcoming: `professional testing with pytest and tox <http://www.python-academy.com/courses/specialtopics/python_course_testing.html>`_ , 24th-26th June 2013, Leipzig. vision: standardize testing in Python --------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/doc/install.txt new/tox-1.5.0/doc/install.txt --- old/tox-1.4.3/doc/install.txt 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/doc/install.txt 2013-06-22 15:00:49.000000000 +0200 @@ -4,13 +4,13 @@ Install info in a nutshell ---------------------------------- -**Pythons**: CPython 2.4-3.2, Jython-2.5.1, pypy-1.5 +**Pythons**: CPython 2.4-3.3, Jython-2.5.1, pypy-1.9ff **Operating systems**: Linux, Windows, OSX, Unix **Installer Requirements**: setuptools_ or Distribute_ -**License**: GPLv2 or later +**License**: MIT license **hg repository**: http://bitbucket.org/hpk42/tox diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/setup.py new/tox-1.5.0/setup.py --- old/tox-1.4.3/setup.py 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/setup.py 2013-06-22 15:00:49.000000000 +0200 @@ -2,29 +2,6 @@ from setuptools import setup from setuptools.command.test import test as TestCommand -long_description = """ -What is Tox? -========================== - -Tox as is a generic virtualenv management and test command line tool you can -use for: - -* checking your package installs correctly with different - Python versions and interpreters - -* running your tests in each of the - environments, configuring your test tool of choice - -* acting as a frontend to Continuous Integration - servers, greatly reducing boilerplate and merging - CI and shell-based testing. - -For more information, docs and many examples please checkout the `home page`_: - - http://tox.testrun.org/ - -.. _`home page`: http://tox.testrun.org/ -""" class Tox(TestCommand): @@ -41,16 +18,16 @@ def main(): version = sys.version_info[:2] - install_requires = ['virtualenv>=1.8.4', 'py>=1.4.12', ] + install_requires = ['virtualenv>=1.9.1', 'py>=1.4.15', ] if version < (2, 7) or (3, 0) <= version <= (3, 1): install_requires += ['argparse'] setup( name='tox', description='virtualenv-based automation of test activities', - long_description=long_description, + long_description=open("README.rst").read(), url='http://tox.testrun.org/', - version='1.4.3', - license='GPLv2 or later', + version='1.5.0', + license='http://opensource.org/licenses/MIT', platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'], author='holger krekel', author_email='holger@merlinux.eu', @@ -65,15 +42,15 @@ classifiers=[ 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Developers', - 'License :: OSI Approved :: GNU General Public License (GPL)', - 'Operating System :: POSIX', - 'Operating System :: Microsoft :: Windows', - 'Operating System :: MacOS :: MacOS X', - 'Topic :: Software Development :: Testing', - 'Topic :: Software Development :: Libraries', - 'Topic :: Utilities', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3'], + 'License :: OSI Approved :: MIT License', + 'Operating System :: POSIX', + 'Operating System :: Microsoft :: Windows', + 'Operating System :: MacOS :: MacOS X', + 'Topic :: Software Development :: Testing', + 'Topic :: Software Development :: Libraries', + 'Topic :: Utilities', + 'Programming Language :: Python', + 'Programming Language :: Python :: 3'], ) if __name__ == '__main__': diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/tests/test_config.py new/tox-1.5.0/tests/test_config.py --- old/tox-1.4.3/tests/test_config.py 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/tests/test_config.py 2013-06-22 15:00:49.000000000 +0200 @@ -1,6 +1,7 @@ import tox import pytest import os, sys +import subprocess from textwrap import dedent import py @@ -175,6 +176,29 @@ py.test.raises(tox.exception.ConfigError, 'reader.getdefault("section", "key2")') + def test_getdefault_other_section_substitution(self, newconfig): + config = newconfig(""" + [section] + key = rue + [testenv] + key = t{[section]key} + """) + reader = IniReader(config._cfg) + x = reader.getdefault("testenv", "key") + assert x == "true" + + def test_command_substitution_from_other_section(self, newconfig): + config = newconfig(""" + [section] + key = whatever + [testenv] + commands = + echo {[section]key} + """) + reader = IniReader(config._cfg) + x = reader.getargvlist("testenv", "commands") + assert x == [["echo", "whatever"]] + def test_argvlist(self, tmpdir, newconfig): config = newconfig(""" [section] @@ -328,7 +352,7 @@ envconfig = config.envconfigs['python'] assert envconfig.commands == [["xyz", "--abc"]] assert envconfig.changedir == config.setupdir - assert envconfig.distribute == True + assert envconfig.distribute == False assert envconfig.sitepackages == False assert envconfig.envlogdir == envconfig.envdir.join("log") assert envconfig.setenv is None @@ -344,6 +368,24 @@ envconfig = config.envconfigs['py'] assert envconfig.commands == [["abc"]] + def test_whitelist_externals(self, tmpdir, newconfig): + config = newconfig(""" + [testenv] + whitelist_externals = xyz + commands=xyz + [testenv:x] + + [testenv:py] + whitelist_externals = xyz2 + commands=abc + """) + assert len(config.envconfigs) == 2 + envconfig = config.envconfigs['py'] + assert envconfig.commands == [["abc"]] + assert envconfig.whitelist_externals == ["xyz2"] + envconfig = config.envconfigs['x'] + assert envconfig.whitelist_externals == ["xyz"] + def test_changedir(self, tmpdir, newconfig): config = newconfig(""" [testenv] @@ -590,6 +632,35 @@ assert conf.changedir.basename == 'testing' assert conf.changedir.dirpath().realpath() == tmpdir.realpath() + @pytest.mark.xfailif("sys.platform == 'win32'") + def test_substitution_envsitepackagesdir(self, tmpdir, monkeypatch, + newconfig): + """ + The envsitepackagesdir property is mostly doing system work, + so this test doesn't excercise it very well. + + Usage of envsitepackagesdir on win32/jython will explicitly + throw an exception, + """ + class MockPopen(object): + returncode = 0 + + def __init__(self, *args, **kwargs): + pass + + def communicate(self, *args, **kwargs): + return 'onevalue', 'othervalue' + + monkeypatch.setattr(subprocess, 'Popen', MockPopen) + env = 'py%s' % (''.join(sys.version.split('.')[0:2])) + config = newconfig(""" + [testenv:%s] + commands = {envsitepackagesdir} + """ % (env)) + conf = config.envconfigs[env] + argv = conf.commands + assert argv[0][0] == 'onevalue' + class TestGlobalOptions: def test_notest(self, newconfig): @@ -753,6 +824,22 @@ assert config.indexserver["default"].url == "xzy" assert config.indexserver["name1"].url == "xzy" + def test_multiple_homedir_relative_local_indexservers(self, newconfig): + inisource = """ + [tox] + indexserver = + default = file://{homedir}/.pip/downloads/simple + local1 = file://{homedir}/.pip/downloads/simple + local2 = file://{toxinidir}/downloads/simple + pypi = http://pypi.python.org/simple + """ + config = newconfig([], inisource) + homedir = str(py.path.local._gethomedir()) + expected = "file://%s/.pip/downloads/simple" % homedir + assert config.indexserver['default'].url == expected + assert config.indexserver['local1'].url == \ + config.indexserver['default'].url + class TestParseEnv: def test_parse_recreate(self, newconfig): @@ -807,8 +894,6 @@ *docs* """) - @py.test.mark.xfail("sys.version_info < (2,6)", - reason="virtualenv3 cannot be imported") def test_config_specific_ini(self, tmpdir, cmd): ini = tmpdir.ensure("hello.ini") result = cmd.run("tox", "-c", ini, "--showconfig") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/tests/test_venv.py new/tox-1.5.0/tests/test_venv.py --- old/tox-1.4.3/tests/test_venv.py 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/tests/test_venv.py 2013-06-22 15:00:49.000000000 +0200 @@ -102,6 +102,20 @@ assert interp == venv.getconfigexecutable() assert venv.path_config.check(exists=False) +@pytest.mark.skipif("sys.platform == 'win32'") +def test_commandpath_venv_precendence(tmpdir, monkeypatch, + mocksession, newconfig): + config = newconfig([], """ + [testenv:py123] + """) + envconfig = config.envconfigs['py123'] + venv = VirtualEnv(envconfig, session=mocksession) + tmpdir.ensure("easy_install") + monkeypatch.setenv("PATH", str(tmpdir), prepend=os.pathsep) + envconfig.envbindir.ensure("easy_install") + p = venv.getcommandpath("easy_install") + assert py.path.local(p).relto(envconfig.envbindir), p + def test_create_distribute(monkeypatch, mocksession, newconfig): config = newconfig([], """ [testenv:py123] @@ -116,6 +130,7 @@ assert len(l) >= 1 args = l[0].args assert "--distribute" not in map(str, args) + assert "--setuptools" in map(str, args) def test_create_sitepackages(monkeypatch, mocksession, newconfig): config = newconfig([], """ @@ -261,6 +276,16 @@ venv.update() mocksession.report.expect("verbosity0", "*recreate*") +def test_test_runtests_action_command_is_in_output(newmocksession): + mocksession = newmocksession([], ''' + [testenv] + commands = echo foo bar + ''') + venv = mocksession.getenv('python') + venv.update() + venv.test() + mocksession.report.expect("verbosity0", "*runtests*commands?0? | echo foo bar") + def test_install_error(newmocksession, monkeypatch): mocksession = newmocksession(['--recreate'], """ [testenv] @@ -284,6 +309,21 @@ mocksession.report.expect("warning", "*test command found but not*") assert venv.status == "commands failed" +def test_install_command_whitelisted(newmocksession, monkeypatch): + mocksession = newmocksession(['--recreate'], """ + [testenv] + whitelist_externals = py.test + xy* + commands= + py.test + xyz + """) + venv = mocksession.getenv('python') + venv.test() + mocksession.report.expect("warning", "*test command found but not*", + invert=True) + assert venv.status == "commands failed" + @pytest.mark.skipif("not sys.platform.startswith('linux')") def test_install_command_not_installed(newmocksession): mocksession = newmocksession(['--recreate'], """ @@ -427,7 +467,7 @@ venv = VirtualEnv(envconfig, session=mocksession) venv.update() cconfig = venv._getliveconfig() - cconfig.distribute = False + cconfig.distribute = True cconfig.writeconfig(venv.path_config) mocksession._clearmocks() venv.update() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/tests/test_z_cmdline.py new/tox-1.5.0/tests/test_z_cmdline.py --- old/tox-1.4.3/tests/test_z_cmdline.py 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/tests/test_z_cmdline.py 2013-06-22 15:00:49.000000000 +0200 @@ -2,7 +2,7 @@ import py import pytest import sys -from conftest import ReportExpectMock +from tox._pytestplugin import ReportExpectMock pytest_plugins = "pytester" @@ -276,7 +276,7 @@ name='pkg123', description='pkg123 project', version='0.7', - license='GPLv2 or later', + license='MIT', platforms=['unix', 'win32'], packages=['pkg123',], install_requires=['qweqwe123'], @@ -448,12 +448,16 @@ sdist_path = session.sdist() assert sdist_path == p -@pytest.mark.xfailif("sys.platform == 'win32'") +@pytest.mark.xfail("sys.platform == 'win32'", reason="test needs better impl") def test_envsitepackagesdir(cmd, initproj): initproj("pkg512-0.0.5", filedefs={ 'tox.ini': """ + [testenv] commands= - grep '__version__.*=.*0\.0\.5' {envsitepackagesdir}/pkg512/__init__.py + echo X:{envsitepackagesdir} """}) result = cmd.run("tox") - + assert result.ret == 0 + result.stdout.fnmatch_lines(""" + X:*site-packages* + """) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/tox/__init__.py new/tox-1.5.0/tox/__init__.py --- old/tox-1.4.3/tox/__init__.py 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/tox/__init__.py 2013-06-22 15:00:49.000000000 +0200 @@ -1,5 +1,5 @@ # -__version__ = '1.4.3' +__version__ = '1.5.0' class exception: class Error(Exception): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/tox/_config.py new/tox-1.5.0/tox/_config.py --- old/tox-1.4.3/tox/_config.py 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/tox/_config.py 2013-06-22 15:00:49.000000000 +0200 @@ -128,6 +128,7 @@ name = "python" return self.envbindir.join(name) + # no @property to avoid early calling (see callable(subst[key]) checks) def envsitepackagesdir(self): print_envsitepackagesdir = textwrap.dedent(""" import sys @@ -290,6 +291,8 @@ vc.setenv = None vc.commands = reader.getargvlist(section, "commands") + vc.whitelist_externals = reader.getlist(section, + "whitelist_externals") vc.deps = [] for depline in reader.getlist(section, "deps"): m = re.match(r":(\w+):\s*(\S+)", depline) @@ -300,7 +303,7 @@ name = depline.strip() ixserver = None vc.deps.append(DepConfig(name, ixserver)) - vc.distribute = reader.getbool(section, "distribute", True) + vc.distribute = reader.getbool(section, "distribute", False) vc.sitepackages = reader.getbool(section, "sitepackages", False) vc.downloadcache = None downloadcache = os.environ.get("PIP_DOWNLOAD_CACHE", None) @@ -344,6 +347,16 @@ self.name = name self.url = url +RE_ITEM_REF = re.compile( + ''' + [{] + (?:(?P<sub_type>[^[:{}]+):)? # optional sub_type for special rules + (?P<substitution_value>[^{}]*) # substitution key + [}] + ''', + re.VERBOSE) + + class IniReader: def __init__(self, cfgparser, fallbacksections=None): self._cfg = cfgparser @@ -410,7 +423,6 @@ def _processcommand(self, command): posargs = self._subs.get('_posargs', None) - pat = r'\{(?:(?P<sub_type>[^:]+):)?(?P<substitution_value>.*)\}' words = list(CommandParser(command).words()) new_command = '' for word in words: @@ -419,9 +431,9 @@ new_command += ' '.join(posargs) continue - new_word = re.sub(pat, self._replace_match, word) + new_word = self._replace(word, quote=True) # two passes; we might have substitutions in the result - new_word = re.sub(pat, self._replace_match, new_word) + new_word = self._replace(new_word, quote=True) new_command += new_word return shlex.split(new_command.strip()) @@ -463,38 +475,7 @@ #print "getdefault", section, name, "returned", repr(x) return x - def _sub(self, match): - key = match.group(0)[1:-1] - if key.startswith("env:"): - envkey = key[4:] - if envkey not in os.environ: - raise tox.exception.ConfigError( - "substitution %r: %r not found in environment" % - (key, envkey)) - return os.environ[envkey] - val = self._subs.get(key, None) - if val is None: - if key.startswith("[") and "]" in key: - i = key.find("]") - section, item = key[1:i], key[i+1:] - if section in self._cfg and item in self._cfg[section]: - if (section, item) in self._subststack: - raise ValueError('%s already in %s' %( - (section, item), self._subststack)) - x = str(self._cfg[section][item]) - self._subststack.append((section, item)) - try: - return self._replace(x) - finally: - self._subststack.pop() - - raise tox.exception.ConfigError( - "substitution key %r not found" % key) - if py.builtin.callable(val): - val = val() - return str(val) - - def _replace_posargs(self, match): + def _replace_posargs(self, match, quote): return self._do_replace_posargs(lambda: match.group('substitution_value')) def _do_replace_posargs(self, value_func): @@ -509,7 +490,7 @@ return '' - def _replace_env(self, match): + def _replace_env(self, match, quote): envkey = match.group('substitution_value') if not envkey: raise tox.exception.ConfigError( @@ -522,18 +503,41 @@ return os.environ[envkey] - def _replace_substitution(self, match): + def _substitute_from_other_section(self, key, quote): + if key.startswith("[") and "]" in key: + i = key.find("]") + section, item = key[1:i], key[i+1:] + if section in self._cfg and item in self._cfg[section]: + if (section, item) in self._subststack: + raise ValueError('%s already in %s' %( + (section, item), self._subststack)) + x = str(self._cfg[section][item]) + self._subststack.append((section, item)) + try: + return self._replace(x, quote=quote) + finally: + self._subststack.pop() + + raise tox.exception.ConfigError( + "substitution key %r not found" % key) + + def _replace_substitution(self, match, quote): sub_key = match.group('substitution_value') - if sub_key not in self._subs: - raise tox.exception.ConfigError( - "substitution key %r not found" % sub_key) - return '"%s"' % str(self._subs[sub_key]).replace('"', r'\"') + val = self._subs.get(sub_key, None) + if val is None: + val = self._substitute_from_other_section(sub_key, quote) + if py.builtin.callable(val): + val = val() + if quote: + return '"%s"' % str(val).replace('"', r'\"') + else: + return str(val) def _is_bare_posargs(self, groupdict): return groupdict.get('substitution_value', None) == 'posargs' \ and not groupdict.get('sub_type') - def _replace_match(self, match): + def _replace_match(self, match, quote): g = match.groupdict() # special case: posargs. If there is a 'posargs' substitution value @@ -556,11 +560,23 @@ except KeyError: raise tox.exception.ConfigError("No support for the %s substitution type" % sub_type) - return handler(match) + # quoting is done in handlers, as at least posargs handling is special: + # all of its arguments are inserted as separate parameters + return handler(match, quote) + + def _replace_match_quote(self, match): + return self._replace_match(match, quote=True) + def _replace_match_no_quote(self, match): + return self._replace_match(match, quote=False) - def _replace(self, x, rexpattern = re.compile("\{.+?\}")): + def _replace(self, x, rexpattern=RE_ITEM_REF, quote=False): + # XXX is rexpattern used by callers? can it be removed? if '{' in x: - return rexpattern.sub(self._sub, x) + if quote: + replace_func = self._replace_match_quote + else: + replace_func = self._replace_match_no_quote + return rexpattern.sub(replace_func, x) return x def _parse_command(self, command): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/tox/_pytestplugin.py new/tox-1.5.0/tox/_pytestplugin.py --- old/tox-1.4.3/tox/_pytestplugin.py 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/tox/_pytestplugin.py 2013-06-22 15:00:49.000000000 +0200 @@ -262,7 +262,7 @@ name='%(name)s', description='%(name)s project', version='%(version)s', - license='GPLv2 or later', + license='MIT', platforms=['unix', 'win32'], packages=['%(name)s', ], ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/tox/_venv.py new/tox-1.5.0/tox/_venv.py --- old/tox-1.4.3/tox/_venv.py 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/tox/_venv.py 2013-06-22 15:00:49.000000000 +0200 @@ -74,21 +74,38 @@ p = cwd.join(name) if p.check(): return str(p) + p = None + if venv: + p = py.path.local.sysfind(name, paths=[self.envconfig.envbindir]) + if p is not None: + return p p = py.path.local.sysfind(name) if p is None: - raise tox.exception.InvocationError("could not find executable %r" - % (name,)) - if p.relto(self.envconfig.envdir): - return p + raise tox.exception.InvocationError( + "could not find executable %r" % (name,)) + # p is not found in virtualenv script/bin dir if venv: - self.session.report.warning( - "test command found but not installed in testenv\n" - " cmd: %s\n" - " env: %s\n" - "Maybe forgot to specify a dependency?" % (p, - self.envconfig.envdir)) + if not self.is_allowed_external(p): + self.session.report.warning( + "test command found but not installed in testenv\n" + " cmd: %s\n" + " env: %s\n" + "Maybe forgot to specify a dependency?" % (p, + self.envconfig.envdir)) return str(p) # will not be rewritten for reporting + def is_allowed_external(self, p): + tryadd = [""] + if sys.platform == "win32": + tryadd += [os.path.normcase(x) + for x in os.environ['PATHEXT'].split(os.pathsep)] + p = py.path.local(os.path.normcase(str(p))) + for x in self.envconfig.whitelist_externals: + for add in tryadd: + if p.fnmatch(x + add): + return True + return False + def _ispython3(self): return "python3" in str(self.envconfig.basepython) @@ -162,8 +179,10 @@ venvscript = path.rstrip("co") #venvscript = py.path.local(tox.__file__).dirpath("virtualenv.py") args = [config_interpreter, venvscript] - if not self._ispython3() and self.envconfig.distribute: - args.append('--distribute') + if self.envconfig.distribute: + args.append("--distribute") + else: + args.append("--setuptools") if self.envconfig.sitepackages: args.append('--system-site-packages') #if sys.platform == "win32": @@ -267,7 +286,8 @@ self.session.make_emptydir(self.envconfig.envtmpdir) cwd = self.envconfig.changedir for i, argv in enumerate(self.envconfig.commands): - action.setactivity("runtests", "commands[%s]" % i) + message = "commands[%s] | %s" % (i, ' '.join(argv)) + action.setactivity("runtests", message) try: self._pcall(argv, cwd=cwd, action=action, redirect=redirect) except tox.exception.InvocationError: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/tox.egg-info/PKG-INFO new/tox-1.5.0/tox.egg-info/PKG-INFO --- old/tox-1.4.3/tox.egg-info/PKG-INFO 2013-03-01 07:39:20.000000000 +0100 +++ new/tox-1.5.0/tox.egg-info/PKG-INFO 2013-06-22 15:00:49.000000000 +0200 @@ -1,33 +1,38 @@ Metadata-Version: 1.1 Name: tox -Version: 1.4.3 +Version: 1.5.0 Summary: virtualenv-based automation of test activities Home-page: http://tox.testrun.org/ Author: holger krekel Author-email: holger@merlinux.eu -License: GPLv2 or later +License: http://opensource.org/licenses/MIT Description: What is Tox? - ========================== + -------------------- - Tox as is a generic virtualenv management and test command line tool you can - use for: + Tox as is a generic virtualenv_ management and test command line tool you can use for: - * checking your package installs correctly with different - Python versions and interpreters + * checking your package installs correctly with different Python versions and + interpreters - * running your tests in each of the - environments, configuring your test tool of choice + * running your tests in each of the environments, configuring your test tool of choice - * acting as a frontend to Continuous Integration - servers, greatly reducing boilerplate and merging - CI and shell-based testing. + * acting as a frontend to Continuous Integration servers, greatly + reducing boilerplate and merging CI and shell-based testing. - For more information, docs and many examples please checkout the `home page`_: + For more information and the repository please checkout: - http://tox.testrun.org/ + - homepage: http://tox.testrun.org + + - repository: https://bitbucket.org/hpk42/tox + + have fun, + + + have fun, + + holger krekel, May 2013 - .. _`home page`: http://tox.testrun.org/ Platform: unix Platform: linux @@ -36,7 +41,7 @@ Platform: win32 Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: GNU General Public License (GPL) +Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: POSIX Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: MacOS :: MacOS X diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/tox.egg-info/SOURCES.txt new/tox-1.5.0/tox.egg-info/SOURCES.txt --- old/tox-1.4.3/tox.egg-info/SOURCES.txt 2013-03-01 07:39:20.000000000 +0100 +++ new/tox-1.5.0/tox.egg-info/SOURCES.txt 2013-06-22 15:00:49.000000000 +0200 @@ -3,7 +3,7 @@ ISSUES.txt LICENSE MANIFEST.in -README.txt +README.rst setup.py tox.ini toxbootstrap.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/tox.egg-info/requires.txt new/tox-1.5.0/tox.egg-info/requires.txt --- old/tox-1.4.3/tox.egg-info/requires.txt 2013-03-01 07:39:20.000000000 +0100 +++ new/tox-1.5.0/tox.egg-info/requires.txt 2013-06-22 15:00:49.000000000 +0200 @@ -1,2 +1,2 @@ -virtualenv>=1.8.4 -py>=1.4.12 \ No newline at end of file +virtualenv>=1.9.1 +py>=1.4.15 \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/tox.ini new/tox-1.5.0/tox.ini --- old/tox-1.4.3/tox.ini 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/tox.ini 2013-06-22 15:00:49.000000000 +0200 @@ -1,20 +1,22 @@ [tox] envlist=py27,py26,py25,py32,py33,docs,pypy -indexserver = - testrun = http://pypi.testrun.org - pypi = https://pypi.python.org/simple [testenv:X] commands=echo {posargs} [testenv] -commands=py.test --junitxml={envlogdir}/junit-{envname}.xml {posargs} +commands=py.test --instafail --junitxml={envlogdir}/junit-{envname}.xml {posargs} deps=pytest==2.3.4 + pytest-instafail + +[testenv:py25] +setenvs = + PIP_INSECURE=True [testenv:docs] basepython=python changedir=doc -deps=:pypi:sphinx +deps=sphinx {[testenv]deps} commands= py.test -v \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tox-1.4.3/toxbootstrap.py new/tox-1.5.0/toxbootstrap.py --- old/tox-1.4.3/toxbootstrap.py 2013-03-01 07:39:14.000000000 +0100 +++ new/tox-1.5.0/toxbootstrap.py 2013-06-22 15:00:49.000000000 +0200 @@ -58,7 +58,7 @@ """ -__version__ = '1.4.3.dev6' +__version__ = '1.5.0' import sys import os @@ -192,7 +192,7 @@ # XXX: we use --no-site-packages because: if tox is installed in global # site-packages, then pip will not install it locally. ideal fix for # this should be to first look for tox in the global scripts/ directory - run('%s virtualenv.py --no-site-packages --distribute %s' % + run('%s virtualenv.py --no-site-packages --setuptools %s' % (sys.executable, TENV)) logging.info("removing virtualenv.py script after bootstrap venv creation") for x in ('', 'o', 'c'): @@ -209,11 +209,6 @@ # install/upgrade tox itself if USETOXDEV: - if 'PIP_DOWNLOAD_CACHE' in os.environ: - cache = "" - else: - cache = "--download-cache=_download" - ensuredir('_download') run('%s install -q -i http://pypi.testrun.org ' '--upgrade %s tox' % (pip, cache)) elif any([ -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@hilbert.suse.de