9 new commits in tox:
https://bitbucket.org/hpk42/tox/commits/4cdc267e9f82/
Changeset: 4cdc267e9f82
User: carljm
Date: 2013-08-09 00:46:24
Summary: Add install_deps_command testenv option.
Affected #: 2 files
diff -r 3be5bca16f8b0c4394060b8e0377ef1883c518c7 -r
4cdc267e9f8290a19945c45d962a85f3d4f7d5f1 tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -463,6 +463,14 @@
assert envconfig.changedir.basename == "abc"
assert envconfig.changedir == config.setupdir.join("abc")
+ def test_install_deps_command(self, newconfig):
+ config = newconfig("""
+ [testenv]
+ install_deps_command=pip install --pre {deps}
+ """)
+ envconfig = config.envconfigs['python']
+ assert envconfig.install_deps_command == "pip install --pre {deps}"
+
def test_simple(tmpdir, newconfig):
config = newconfig("""
[testenv:py24]
diff -r 3be5bca16f8b0c4394060b8e0377ef1883c518c7 -r
4cdc267e9f8290a19945c45d962a85f3d4f7d5f1 tox/_config.py
--- a/tox/_config.py
+++ b/tox/_config.py
@@ -331,6 +331,8 @@
downloadcache = reader.getdefault(section, "downloadcache")
if downloadcache:
vc.downloadcache = py.path.local(downloadcache)
+ vc.install_deps_command = reader.getdefault(
+ section, "install_deps_command", "pip @@@", replace=False)
return vc
def _getenvlist(self, reader, toxsection):
https://bitbucket.org/hpk42/tox/commits/209de3d6baba/
Changeset: 209de3d6baba
User: carljm
Date: 2013-08-09 00:59:12
Summary: Config parser shlex-splits install_deps_command.
Affected #: 2 files
diff -r 4cdc267e9f8290a19945c45d962a85f3d4f7d5f1 -r
209de3d6bababd1af01fe0ae8d2488fb0d3d4198 tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -469,7 +469,8 @@
install_deps_command=pip install --pre {deps}
""")
envconfig = config.envconfigs['python']
- assert envconfig.install_deps_command == "pip install --pre {deps}"
+ assert envconfig.install_deps_argv == [
+ 'pip', 'install', '--pre', '{deps}']
def test_simple(tmpdir, newconfig):
config = newconfig("""
diff -r 4cdc267e9f8290a19945c45d962a85f3d4f7d5f1 -r
209de3d6bababd1af01fe0ae8d2488fb0d3d4198 tox/_config.py
--- a/tox/_config.py
+++ b/tox/_config.py
@@ -331,7 +331,7 @@
downloadcache = reader.getdefault(section, "downloadcache")
if downloadcache:
vc.downloadcache = py.path.local(downloadcache)
- vc.install_deps_command = reader.getdefault(
+ vc.install_deps_argv = reader.getargv(
section, "install_deps_command", "pip @@@", replace=False)
return vc
@@ -471,6 +471,12 @@
return shlex.split(new_command.strip())
+ def getargv(self, section, name, default=None, replace=True):
+ command = self.getdefault(
+ section, name, default=default, replace=replace)
+
+ return shlex.split(command.strip())
+
def getbool(self, section, name, default=None):
s = self.getdefault(section, name, default)
if s is None:
https://bitbucket.org/hpk42/tox/commits/16f82639efc6/
Changeset: 16f82639efc6
User: carljm
Date: 2013-08-09 01:33:47
Summary: Use the install_command option for all installs.
Affected #: 4 files
diff -r 209de3d6bababd1af01fe0ae8d2488fb0d3d4198 -r
16f82639efc66e312833a5eadbe9b07cc15b09ea tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -463,14 +463,20 @@
assert envconfig.changedir.basename == "abc"
assert envconfig.changedir == config.setupdir.join("abc")
- def test_install_deps_command(self, newconfig):
+ def test_install_command(self, newconfig):
config = newconfig("""
[testenv]
- install_deps_command=pip install --pre {deps}
+ install_command=pip install --pre {packages}
""")
envconfig = config.envconfigs['python']
- assert envconfig.install_deps_argv == [
- 'pip', 'install', '--pre', '{deps}']
+ assert envconfig.install_command_argv == [
+ 'pip', 'install', '--pre', '{packages}']
+
+ def test_install_command_must_contain_packages(self, newconfig):
+ py.test.raises(tox.exception.ConfigError, newconfig, """
+ [testenv]
+ install_command=pip install
+ """)
def test_simple(tmpdir, newconfig):
config = newconfig("""
diff -r 209de3d6bababd1af01fe0ae8d2488fb0d3d4198 -r
16f82639efc66e312833a5eadbe9b07cc15b09ea tests/test_venv.py
--- a/tests/test_venv.py
+++ b/tests/test_venv.py
@@ -512,12 +512,11 @@
monkeypatch.setattr(venv, '_pcall', lambda *args, **kwargs: 0/0)
py.test.raises(ZeroDivisionError, "venv._install(list('123'))")
py.test.raises(ZeroDivisionError, "venv.test()")
- py.test.raises(ZeroDivisionError, "venv.easy_install(['qwe'])")
- py.test.raises(ZeroDivisionError, "venv.pip_install(['qwe'])")
+ py.test.raises(ZeroDivisionError, "venv.run_install_command(['qwe'])")
py.test.raises(ZeroDivisionError, "venv._pcall([1,2,3])")
monkeypatch.setenv("PIP_RESPECT_VIRTUALENV", "1")
monkeypatch.setenv("PIP_REQUIRE_VIRTUALENV", "1")
- py.test.raises(ZeroDivisionError, "venv.pip_install(['qwe'])")
+ py.test.raises(ZeroDivisionError, "venv.run_install_command(['qwe'])")
assert 'PIP_RESPECT_VIRTUALENV' not in os.environ
assert 'PIP_REQUIRE_VIRTUALENV' not in os.environ
@@ -570,13 +569,13 @@
assert '-U' in l[0].args
assert '--no-deps' in l[0].args
-def test_pip_install(newmocksession):
+def test_run_install_command(newmocksession):
mocksession = newmocksession([], "")
venv = mocksession.getenv('python')
venv.just_created = True
venv.envconfig.envdir.ensure(dir=1)
action = mocksession.newaction(venv, "hello")
- venv.pip_install(args=["whatever"], action=action)
+ venv.run_install_command(args=["whatever"], action=action)
l = mocksession._pcalls
assert len(l) == 1
assert 'pip' in l[0].args[0]
diff -r 209de3d6bababd1af01fe0ae8d2488fb0d3d4198 -r
16f82639efc66e312833a5eadbe9b07cc15b09ea tox/_config.py
--- a/tox/_config.py
+++ b/tox/_config.py
@@ -331,8 +331,15 @@
downloadcache = reader.getdefault(section, "downloadcache")
if downloadcache:
vc.downloadcache = py.path.local(downloadcache)
- vc.install_deps_argv = reader.getargv(
- section, "install_deps_command", "pip @@@", replace=False)
+ vc.install_command_argv = reader.getargv(
+ section,
+ "install_command",
+ "pip install {opts} {packages}",
+ replace=False,
+ )
+ if '{packages}' not in vc.install_command_argv:
+ raise tox.exception.ConfigError(
+ "'install_command' must contain '{packages}' substitution")
return vc
def _getenvlist(self, reader, toxsection):
diff -r 209de3d6bababd1af01fe0ae8d2488fb0d3d4198 -r
16f82639efc66e312833a5eadbe9b07cc15b09ea tox/_venv.py
--- a/tox/_venv.py
+++ b/tox/_venv.py
@@ -261,27 +261,26 @@
l = []
if indexserver:
l += ["-i", indexserver]
+ if self.envconfig.downloadcache:
+ self.envconfig.downloadcache.ensure(dir=1)
+ l.append("--download-cache=%s" % self.envconfig.downloadcache)
return l
- def easy_install(self, args, indexserver=None):
- argv = ["easy_install"] + self._commoninstallopts(indexserver) + args
- self._pcall(argv, cwd=self.envconfig.envlogdir)
-
- def pip_install(self, args, indexserver=None, action=None):
- argv = ["pip", "install"] + self._commoninstallopts(indexserver)
+ def run_install_command(self, args, indexserver=None, action=None):
+ argv = self.envconfig.install_command_argv[:]
# use pip-script on win32 to avoid the executable locking
- if sys.platform == "win32":
+ if argv[0] == "pip" and sys.platform == "win32":
argv[0] = "pip-script.py"
- if self.envconfig.downloadcache:
- self.envconfig.downloadcache.ensure(dir=1)
- argv.append("--download-cache=%s" %
- self.envconfig.downloadcache)
+ i = argv.index('{packages}')
+ argv[i:i+1] = args
+ if '{opts}' in argv:
+ i = argv.index('{opts}')
+ argv[i:i+1] = self._commoninstallopts(indexserver)
for x in ('PIP_RESPECT_VIRTUALENV', 'PIP_REQUIRE_VIRTUALENV'):
try:
del os.environ[x]
except KeyError:
pass
- argv += args
env = dict(PYTHONIOENCODING='utf_8')
self._pcall(argv, cwd=self.envconfig.envlogdir, extraenv=env,
action=action)
@@ -307,7 +306,7 @@
extraopts = extraopts or []
for ixserver in l:
args = d[ixserver] + extraopts
- self.pip_install(args, ixserver.url, action)
+ self.run_install_command(args, ixserver.url, action)
def _getenv(self):
env = self.envconfig.setenv
https://bitbucket.org/hpk42/tox/commits/b412f4665b54/
Changeset: b412f4665b54
User: carljm
Date: 2013-08-09 01:43:47
Summary: Avoid adding --download-cache option to non-pip custom installers.
Affected #: 2 files
diff -r 16f82639efc66e312833a5eadbe9b07cc15b09ea -r
b412f4665b54b1084824aa8065d374fb859ea589 tests/test_venv.py
--- a/tests/test_venv.py
+++ b/tests/test_venv.py
@@ -585,6 +585,21 @@
assert 'PYTHONIOENCODING' in env
assert env['PYTHONIOENCODING'] == 'utf_8'
+def test_run_custom_install_command(newmocksession):
+ mocksession = newmocksession([], """
+ [testenv]
+ install_command=easy_install {opts} {packages}
+ """)
+ venv = mocksession.getenv('python')
+ venv.just_created = True
+ venv.envconfig.envdir.ensure(dir=1)
+ action = mocksession.newaction(venv, "hello")
+ venv.run_install_command(args=["whatever"], action=action)
+ l = mocksession._pcalls
+ assert len(l) == 1
+ assert 'easy_install' in l[0].args[0]
+ assert l[0].args[1:] == ['whatever']
+
def test_command_relative_issue26(newmocksession, tmpdir, monkeypatch):
mocksession = newmocksession([], """
[testenv]
diff -r 16f82639efc66e312833a5eadbe9b07cc15b09ea -r
b412f4665b54b1084824aa8065d374fb859ea589 tox/_venv.py
--- a/tox/_venv.py
+++ b/tox/_venv.py
@@ -257,25 +257,28 @@
"%s" % depinfo)
self._install(deps, action=action)
- def _commoninstallopts(self, indexserver):
+ def _installopts(self, indexserver, is_pip):
l = []
if indexserver:
l += ["-i", indexserver]
- if self.envconfig.downloadcache:
+ if is_pip and self.envconfig.downloadcache:
self.envconfig.downloadcache.ensure(dir=1)
l.append("--download-cache=%s" % self.envconfig.downloadcache)
return l
def run_install_command(self, args, indexserver=None, action=None):
argv = self.envconfig.install_command_argv[:]
- # use pip-script on win32 to avoid the executable locking
- if argv[0] == "pip" and sys.platform == "win32":
- argv[0] = "pip-script.py"
+ is_pip = False
+ if argv[0] == "pip":
+ is_pip = True
+ # use pip-script on win32 to avoid the executable locking
+ if sys.platform == "win32":
+ argv[0] = "pip-script.py"
i = argv.index('{packages}')
argv[i:i+1] = args
if '{opts}' in argv:
i = argv.index('{opts}')
- argv[i:i+1] = self._commoninstallopts(indexserver)
+ argv[i:i+1] = self._installopts(indexserver, is_pip)
for x in ('PIP_RESPECT_VIRTUALENV', 'PIP_REQUIRE_VIRTUALENV'):
try:
del os.environ[x]
https://bitbucket.org/hpk42/tox/commits/269dc66f1f5e/
Changeset: 269dc66f1f5e
User: carljm
Date: 2013-08-09 02:07:49
Summary: Add documentation for install_command option.
Affected #: 1 file
diff -r b412f4665b54b1084824aa8065d374fb859ea589 -r
269dc66f1f5e4d954854fb884731020758226f77 doc/config.txt
--- a/doc/config.txt
+++ b/doc/config.txt
@@ -76,6 +76,22 @@
For eventually performing a call to ``subprocess.Popen(args, ...)``
``args`` are determined by splitting the whole command by whitespace.
+.. confval:: install_command=ARGV
+
+ .. versionadded:: 1.6
+
+ the command to be used for installing packages into the virtual
+ environment; both the sdist for the package under test and any
+ defined dependencies. Must contain the substitution key
+ ``{packages}`` which will be replaced by the packages to
+ install. May also contain the substitution key ``{opts}``, which
+ will be replaced by the ``-i`` option to specify index server
+ (according to :confval:`indexserver` and the ``:indexserver:dep``
+ syntax of :confval:`deps`) and the ``--download-cache`` option, if
+ you've specified :confval:`downloadcache` and your
+ :confval:`install_command` begins with ``pip``. **default**: ``pip
+ install {opts} {packages}``
+
.. confval:: whitelist_externals=MULTI-LINE-LIST
each line specifies a command name (in glob-style pattern format)
https://bitbucket.org/hpk42/tox/commits/15e7d325f4b6/
Changeset: 15e7d325f4b6
User: carljm
Date: 2013-08-10 01:32:32
Summary: Add test for IniReader.getargv.
Affected #: 1 file
diff -r 269dc66f1f5e4d954854fb884731020758226f77 -r
15e7d325f4b682677756bb69ab61650e0c0a20b6 tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -320,6 +320,16 @@
assert reader.getargvlist('section', 'key')[0] == expected
+ def test_getargv(self, newconfig):
+ config = newconfig("""
+ [section]
+ key=some command "with quoting"
+ """)
+ reader = IniReader(config._cfg)
+ expected = ['some', 'command', 'with quoting']
+ assert reader.getargv('section', 'key') == expected
+
+
def test_getpath(self, tmpdir, newconfig):
config = newconfig("""
[section]
https://bitbucket.org/hpk42/tox/commits/c5bf99a270bb/
Changeset: c5bf99a270bb
User: carljm
Date: 2013-08-10 01:56:20
Summary: Don't pass --download-cache option to installer if downloadcache
option is not in config.
Affected #: 3 files
diff -r 15e7d325f4b682677756bb69ab61650e0c0a20b6 -r
c5bf99a270bb820b040f2090948dce3b27642569 tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -488,6 +488,30 @@
install_command=pip install
""")
+ def test_downloadcache(self, newconfig, monkeypatch):
+ monkeypatch.delenv("PIP_DOWNLOAD_CACHE", raising=False)
+ config = newconfig("""
+ [testenv]
+ downloadcache=/the/cache
+ """)
+ envconfig = config.envconfigs['python']
+ assert envconfig.downloadcache == '/the/cache'
+
+ def test_downloadcache_env_override(self, newconfig, monkeypatch):
+ monkeypatch.setenv("PIP_DOWNLOAD_CACHE", '/from/env')
+ config = newconfig("""
+ [testenv]
+ downloadcache=/from/config
+ """)
+ envconfig = config.envconfigs['python']
+ assert envconfig.downloadcache == '/from/env'
+
+ def test_downloadcache_only_if_in_config(self, newconfig, tmpdir,
monkeypatch):
+ monkeypatch.setenv("PIP_DOWNLOAD_CACHE", tmpdir)
+ config = newconfig('')
+ envconfig = config.envconfigs['python']
+ assert not envconfig.downloadcache
+
def test_simple(tmpdir, newconfig):
config = newconfig("""
[testenv:py24]
diff -r 15e7d325f4b682677756bb69ab61650e0c0a20b6 -r
c5bf99a270bb820b040f2090948dce3b27642569 tests/test_venv.py
--- a/tests/test_venv.py
+++ b/tests/test_venv.py
@@ -208,10 +208,6 @@
assert l[1].cwd == venv.envconfig.envlogdir
assert "pip" in str(args[0])
assert args[1] == "install"
- if envdc:
- assert venv.envconfig.downloadcache == tmpdir
- else:
- assert not venv.envconfig.downloadcache
assert "dep1" in args
assert "dep2" in args
deps = list(filter(None, [x[1] for x in venv._getliveconfig().deps]))
diff -r 15e7d325f4b682677756bb69ab61650e0c0a20b6 -r
c5bf99a270bb820b040f2090948dce3b27642569 tox/_config.py
--- a/tox/_config.py
+++ b/tox/_config.py
@@ -326,10 +326,10 @@
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)
- if not downloadcache:
- downloadcache = reader.getdefault(section, "downloadcache")
+ downloadcache = reader.getdefault(section, "downloadcache")
if downloadcache:
+ # env var, if present, takes precedence
+ downloadcache = os.environ.get("PIP_DOWNLOAD_CACHE", downloadcache)
vc.downloadcache = py.path.local(downloadcache)
vc.install_command_argv = reader.getargv(
section,
https://bitbucket.org/hpk42/tox/commits/136e0f1a8a93/
Changeset: 136e0f1a8a93
User: carljm
Date: 2013-08-10 02:08:34
Summary: Add --download-cache if set in config; don't try to check
installer.
Affected #: 2 files
diff -r c5bf99a270bb820b040f2090948dce3b27642569 -r
136e0f1a8a93cb52939fa37a746806e3d9a3daea doc/config.txt
--- a/doc/config.txt
+++ b/doc/config.txt
@@ -87,10 +87,14 @@
install. May also contain the substitution key ``{opts}``, which
will be replaced by the ``-i`` option to specify index server
(according to :confval:`indexserver` and the ``:indexserver:dep``
- syntax of :confval:`deps`) and the ``--download-cache`` option, if
- you've specified :confval:`downloadcache` and your
- :confval:`install_command` begins with ``pip``. **default**: ``pip
- install {opts} {packages}``
+ syntax of :confval:`deps`) and the ``--download-cache`` option (if
+ you've specified :confval:`downloadcache`). If your installer does
+ not support ``-i`` and ``--download-cache`` command-line options,
+ you should not use :confval:`indexserver` or
+ :confval:`downloadcache`, and/or your :confval:`install_command`
+ should not include the ``{opts}`` substitution key (in which case
+ those options will have no effect).
+ **default**: ``pip install {opts} {packages}``
.. confval:: whitelist_externals=MULTI-LINE-LIST
@@ -133,9 +137,11 @@
.. confval:: downloadcache=path
- (pip only) use this directory for caching downloads. This value
- is overriden by the environment variable ``PIP_DOWNLOAD_CACHE``
- if it exists.
+ use this directory for caching downloads. This value is overriden
+ by the environment variable ``PIP_DOWNLOAD_CACHE`` if it exists. If
+ you specify a custom :confval:`install_command` that uses an
+ installer other than pip, your installer must support the
+ `--download-cache` command-line option.
**default**: no download cache will be used.
**note**: if creating multiple environments use of a download cache greatly
speeds up the testing process.
diff -r c5bf99a270bb820b040f2090948dce3b27642569 -r
136e0f1a8a93cb52939fa37a746806e3d9a3daea tox/_venv.py
--- a/tox/_venv.py
+++ b/tox/_venv.py
@@ -257,28 +257,25 @@
"%s" % depinfo)
self._install(deps, action=action)
- def _installopts(self, indexserver, is_pip):
+ def _installopts(self, indexserver):
l = []
if indexserver:
l += ["-i", indexserver]
- if is_pip and self.envconfig.downloadcache:
+ if self.envconfig.downloadcache:
self.envconfig.downloadcache.ensure(dir=1)
l.append("--download-cache=%s" % self.envconfig.downloadcache)
return l
def run_install_command(self, args, indexserver=None, action=None):
argv = self.envconfig.install_command_argv[:]
- is_pip = False
- if argv[0] == "pip":
- is_pip = True
- # use pip-script on win32 to avoid the executable locking
- if sys.platform == "win32":
- argv[0] = "pip-script.py"
+ # use pip-script on win32 to avoid the executable locking
+ if argv[0] == "pip" and sys.platform == "win32":
+ argv[0] = "pip-script.py"
i = argv.index('{packages}')
argv[i:i+1] = args
if '{opts}' in argv:
i = argv.index('{opts}')
- argv[i:i+1] = self._installopts(indexserver, is_pip)
+ argv[i:i+1] = self._installopts(indexserver)
for x in ('PIP_RESPECT_VIRTUALENV', 'PIP_REQUIRE_VIRTUALENV'):
try:
del os.environ[x]
https://bitbucket.org/hpk42/tox/commits/50d991641429/
Changeset: 50d991641429
User: carljm
Date: 2013-08-10 02:12:46
Summary: Clarify that usedevelop uses pip's -e option.
Affected #: 1 file
diff -r 136e0f1a8a93cb52939fa37a746806e3d9a3daea -r
50d991641429bff80344b3c98d0ccad74e1a5015 doc/config.txt
--- a/doc/config.txt
+++ b/doc/config.txt
@@ -211,8 +211,11 @@
.. versionadded:: 1.6
- Install the current package in development mode with "setup.py develop"
- instead of installing from the ``sdist`` package.
+ Install the current package in development mode with "setup.py
+ develop" instead of installing from the ``sdist`` package. (This
+ uses pip's `-e` option, so should be avoided if you've specified a
+ custom :confval:`install_command` that does not support ``-e``).
+
**default**: ``False``
Repository URL: https://bitbucket.org/hpk42/tox/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
_______________________________________________
pytest-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pytest-commit