Hello community,

here is the log from the commit of package python-tox for openSUSE:Factory 
checked in at 2014-08-27 07:46:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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    2014-07-11 
06:45:39.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-tox.new/python-tox.changes       
2014-08-27 07:46:17.000000000 +0200
@@ -1,0 +2,13 @@
+Mon Aug 25 08:36:50 UTC 2014 - a...@suse.com
+
+- Update to version 1.7.2:
+  * fix issue150: parse {posargs} more like we used to do it pre
+    1.7.0.
+  * fix issue59: add a config variable skip-missing-interpreters as
+    well as command line option --skip-missing-interpreters
+  * fix issue164: better traceback info in case of failing test commands
+  * support optional env variable substitution.
+  * limit python hashseed to 1024 on Windows to prevent possible
+    memory errors.
+
+-------------------------------------------------------------------

Old:
----
  tox-1.7.1.tar.gz

New:
----
  tox-1.7.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-tox.spec ++++++
--- /var/tmp/diff_new_pack.pFRiXe/_old  2014-08-27 07:46:19.000000000 +0200
+++ /var/tmp/diff_new_pack.pFRiXe/_new  2014-08-27 07:46:19.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           python-tox
-Version:        1.7.1
+Version:        1.7.2
 Release:        0
 Summary:        Virtualenv-based automation of test activities
 License:        MIT

++++++ tox-1.7.1.tar.gz -> tox-1.7.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/CHANGELOG new/tox-1.7.2/CHANGELOG
--- old/tox-1.7.1/CHANGELOG     2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/CHANGELOG     2014-07-15 09:22:26.000000000 +0200
@@ -1,3 +1,26 @@
+1.7.2
+-----------
+
+- fix issue150: parse {posargs} more like we used to do it pre 1.7.0.
+  The 1.7.0 behaviour broke a lot of OpenStack projects.
+  See PR85 and the issue discussions for (far) more details, hopefully
+  resulting in a more refined behaviour in the 1.8 series.
+  And thanks to Clark Boylan for the PR.
+
+- fix issue59: add a config variable ``skip-missing-interpreters`` as well as
+  command line option ``--skip-missing-interpreters`` which won't fail the
+  build if Python interpreters listed in tox.ini are missing.  Thanks 
+  Alexandre Conrad for PR104.
+
+- fix issue164: better traceback info in case of failing test commands.
+  Thanks Marc Abramowitz for PR92.
+
+- support optional env variable substitution, thanks Morgan Fainberg
+  for PR86.
+
+- limit python hashseed to 1024 on Windows to prevent possible
+  memory errors.  Thanks March Schlaich for the PR90.
+
 1.7.1
 ---------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/CONTRIBUTORS new/tox-1.7.2/CONTRIBUTORS
--- old/tox-1.7.1/CONTRIBUTORS  2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/CONTRIBUTORS  2014-07-15 09:22:26.000000000 +0200
@@ -23,3 +23,8 @@
 Mattieu Agopian
 Asmund Grammeltwedt
 Ionel Maries Cristian
+Alexandre Conrad
+Morgan Fainberg
+Marc Schlaich
+Clark Boylan
+Eugene Yunak
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/PKG-INFO new/tox-1.7.2/PKG-INFO
--- old/tox-1.7.1/PKG-INFO      2014-03-28 15:18:53.000000000 +0100
+++ new/tox-1.7.2/PKG-INFO      2014-07-15 09:22:26.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: tox
-Version: 1.7.1
+Version: 1.7.2
 Summary: virtualenv-based automation of test activities
 Home-page: http://tox.testrun.org/
 Author: holger krekel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/doc/conf.py new/tox-1.7.2/doc/conf.py
--- old/tox-1.7.1/doc/conf.py   2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/doc/conf.py   2014-07-15 09:22:26.000000000 +0200
@@ -48,7 +48,7 @@
 # built documents.
 #
 # The short X.Y version.
-release = version = "1.7.0"
+release = version = "1.7.1"
 # 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.7.1/doc/config-v2.txt 
new/tox-1.7.2/doc/config-v2.txt
--- old/tox-1.7.1/doc/config-v2.txt     2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/doc/config-v2.txt     2014-07-15 09:22:26.000000000 +0200
@@ -195,7 +195,7 @@
 tox comes with predefined settings for certain variants, namely:
 
 * ``{easy,pip}`` use easy_install or pip respectively
-* ``{py24,py25,py26,py27,py31,py32,py33,pypy19]`` use the respective
+* ``{py24,py25,py26,py27,py31,py32,py33,py34,pypy19]`` use the respective
   pythonNN or PyPy interpreter
 * ``{win32,linux,darwin}`` defines the according ``platform``.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/doc/config.txt new/tox-1.7.2/doc/config.txt
--- old/tox-1.7.1/doc/config.txt        2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/doc/config.txt        2014-07-15 09:22:26.000000000 +0200
@@ -28,20 +28,31 @@
 (by checking for existence of the ``JENKINS_URL`` environment variable)
 and will first lookup global tox settings in this section::
 
-    [tox:hudson]
-    ...               # override [tox] settings for the hudson context
-    # note: for hudson distshare defaults to ``{toxworkdir}/distshare``.
-
-
-envlist setting
-+++++++++++++++
-
-Determining the environment list that ``tox`` is to operate on
-happens in this order:
-
-* command line option ``-eENVLIST``
-* environment variable ``TOXENV``
-* ``tox.ini`` file's ``envlist``
+    [tox:jenkins]
+    ...               # override [tox] settings for the jenkins context
+    # note: for jenkins distshare defaults to ``{toxworkdir}/distshare``.
+
+.. confval:: skip_missing_interpreters=BOOL
+
+    .. versionadded:: 1.7.2
+
+    Setting this to ``True`` is equivalent of passing the
+    ``--skip-missing-interpreters`` command line option, and will force 
``tox`` to
+    return success even if some of the specified environments were missing. 
This is
+    useful for some CI systems or running on a developer box, where you might 
only
+    have a subset of all your supported interpreters installed but don't want 
to
+    mark the build as failed because of it. As expected, the command line 
switch
+    always overrides this setting if passed on the invokation.
+    **Default:** ``False``
+
+.. confval:: envlist=CSV
+
+    Determining the environment list that ``tox`` is to operate on
+    happens in this order (if any is found, no further lookups are made):
+
+    * command line option ``-eENVLIST``
+    * environment variable ``TOXENV``
+    * ``tox.ini`` file's ``envlist``
 
 
 Virtualenv test environment settings
@@ -284,6 +295,26 @@
 and raise an Error if the environment variable
 does not exist.
 
+
+environment variable substitutions with default values
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+If you specify a substitution string like this::
+
+    {env:KEY:DEFAULTVALUE}
+
+then the value will be retrieved as ``os.environ['KEY']``
+and replace with DEFAULTVALUE if the environment variable does not
+exist.
+
+If you specify a substitution string like this::
+
+    {env:KEY:}
+
+then the value will be retrieved as ``os.environ['KEY']``
+and replace with and empty string if the environment variable does not
+exist.
+
 .. _`command positional substitution`:
 .. _`positional substitution`:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/doc/example/basic.txt 
new/tox-1.7.2/doc/example/basic.txt
--- old/tox-1.7.1/doc/example/basic.txt 2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/doc/example/basic.txt 2014-07-15 09:22:26.000000000 +0200
@@ -1,4 +1,3 @@
-
 Basic usage
 =============================================
 
@@ -13,6 +12,7 @@
     [tox]
     envlist = py26,py27
     [testenv]
+    deps=pytest # or 'nose' or ...
     commands=py.test  # or 'nosetests' or ...
 
 To sdist-package, install and test your project, you can
@@ -38,6 +38,7 @@
     py31
     py32
     py33
+    py34
     jython
     pypy
 
@@ -207,6 +208,10 @@
     import sys
 
     class Tox(TestCommand):
+        user_options = [('tox-args=', 'a', "Arguments to pass to tox")]
+        def initialize_options(self):
+            TestCommand.initialize_options(self)
+            self.tox_args = None
         def finalize_options(self):
             TestCommand.finalize_options(self)
             self.test_args = []
@@ -214,7 +219,8 @@
         def run_tests(self):
             #import here, cause outside the eggs aren't loaded
             import tox
-            errno = tox.cmdline(self.test_args)
+            import shlex
+            errno = tox.cmdline(args=shlex.split(self.tox_args))
             sys.exit(errno)
 
     setup(
@@ -227,5 +233,9 @@
 
     python setup.py test
 
-this will install tox and then run tox.
+this will install tox and then run tox. You can pass arguments to ``tox``
+using the ``--tox-args`` or ``-a`` command-line options. For example::
+
+    python setup.py test -a "-epy27"
 
+is equivalent to running ``tox -epy27``.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/doc/example/jenkins.txt 
new/tox-1.7.2/doc/example/jenkins.txt
--- old/tox-1.7.1/doc/example/jenkins.txt       2014-03-28 15:18:52.000000000 
+0100
+++ new/tox-1.7.2/doc/example/jenkins.txt       2014-07-15 09:22:26.000000000 
+0200
@@ -32,7 +32,9 @@
 The last point requires that your test command creates JunitXML files,
 for example with ``py.test`` it is done like this:
 
-    commands=py.test --junitxml=junit-{envname}.xml
+.. code-block:: ini
+
+    commands = py.test --junitxml=junit-{envname}.xml
 
 
 
@@ -57,7 +59,7 @@
     exec urllib.urlopen(url).read() in d
     d['cmdline'](['--recreate'])
 
-The downloaded `toxbootstrap.py`_ file downloads all neccessary files to
+The downloaded `toxbootstrap.py` file downloads all neccessary files to
 install ``tox`` in a virtual sub environment.  Notes:
 
 * uncomment the line containing ``USETOXDEV`` to use the latest
@@ -68,7 +70,6 @@
   will cause tox to reinstall all virtual environments all the time
   which is often what one wants in CI server contexts)
 
-.. _`toxbootstrap.py`: 
https://bitbucket.org/hpk42/tox/raw/default/toxbootstrap.py
 
 Integrating "sphinx" documentation checks in a Jenkins job
 ----------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/doc/example/pytest.txt 
new/tox-1.7.2/doc/example/pytest.txt
--- old/tox-1.7.1/doc/example/pytest.txt        2014-03-28 15:18:52.000000000 
+0100
+++ new/tox-1.7.2/doc/example/pytest.txt        2014-07-15 09:22:26.000000000 
+0200
@@ -105,7 +105,7 @@
 parent directory to ``sys.path`` but they won't be copied to
 other places or be found by Python's import system outside of pytest.
 
-.. _`fully qualified name`: 
http://pytest.org/latest/goodpractises.html#package-name
+.. _`fully qualified name`: 
http://pytest.org/latest/goodpractises.html#test-package-name
 
 
 .. include:: ../links.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/doc/index.txt new/tox-1.7.2/doc/index.txt
--- old/tox-1.7.1/doc/index.txt 2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/doc/index.txt 2014-07-15 09:22:26.000000000 +0200
@@ -68,8 +68,8 @@
   support for configuring the installer command 
   through :confval:`install_command=ARGV`.
 
-* **cross-Python compatible**: Python-2.6 up to Python-3.3, 
-  Jython and pypy_ support.
+* **cross-Python compatible**: CPython-2.6, 2.7, 3.2 and higher,
+  Jython and pypy_.
 
 * **cross-platform**: Windows and Unix style environments
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/setup.py new/tox-1.7.2/setup.py
--- old/tox-1.7.1/setup.py      2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/setup.py      2014-07-15 09:22:26.000000000 +0200
@@ -28,7 +28,7 @@
         description='virtualenv-based automation of test activities',
         long_description=open("README.rst").read(),
         url='http://tox.testrun.org/',
-        version='1.7.1',
+        version='1.7.2',
         license='http://opensource.org/licenses/MIT',
         platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],
         author='holger krekel',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tests/conftest.py 
new/tox-1.7.2/tests/conftest.py
--- old/tox-1.7.1/tests/conftest.py     2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/tests/conftest.py     2014-07-15 09:22:26.000000000 +0200
@@ -1,2 +1,2 @@
 
-from tox._pytestplugin import *
+from tox._pytestplugin import *  # noqa
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tests/test_config.py 
new/tox-1.7.2/tests/test_config.py
--- old/tox-1.7.1/tests/test_config.py  2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/tests/test_config.py  2014-07-15 09:22:26.000000000 +0200
@@ -1,12 +1,11 @@
-import tox
-import pytest
-import os, sys
-import subprocess
+import sys
 from textwrap import dedent
 
 import py
+import pytest
+import tox
 import tox._config
-from tox._config import *
+from tox._config import *  # noqa
 from tox._config import _split_env
 
 
@@ -110,7 +109,6 @@
 
     def test_defaults_distshare(self, tmpdir, newconfig):
         config = newconfig([], "")
-        envconfig = config.envconfigs['python']
         assert config.distshare == config.homedir.join(".tox", "distshare")
 
     def test_defaults_changed_dir(self, tmpdir, newconfig):
@@ -168,6 +166,7 @@
             key2={xyz}
         """)
         reader = IniReader(config._cfg, fallbacksections=['mydefault'])
+        assert reader is not None
         py.test.raises(tox.exception.ConfigError,
             'reader.getdefault("mydefault", "key2")')
 
@@ -242,6 +241,22 @@
         py.test.raises(tox.exception.ConfigError,
             'reader.getdefault("section", "key2")')
 
+    def test_getdefault_environment_substitution_with_default(self, 
monkeypatch, newconfig):
+        monkeypatch.setenv("KEY1", "hello")
+        config = newconfig("""
+            [section]
+            key1={env:KEY1:DEFAULT_VALUE}
+            key2={env:KEY2:DEFAULT_VALUE}
+            key3={env:KEY3:}
+        """)
+        reader = IniReader(config._cfg)
+        x = reader.getdefault("section", "key1")
+        assert x == "hello"
+        x = reader.getdefault("section", "key2")
+        assert x == "DEFAULT_VALUE"
+        x = reader.getdefault("section", "key3")
+        assert x == ""
+
     def test_getdefault_other_section_substitution(self, newconfig):
         config = newconfig("""
             [section]
@@ -278,7 +293,7 @@
         #    "reader.getargvlist('section', 'key1')")
         assert reader.getargvlist('section', 'key1') == []
         x = reader.getargvlist("section", "key2")
-        assert x == [["cmd1", "with space", "grr"],
+        assert x == [["cmd1", "with", "space", "grr"],
                      ["cmd2", "grr"]]
 
     def test_argvlist_windows_escaping(self, tmpdir, newconfig):
@@ -304,7 +319,7 @@
         #    "reader.getargvlist('section', 'key1')")
         assert reader.getargvlist('section', 'key1') == []
         x = reader.getargvlist("section", "key2")
-        assert x == [["cmd1", "with space", "grr"]]
+        assert x == [["cmd1", "with", "space", "grr"]]
 
 
     def test_argvlist_quoting_in_command(self, tmpdir, newconfig):
@@ -346,6 +361,34 @@
         assert argvlist[0] == ["cmd1"]
         assert argvlist[1] == ["cmd2", "value2", "other"]
 
+    def test_argvlist_quoted_posargs(self, tmpdir, newconfig):
+        config = newconfig("""
+            [section]
+            key2=
+                cmd1 --foo-args='{posargs}'
+                cmd2 -f '{posargs}'
+                cmd3 -f {posargs}
+        """)
+        reader = IniReader(config._cfg)
+        reader.addsubstitutions(["foo", "bar"])
+        assert reader.getargvlist('section', 'key1') == []
+        x = reader.getargvlist("section", "key2")
+        assert x == [["cmd1", "--foo-args=foo bar"],
+                     ["cmd2", "-f", "foo bar"],
+                     ["cmd3", "-f", "foo", "bar"]]
+
+    def test_argvlist_posargs_with_quotes(self, tmpdir, newconfig):
+        config = newconfig("""
+            [section]
+            key2=
+                cmd1 -f {posargs}
+        """)
+        reader = IniReader(config._cfg)
+        reader.addsubstitutions(["foo", "'bar", "baz'"])
+        assert reader.getargvlist('section', 'key1') == []
+        x = reader.getargvlist("section", "key2")
+        assert x == [["cmd1", "-f", "foo", "bar baz"]]
+
     def test_positional_arguments_are_only_replaced_when_standing_alone(self,
         tmpdir, newconfig):
         config = newconfig("""
@@ -511,7 +554,7 @@
         envconfig = config.envconfigs['python']
         assert envconfig.envpython == envconfig.envbindir.join("python")
 
-    @pytest.mark.parametrize("bp", ["jython", "pypy"])
+    @pytest.mark.parametrize("bp", ["jython", "pypy", "pypy3"])
     def test_envbindir_jython(self, tmpdir, newconfig, bp):
         config = newconfig("""
             [testenv]
@@ -873,7 +916,7 @@
         assert str(env.basepython) == sys.executable
 
     def test_default_environments(self, tmpdir, newconfig, monkeypatch):
-        envs = "py26,py27,py31,py32,py33,jython,pypy"
+        envs = "py26,py27,py31,py32,py33,py34,jython,pypy,pypy3"
         inisource = """
             [tox]
             envlist = %s
@@ -885,8 +928,8 @@
             env = config.envconfigs[name]
             if name == "jython":
                 assert env.basepython == "jython"
-            elif name == "pypy":
-                assert env.basepython == "pypy"
+            elif name.startswith("pypy"):
+                assert env.basepython == name
             else:
                 assert name.startswith("py")
                 bp = "python%s.%s" %(name[2], name[3])
@@ -900,6 +943,22 @@
         config = newconfig([], inisource)
         assert config.minversion == "3.0"
 
+    def test_skip_missing_interpreters_true(self, tmpdir, newconfig, 
monkeypatch):
+        inisource = """
+            [tox]
+            skip_missing_interpreters = True
+        """
+        config = newconfig([], inisource)
+        assert config.option.skip_missing_interpreters
+
+    def test_skip_missing_interpreters_false(self, tmpdir, newconfig, 
monkeypatch):
+        inisource = """
+            [tox]
+            skip_missing_interpreters = False
+        """
+        config = newconfig([], inisource)
+        assert not config.option.skip_missing_interpreters
+
     def test_defaultenv_commandline(self, tmpdir, newconfig, monkeypatch):
         config = newconfig(["-epy24"], "")
         env = config.envconfigs['py24']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tests/test_interpreters.py 
new/tox-1.7.2/tests/test_interpreters.py
--- old/tox-1.7.1/tests/test_interpreters.py    2014-03-28 15:18:52.000000000 
+0100
+++ new/tox-1.7.2/tests/test_interpreters.py    2014-07-15 09:22:26.000000000 
+0200
@@ -2,7 +2,7 @@
 import os
 
 import pytest
-from tox.interpreters import *
+from tox.interpreters import *  # noqa
 
 @pytest.fixture
 def interpreters():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tests/test_quickstart.py 
new/tox-1.7.2/tests/test_quickstart.py
--- old/tox-1.7.1/tests/test_quickstart.py      2014-03-28 15:18:52.000000000 
+0100
+++ new/tox-1.7.2/tests/test_quickstart.py      2014-07-15 09:22:26.000000000 
+0200
@@ -6,6 +6,7 @@
 def cleandir(tmpdir):
     tmpdir.chdir()
 
+
 class TestToxQuickstartMain(object):
 
     def mock_term_input_return_values(self, return_values):
@@ -23,12 +24,26 @@
 
         return mock_term_input
 
-    def test_quickstart_main_choose_individual_pythons_and_pytest(self,
-        monkeypatch):
+    def test_quickstart_main_choose_individual_pythons_and_pytest(
+            self,
+            monkeypatch):
         monkeypatch.setattr(
             tox._quickstart, 'term_input',
             self.get_mock_term_input(
-                ['4', 'Y', 'Y', 'Y', 'Y', 'Y', 'N', 'py.test', 'pytest']))
+                [
+                    '4',         # Python versions: choose one by one
+                    'Y',         # py26
+                    'Y',         # py27
+                    'Y',         # py32
+                    'Y',         # py33
+                    'Y',         # py34
+                    'Y',         # pypy
+                    'N',         # jython
+                    'py.test',   # command to run tests
+                    'pytest'     # test dependencies
+                ]
+            )
+        )
 
         tox._quickstart.main(argv=['tox-quickstart'])
 
@@ -39,7 +54,7 @@
 # and then run "tox" from this directory.
 
 [tox]
-envlist = py26, py27, py32, py33, pypy
+envlist = py26, py27, py32, py33, py34, pypy
 
 [testenv]
 commands = py.test
@@ -49,11 +64,26 @@
         result = open('tox.ini').read()
         assert(result == expected_tox_ini)
 
-    def 
test_quickstart_main_choose_individual_pythons_and_nose_adds_deps(self, 
monkeypatch):
+    def test_quickstart_main_choose_individual_pythons_and_nose_adds_deps(
+            self,
+            monkeypatch):
         monkeypatch.setattr(
             tox._quickstart, 'term_input',
-            self.get_mock_term_input(['4', 'Y', 'Y', 'Y', 'Y', 'Y', 'N',
-                                     'nosetests', '']))
+            self.get_mock_term_input(
+                [
+                    '4',          # Python versions: choose one by one
+                    'Y',          # py26
+                    'Y',          # py27
+                    'Y',          # py32
+                    'Y',          # py33
+                    'Y',          # py34
+                    'Y',          # pypy
+                    'N',          # jython
+                    'nosetests',  # command to run tests
+                    ''            # test dependencies
+                ]
+            )
+        )
 
         tox._quickstart.main(argv=['tox-quickstart'])
 
@@ -64,7 +94,7 @@
 # and then run "tox" from this directory.
 
 [tox]
-envlist = py26, py27, py32, py33, pypy
+envlist = py26, py27, py32, py33, py34, pypy
 
 [testenv]
 commands = nosetests
@@ -74,11 +104,26 @@
         result = open('tox.ini').read()
         assert(result == expected_tox_ini)
 
-    def 
test_quickstart_main_choose_individual_pythons_and_trial_adds_deps(self, 
monkeypatch):
+    def test_quickstart_main_choose_individual_pythons_and_trial_adds_deps(
+            self,
+            monkeypatch):
         monkeypatch.setattr(
             tox._quickstart, 'term_input',
-            self.get_mock_term_input(['4', 'Y', 'Y', 'Y', 'Y', 'Y', 'N',
-                                      'trial', '']))
+            self.get_mock_term_input(
+                [
+                    '4',          # Python versions: choose one by one
+                    'Y',          # py26
+                    'Y',          # py27
+                    'Y',          # py32
+                    'Y',          # py33
+                    'Y',          # py34
+                    'Y',          # pypy
+                    'N',          # jython
+                    'trial',      # command to run tests
+                    ''            # test dependencies
+                ]
+            )
+        )
 
         tox._quickstart.main(argv=['tox-quickstart'])
 
@@ -89,7 +134,7 @@
 # and then run "tox" from this directory.
 
 [tox]
-envlist = py26, py27, py32, py33, pypy
+envlist = py26, py27, py32, py33, py34, pypy
 
 [testenv]
 commands = trial
@@ -99,11 +144,26 @@
         result = open('tox.ini').read()
         assert(result == expected_tox_ini)
 
-    def 
test_quickstart_main_choose_individual_pythons_and_pytest_adds_deps(self, 
monkeypatch):
+    def test_quickstart_main_choose_individual_pythons_and_pytest_adds_deps(
+            self,
+            monkeypatch):
         monkeypatch.setattr(
             tox._quickstart, 'term_input',
-            self.get_mock_term_input(['4', 'Y', 'Y', 'Y', 'Y', 'Y', 'N',
-                                      'py.test', '']))
+            self.get_mock_term_input(
+                [
+                    '4',          # Python versions: choose one by one
+                    'Y',          # py26
+                    'Y',          # py27
+                    'Y',          # py32
+                    'Y',          # py33
+                    'Y',          # py34
+                    'Y',          # pypy
+                    'N',          # jython
+                    'py.test',    # command to run tests
+                    ''            # test dependencies
+                ]
+            )
+        )
         tox._quickstart.main(argv=['tox-quickstart'])
 
         expected_tox_ini = """
@@ -113,7 +173,7 @@
 # and then run "tox" from this directory.
 
 [tox]
-envlist = py26, py27, py32, py33, pypy
+envlist = py26, py27, py32, py33, py34, pypy
 
 [testenv]
 commands = py.test
@@ -123,10 +183,19 @@
         result = open('tox.ini').read()
         assert(result == expected_tox_ini)
 
-    def test_quickstart_main_choose_py27_and_pytest_adds_deps(self, 
monkeypatch):
+    def test_quickstart_main_choose_py27_and_pytest_adds_deps(
+            self,
+            monkeypatch):
         monkeypatch.setattr(
             tox._quickstart, 'term_input',
-            self.get_mock_term_input(['1', 'py.test', '']))
+            self.get_mock_term_input(
+                [
+                    '1',          # py27
+                    'py.test',    # command to run tests
+                    ''            # test dependencies
+                ]
+            )
+        )
 
         tox._quickstart.main(argv=['tox-quickstart'])
 
@@ -147,10 +216,19 @@
         result = open('tox.ini').read()
         assert(result == expected_tox_ini)
 
-    def test_quickstart_main_choose_py27_and_py33_and_pytest_adds_deps(self, 
monkeypatch):
+    def test_quickstart_main_choose_py27_and_py33_and_pytest_adds_deps(
+            self,
+            monkeypatch):
         monkeypatch.setattr(
             tox._quickstart, 'term_input',
-            self.get_mock_term_input(['2', 'py.test', '']))
+            self.get_mock_term_input(
+                [
+                    '2',          # py27 and py33
+                    'py.test',    # command to run tests
+                    ''            # test dependencies
+                ]
+            )
+        )
 
         tox._quickstart.main(argv=['tox-quickstart'])
 
@@ -171,10 +249,19 @@
         result = open('tox.ini').read()
         assert(result == expected_tox_ini)
 
-    def test_quickstart_main_choose_all_pythons_and_pytest_adds_deps(self, 
monkeypatch):
+    def test_quickstart_main_choose_all_pythons_and_pytest_adds_deps(
+            self,
+            monkeypatch):
         monkeypatch.setattr(
             tox._quickstart, 'term_input',
-            self.get_mock_term_input(['3', 'py.test', '']))
+            self.get_mock_term_input(
+                [
+                    '3',          # all Python versions
+                    'py.test',    # command to run tests
+                    ''            # test dependencies
+                ]
+            )
+        )
 
         tox._quickstart.main(argv=['tox-quickstart'])
 
@@ -185,7 +272,7 @@
 # and then run "tox" from this directory.
 
 [tox]
-envlist = py26, py27, py32, py33, pypy, jython
+envlist = py26, py27, py32, py33, py34, pypy, jython
 
 [testenv]
 commands = py.test
@@ -195,10 +282,26 @@
         result = open('tox.ini').read()
         assert(result == expected_tox_ini)
 
-    def test_quickstart_main_choose_individual_pythons_and_defaults(self, 
monkeypatch):
+    def test_quickstart_main_choose_individual_pythons_and_defaults(
+            self,
+            monkeypatch):
         monkeypatch.setattr(
             tox._quickstart, 'term_input',
-            self.get_mock_term_input(['4', '', '', '', '', '', '', '', '', '', 
'']))
+            self.get_mock_term_input(
+                [
+                    '4',  # Python versions: choose one by one
+                    '',   # py26
+                    '',   # py27
+                    '',   # py32
+                    '',   # py33
+                    '',   # py34
+                    '',   # pypy
+                    '',   # jython
+                    '',   # command to run tests
+                    ''    # test dependencies
+                ]
+            )
+        )
 
         tox._quickstart.main(argv=['tox-quickstart'])
 
@@ -209,7 +312,7 @@
 # and then run "tox" from this directory.
 
 [tox]
-envlist = py26, py27, py32, py33, pypy, jython
+envlist = py26, py27, py32, py33, py34, pypy, jython
 
 [testenv]
 commands = {envpython} setup.py test
@@ -228,7 +331,22 @@
 
         monkeypatch.setattr(
             tox._quickstart, 'term_input',
-            self.get_mock_term_input(['4', '', '', '', '', '', '', '', '', '', 
'', '']))
+            self.get_mock_term_input(
+                [
+                    '4',  # Python versions: choose one by one
+                    '',   # py26
+                    '',   # py27
+                    '',   # py32
+                    '',   # py33
+                    '',   # py34
+                    '',   # pypy
+                    '',   # jython
+                    '',   # command to run tests
+                    '',   # test dependencies
+                    '',   # tox.ini already exists; overwrite?
+                ]
+            )
+        )
 
         tox._quickstart.main(argv=['tox-quickstart'])
 
@@ -239,7 +357,7 @@
 # and then run "tox" from this directory.
 
 [tox]
-envlist = py26, py27, py32, py33, pypy, jython
+envlist = py26, py27, py32, py33, py34, pypy, jython
 
 [testenv]
 commands = {envpython} setup.py test
@@ -257,6 +375,7 @@
             'py27': True,
             'py32': True,
             'py33': True,
+            'py34': True,
             'pypy': True,
             'commands': 'py.test',
             'deps': 'pytest',
@@ -268,7 +387,7 @@
 # and then run "tox" from this directory.
 
 [tox]
-envlist = py26, py27, py32, py33, pypy
+envlist = py26, py27, py32, py33, py34, pypy
 
 [testenv]
 commands = py.test
@@ -339,6 +458,7 @@
             'py27': True,
             'py32': True,
             'py33': True,
+            'py34': True,
             'pypy': True,
             'commands': 'nosetests -v',
             'deps': 'nose',
@@ -350,7 +470,7 @@
 # and then run "tox" from this directory.
 
 [tox]
-envlist = py27, py32, py33, pypy
+envlist = py27, py32, py33, py34, pypy
 
 [testenv]
 commands = nosetests -v
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tests/test_venv.py 
new/tox-1.7.2/tests/test_venv.py
--- old/tox-1.7.1/tests/test_venv.py    2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/tests/test_venv.py    2014-07-15 09:22:26.000000000 +0200
@@ -3,7 +3,7 @@
 import pytest
 import os, sys
 import tox._config
-from tox._venv import *
+from tox._venv import *  # noqa
 
 #def test_global_virtualenv(capfd):
 #    v = VirtualEnv()
@@ -277,7 +277,7 @@
     venv = mocksession.getenv('python')
     venv.test()
     mocksession.report.expect("warning", "*test command found but not*")
-    assert venv.status == "commands failed"
+    assert venv.status == 0
 
 def test_install_command_whitelisted(newmocksession, monkeypatch):
     mocksession = newmocksession(['--recreate'], """
@@ -295,7 +295,7 @@
     assert venv.status == "commands failed"
 
 @pytest.mark.skipif("not sys.platform.startswith('linux')")
-def test_install_command_not_installed(newmocksession):
+def test_install_command_not_installed_bash(newmocksession):
     mocksession = newmocksession(['--recreate'], """
         [testenv]
         commands=
@@ -387,7 +387,7 @@
             [testenv]
             deps={distshare}/xyz-*
         """)
-        xyz = config.distshare.ensure("xyz-1.2.0.zip")
+        config.distshare.ensure("xyz-1.2.0.zip")
         xyz2 = config.distshare.ensure("xyz-1.2.1.zip")
         envconfig = config.envconfigs['python']
         venv = VirtualEnv(envconfig, session=mocksession)
@@ -507,7 +507,6 @@
     l = mocksession._pcalls
     assert len(l) == 2
     for x in l:
-        args = x.args
         env = x.env
         assert env is not None
         assert 'ENV_VAR' in env
@@ -585,6 +584,7 @@
     mocksession.report.not_expect("warning", "*test command found but not*")
     monkeypatch.setenv("PATH", str(tmpdir))
     x4 = venv.getcommandpath("x", cwd=tmpdir)
+    assert x4.endswith(os.sep + 'x')
     mocksession.report.expect("warning", "*test command found but not*")
 
 def test_sethome_only_on_option(newmocksession, monkeypatch):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tests/test_z_cmdline.py 
new/tox-1.7.2/tests/test_z_cmdline.py
--- old/tox-1.7.1/tests/test_z_cmdline.py       2014-03-28 15:18:52.000000000 
+0100
+++ new/tox-1.7.2/tests/test_z_cmdline.py       2014-07-15 09:22:26.000000000 
+0200
@@ -1,7 +1,6 @@
 import tox
 import py
 import pytest
-import sys
 from tox._pytestplugin import ReportExpectMock
 try:
     import json
@@ -129,7 +128,6 @@
         })
         config = parseconfig([])
         session = Session(config)
-        envlist = ['hello', 'world']
         envs = session.venvlist
         assert len(envs) == 2
         env1, env2 = envs
@@ -193,6 +191,19 @@
     ])
     assert result.ret
 
+def test_run_custom_install_command_error(cmd, initproj):
+    initproj("interp123-0.5", filedefs={
+        'tox.ini': '''
+            [testenv]
+            install_command=./tox.ini {opts} {packages}
+        '''
+    })
+    result = cmd.run("tox")
+    result.stdout.fnmatch_lines([
+        "ERROR: invocation failed, args: ['*/tox.ini*",
+    ])
+    assert result.ret
+
 def test_unknown_interpreter_and_env(cmd, initproj):
     initproj("interp123-0.5", filedefs={
         'tests': {'test_hello.py': "def test_hello(): pass"},
@@ -231,6 +242,22 @@
         "*ERROR*InterpreterNotFound*xyz_unknown_interpreter*",
     ])
 
+def test_skip_unknown_interpreter(cmd, initproj):
+    initproj("interp123-0.5", filedefs={
+        'tests': {'test_hello.py': "def test_hello(): pass"},
+        'tox.ini': '''
+            [testenv:python]
+            basepython=xyz_unknown_interpreter
+            [testenv]
+            changedir=tests
+        '''
+    })
+    result = cmd.run("tox", "--skip-missing-interpreters")
+    assert not result.ret
+    result.stdout.fnmatch_lines([
+        "*SKIPPED*InterpreterNotFound*xyz_unknown_interpreter*",
+    ])
+
 def test_unknown_dep(cmd, initproj):
     initproj("dep123-0.7", filedefs={
         'tests': {'test_hello.py': "def test_hello(): pass"},
@@ -567,7 +594,7 @@
     result.stdout.fnmatch_lines([
         "*sdist-make*setup.py*",
     ])
-    assert "virtualenv" not in result.stdout.str()
+    assert "-mvirtualenv" not in result.stdout.str()
 
 def test_separate_sdist_no_sdistfile(cmd, initproj):
     distshare = cmd.tmpdir.join("distshare")
@@ -582,6 +609,7 @@
     l = distshare.listdir()
     assert len(l) == 1
     sdistfile = l[0]
+    assert 'pkg123-0.7.zip' in str(sdistfile)
 
 def test_separate_sdist(cmd, initproj):
     distshare = cmd.tmpdir.join("distshare")
@@ -611,7 +639,6 @@
             distshare=%s
             sdistsrc={distshare}/pkg123-*
     """ % distshare)
-    p0 = distshare.ensure("pkg123-1.3.5.zip")
     p = distshare.ensure("pkg123-1.4.5.zip")
     distshare.ensure("pkg123-1.4.5a1.zip")
     session = Session(config)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tox/__init__.py 
new/tox-1.7.2/tox/__init__.py
--- old/tox-1.7.1/tox/__init__.py       2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/tox/__init__.py       2014-07-15 09:22:26.000000000 +0200
@@ -1,5 +1,5 @@
 #
-__version__ = '1.7.1'
+__version__ = '1.7.2'
 
 class exception:
     class Error(Exception):
@@ -20,4 +20,4 @@
     class MissingDependency(Error):
         """ a dependency could not be found or determined. """
 
-from tox._cmdline import main as cmdline
+from tox._cmdline import main as cmdline  # noqa
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tox/_cmdline.py 
new/tox-1.7.2/tox/_cmdline.py
--- old/tox-1.7.1/tox/_cmdline.py       2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/tox/_cmdline.py       2014-07-15 09:22:26.000000000 +0200
@@ -79,7 +79,6 @@
         return f
 
     def popen(self, args, cwd=None, env=None, redirect=True, returnout=False):
-        logged_command = "%s$ %s" %(cwd, " ".join(map(str, args)))
         f = outpath = None
         resultjson = self.session.config.option.resultjson
         if resultjson or redirect:
@@ -93,8 +92,13 @@
         if cwd is None:
             # XXX cwd = self.session.config.cwd
             cwd = py.path.local()
-        popen = self._popen(args, cwd, env=env,
-                            stdout=f, stderr=STDOUT)
+        try:
+            popen = self._popen(args, cwd, env=env,
+                                stdout=f, stderr=STDOUT)
+        except OSError:
+            self.report.error("invocation failed, args: %s, cwd: %s" %
+                              (args, cwd))
+            raise
         popen.outpath = outpath
         popen.args = [str(x) for x in args]
         popen.cwd = cwd
@@ -223,6 +227,9 @@
     def error(self, msg):
         self.logline("ERROR: " + msg, red=True)
 
+    def skip(self, msg):
+        self.logline("SKIPPED:" + msg, yellow=True)
+
     def logline(self, msg, **opts):
         self._reportedlines.append(msg)
         self.tw.line("%s" % msg, **opts)
@@ -411,7 +418,8 @@
                 sdist_path = self._makesdist()
             except tox.exception.InvocationError:
                 v = sys.exc_info()[1]
-                self.report.error("FAIL could not package project")
+                self.report.error("FAIL could not package project - v = %r" %
+                    v)
                 return
             sdistfile = self.config.distshare.join(sdist_path.basename)
             if sdistfile != sdist_path:
@@ -461,7 +469,14 @@
         retcode = 0
         for venv in self.venvlist:
             status = venv.status
-            if status and status != "skipped tests":
+            if isinstance(status, tox.exception.InterpreterNotFound):
+                msg = "  %s: %s" %(venv.envconfig.envname, str(status))
+                if self.config.option.skip_missing_interpreters:
+                    self.report.skip(msg)
+                else:
+                    retcode = 1
+                    self.report.error(msg)
+            elif status and status != "skipped tests":
                 msg = "  %s: %s" %(venv.envconfig.envname, str(status))
                 self.report.error(msg)
                 retcode = 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tox/_config.py new/tox-1.7.2/tox/_config.py
--- old/tox-1.7.1/tox/_config.py        2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/tox/_config.py        2014-07-15 09:22:26.000000000 +0200
@@ -1,13 +1,10 @@
 import argparse
-import distutils.sysconfig
 import os
 import random
 import sys
 import re
 import shlex
 import string
-import subprocess
-import textwrap
 import pkg_resources
 
 from tox.interpreters import Interpreters
@@ -18,7 +15,7 @@
 
 iswin32 = sys.platform == "win32"
 
-defaultenvs = {'jython': 'jython', 'pypy': 'pypy'}
+defaultenvs = {'jython': 'jython', 'pypy': 'pypy', 'pypy3': 'pypy3'}
 for _name in "py,py24,py25,py26,py27,py30,py31,py32,py33,py34".split(","):
     if _name == "py":
         basepython = sys.executable
@@ -123,7 +120,8 @@
     parser.add_argument("--hashseed", action="store",
         metavar="SEED", default=None,
         help="set PYTHONHASHSEED to SEED before running commands.  "
-             "Defaults to a random integer in the range 1 to 4294967295.  "
+             "Defaults to a random integer in the range [1, 4294967295] "
+             "([1, 1024] on Windows). "
              "Passing 'noset' suppresses this behavior.")
     parser.add_argument("--force-dep", action="append",
         metavar="REQ", default=None,
@@ -132,6 +130,8 @@
              "'pytest<2.7' or 'django>=1.6'.")
     parser.add_argument("--sitepackages", action="store_true",
         help="override sitepackages setting to True in all envs")
+    parser.add_argument("--skip-missing-interpreters", action="store_true",
+        help="don't fail tests for missing interpreters")
 
     parser.add_argument("args", nargs="*",
         help="additional arguments available to command positional 
substitution")
@@ -200,12 +200,15 @@
         return None
 
 def make_hashseed():
-    return str(random.randint(1, 4294967295))
+    max_seed = 4294967295
+    if sys.platform == 'win32':
+        max_seed = 1024
+    return str(random.randint(1, max_seed))
 
 class parseini:
     def __init__(self, config, inipath):
         config.toxinipath = inipath
-        config.toxinidir = toxinidir = config.toxinipath.dirpath()
+        config.toxinidir = config.toxinipath.dirpath()
 
         self._cfg = py.iniconfig.IniConfig(config.toxinipath)
         config._cfg = self._cfg
@@ -236,10 +239,14 @@
                                            "{toxinidir}/.tox")
         config.minversion = reader.getdefault(toxsection, "minversion", None)
 
+        if not config.option.skip_missing_interpreters:
+            config.option.skip_missing_interpreters = \
+                reader.getbool(toxsection, "skip_missing_interpreters", False)
+
         # determine indexserver dictionary
         config.indexserver = {'default': IndexServerConfig('default')}
         prefix = "indexserver"
-        for line in reader.getlist(toxsection, "indexserver"):
+        for line in reader.getlist(toxsection, prefix):
             name, url = map(lambda x: x.strip(), line.split("=", 1))
             config.indexserver[name] = IndexServerConfig(name, url)
 
@@ -527,30 +534,35 @@
     def _processcommand(self, command):
         posargs = getattr(self, "posargs", None)
 
-        # special treat posargs which might contain multiple arguments
-        # in their defaults
+        # Iterate through each word of the command substituting as
+        # appropriate to construct the new command string. This
+        # string is then broken up into exec argv components using
+        # shlex.
         newcommand = ""
         for word in CommandParser(command).words():
-            if word.startswith("{posargs:") and word.endswith("}"):
+            if word == "{posargs}" or word == "[]":
+                if posargs:
+                    newcommand += " ".join(posargs)
+                continue
+            elif word.startswith("{posargs:") and word.endswith("}"):
                 if posargs:
-                    word = "{posargs}"
+                    newcommand += " ".join(posargs)
+                    continue
                 else:
                     word = word[9:-1]
-            newcommand += word
-
-        # now we can properly parse the command
-        argv = []
-        for arg in shlex.split(newcommand):
-            if arg in ('[]', "{posargs}"):
-                if posargs:
-                    argv.extend(posargs)
-                continue
             new_arg = ""
-            for word in CommandParser(arg).words():
-                new_word = self._replace(word)
-                new_word = self._replace(new_word)
-                new_arg += new_word
-            argv.append(new_arg)
+            new_word = self._replace(word)
+            new_word = self._replace(new_word)
+            new_arg += new_word
+            newcommand += new_arg
+
+        # Construct shlex object that will not escape any values,
+        # use all values as is in argv.
+        shlexer = shlex.shlex(newcommand, posix=True)
+        shlexer.whitespace_split = True
+        shlexer.escape = ''
+        shlexer.commenters = ''
+        argv = list(shlexer)
         return argv
 
     def getargv(self, section, name, default=None, replace=True):
@@ -596,17 +608,25 @@
         return x
 
     def _replace_env(self, match):
-        envkey = match.group('substitution_value')
-        if not envkey:
+        match_value = match.group('substitution_value')
+        if not match_value:
             raise tox.exception.ConfigError(
                 'env: requires an environment variable name')
 
-        if not envkey in os.environ:
+        default = None
+        envkey_split = match_value.split(':', 1)
+
+        if len(envkey_split) is 2:
+            envkey, default = envkey_split
+        else:
+            envkey = match_value
+
+        if not envkey in os.environ and default is None:
             raise tox.exception.ConfigError(
                 "substitution env:%r: unkown environment variable %r" %
                 (envkey, envkey))
 
-        return os.environ[envkey]
+        return os.environ.get(envkey, default)
 
     def _substitute_from_other_section(self, key):
         if key.startswith("[") and "]" in key:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tox/_quickstart.py 
new/tox-1.7.2/tox/_quickstart.py
--- old/tox-1.7.1/tox/_quickstart.py    2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/tox/_quickstart.py    2014-07-15 09:22:26.000000000 +0200
@@ -56,7 +56,7 @@
     term_input = input
 
 
-all_envs = ['py26', 'py27', 'py32', 'py33', 'pypy', 'jython']
+all_envs = ['py26', 'py27', 'py32', 'py33', 'py34', 'pypy', 'jython']
 
 PROMPT_PREFIX = '> '
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tox/_venv.py new/tox-1.7.2/tox/_venv.py
--- old/tox-1.7.1/tox/_venv.py  2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/tox/_venv.py  2014-07-15 09:22:26.000000000 +0200
@@ -1,6 +1,5 @@
 from __future__ import with_statement
-import sys, os, re
-import subprocess
+import sys, os
 import py
 import tox
 from tox._config import DepConfig
@@ -121,8 +120,6 @@
         """
         if action is None:
             action = self.session.newaction(self, "update")
-        report = self.session.report
-        name = self.envconfig.envname
         rconfig = CreationConfig.readconfig(self.path_config)
         if not self.envconfig.recreate and rconfig and \
             rconfig.matches(self._getliveconfig()):
@@ -142,7 +139,8 @@
             self.install_deps(action)
         except tox.exception.InvocationError:
             v = sys.exc_info()[1]
-            return "could not install deps %s" %(self.envconfig.deps,)
+            return "could not install deps %s; v = %r" % (
+                self.envconfig.deps, v)
 
     def _getliveconfig(self):
         python = self.envconfig._basepython_info.executable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tox/_verlib.py new/tox-1.7.2/tox/_verlib.py
--- old/tox-1.7.1/tox/_verlib.py        2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/tox/_verlib.py        2014-07-15 09:22:26.000000000 +0200
@@ -8,7 +8,6 @@
 
 """
 
-import sys
 import re
 
 class IrrationalVersionError(Exception):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tox/interpreters.py 
new/tox-1.7.2/tox/interpreters.py
--- old/tox-1.7.1/tox/interpreters.py   2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/tox/interpreters.py   2014-07-15 09:22:26.000000000 +0200
@@ -1,8 +1,6 @@
 import sys
-import os
 import py
 import re
-import subprocess
 import inspect
 
 class Interpreters:
@@ -161,7 +159,7 @@
         # The standard executables can be found as a last resort via the
         # Python launcher py.exe
         if m:
-            locate_via_py(*m.groups())
+            return locate_via_py(*m.groups())
 
 def pyinfo():
     import sys
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tox.egg-info/PKG-INFO 
new/tox-1.7.2/tox.egg-info/PKG-INFO
--- old/tox-1.7.1/tox.egg-info/PKG-INFO 2014-03-28 15:18:53.000000000 +0100
+++ new/tox-1.7.2/tox.egg-info/PKG-INFO 2014-07-15 09:22:26.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: tox
-Version: 1.7.1
+Version: 1.7.2
 Summary: virtualenv-based automation of test activities
 Home-page: http://tox.testrun.org/
 Author: holger krekel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tox.egg-info/requires.txt 
new/tox-1.7.2/tox.egg-info/requires.txt
--- old/tox-1.7.1/tox.egg-info/requires.txt     2014-03-28 15:18:53.000000000 
+0100
+++ new/tox-1.7.2/tox.egg-info/requires.txt     2014-07-15 09:22:26.000000000 
+0200
@@ -1,2 +1,2 @@
 virtualenv>=1.11.2
-py>=1.4.17
\ No newline at end of file
+py>=1.4.17
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tox-1.7.1/tox.ini new/tox-1.7.2/tox.ini
--- old/tox-1.7.1/tox.ini       2014-03-28 15:18:52.000000000 +0100
+++ new/tox-1.7.2/tox.ini       2014-07-15 09:22:26.000000000 +0200
@@ -1,5 +1,5 @@
 [tox]
-envlist=py27,py33,py26,py32,pypy
+envlist=py27,py26,py34,py33,py32,pypy,flakes
 
 [testenv:X]
 commands=echo {posargs}
@@ -18,6 +18,10 @@
         --junitxml={envlogdir}/junit-{envname}.xml \
         check_sphinx.py {posargs}
 
+[testenv:flakes]
+deps = pytest-flakes>=0.2
+commands = py.test --flakes -m flakes tox tests
+
 [testenv:py25]
 setenv= PIP_INSECURE=1
 

++++++ tox-disable-env-tests.patch ++++++
--- /var/tmp/diff_new_pack.pFRiXe/_old  2014-08-27 07:46:19.000000000 +0200
+++ /var/tmp/diff_new_pack.pFRiXe/_new  2014-08-27 07:46:19.000000000 +0200
@@ -86,13 +86,12 @@
  
      def test_dash_e_single_1(self):
 diff -ruN a/tests/test_z_cmdline.py b/tests/test_z_cmdline.py
---- a/tests/test_z_cmdline.py  2014-03-28 15:18:52.000000000 +0100
-+++ b/tests/test_z_cmdline.py  1970-01-01 01:00:00.000000000 +0100
-@@ -1,658 +0,0 @@
+--- a/tests/test_z_cmdline.py  2014-07-15 09:22:26.000000000 +0200
++++ b/tests/test_z_cmdline.py  2014-08-19 12:03:19.023707261 +0200
+@@ -1,685 +0,0 @@
 -import tox
 -import py
 -import pytest
--import sys
 -from tox._pytestplugin import ReportExpectMock
 -try:
 -    import json
@@ -220,7 +219,6 @@
 -        })
 -        config = parseconfig([])
 -        session = Session(config)
--        envlist = ['hello', 'world']
 -        envs = session.venvlist
 -        assert len(envs) == 2
 -        env1, env2 = envs
@@ -284,6 +282,19 @@
 -    ])
 -    assert result.ret
 -
+-def test_run_custom_install_command_error(cmd, initproj):
+-    initproj("interp123-0.5", filedefs={
+-        'tox.ini': '''
+-            [testenv]
+-            install_command=./tox.ini {opts} {packages}
+-        '''
+-    })
+-    result = cmd.run("tox")
+-    result.stdout.fnmatch_lines([
+-        "ERROR: invocation failed, args: ['*/tox.ini*",
+-    ])
+-    assert result.ret
+-
 -def test_unknown_interpreter_and_env(cmd, initproj):
 -    initproj("interp123-0.5", filedefs={
 -        'tests': {'test_hello.py': "def test_hello(): pass"},
@@ -322,6 +333,22 @@
 -        "*ERROR*InterpreterNotFound*xyz_unknown_interpreter*",
 -    ])
 -
+-def test_skip_unknown_interpreter(cmd, initproj):
+-    initproj("interp123-0.5", filedefs={
+-        'tests': {'test_hello.py': "def test_hello(): pass"},
+-        'tox.ini': '''
+-            [testenv:python]
+-            basepython=xyz_unknown_interpreter
+-            [testenv]
+-            changedir=tests
+-        '''
+-    })
+-    result = cmd.run("tox", "--skip-missing-interpreters")
+-    assert not result.ret
+-    result.stdout.fnmatch_lines([
+-        "*SKIPPED*InterpreterNotFound*xyz_unknown_interpreter*",
+-    ])
+-
 -def test_unknown_dep(cmd, initproj):
 -    initproj("dep123-0.7", filedefs={
 -        'tests': {'test_hello.py': "def test_hello(): pass"},
@@ -658,7 +685,7 @@
 -    result.stdout.fnmatch_lines([
 -        "*sdist-make*setup.py*",
 -    ])
--    assert "virtualenv" not in result.stdout.str()
+-    assert "-mvirtualenv" not in result.stdout.str()
 -
 -def test_separate_sdist_no_sdistfile(cmd, initproj):
 -    distshare = cmd.tmpdir.join("distshare")
@@ -673,6 +700,7 @@
 -    l = distshare.listdir()
 -    assert len(l) == 1
 -    sdistfile = l[0]
+-    assert 'pkg123-0.7.zip' in str(sdistfile)
 -
 -def test_separate_sdist(cmd, initproj):
 -    distshare = cmd.tmpdir.join("distshare")
@@ -702,7 +730,6 @@
 -            distshare=%s
 -            sdistsrc={distshare}/pkg123-*
 -    """ % distshare)
--    p0 = distshare.ensure("pkg123-1.3.5.zip")
 -    p = distshare.ensure("pkg123-1.4.5.zip")
 -    distshare.ensure("pkg123-1.4.5a1.zip")
 -    session = Session(config)

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to