diff --git a/docs/changelog/1042.bugfix.rst b/docs/changelog/1042.bugfix.rst new file mode 100644 index 0000000000..250208f33a --- /dev/null +++ b/docs/changelog/1042.bugfix.rst @@ -0,0 +1 @@ +fix regression with ``3.5.0``: specifying ``--installpkg`` raises ``AttributeError: 'str' object has no attribute 'basename'`` diff --git a/src/tox/package.py b/src/tox/package.py index bbd191fdd4..29548c6544 100644 --- a/src/tox/package.py +++ b/src/tox/package.py @@ -108,9 +108,9 @@ def get_local_package(config, report, session): path = config.option.installpkg if not path: path = config.sdistsrc - path = session._resolve_package(path) - report.info("using package {!r}, skipping 'sdist' activity ".format(str(path))) - return path + py_path = py.path.local(session._resolve_package(path)) + report.info("using package {!r}, skipping 'sdist' activity ".format(str(py_path))) + return py_path def build_package(config, report, session): diff --git a/tests/unit/test_package.py b/tests/unit/test_package.py index d46d229d83..383d85ef9e 100644 --- a/tests/unit/test_package.py +++ b/tests/unit/test_package.py @@ -56,11 +56,11 @@ def test_make_sdist_distshare(tmpdir, initproj): assert package.ext == ".zip" assert package == config.temp_dir.join(package.basename) - assert dist == config.distdir.join(package.basename[len("1-") :]) + assert dist == config.distdir.join(package.basename[len("1-"):]) assert dist.check() assert os.stat(str(dist)).st_ino == os.stat(str(package)).st_ino - sdist_share = config.distshare.join(package.basename[len("1-") :]) + sdist_share = config.distshare.join(package.basename[len("1-"):]) assert sdist_share.check() assert sdist_share.read("rb") == dist.read("rb"), (sdist_share, package) @@ -389,3 +389,18 @@ def build_package(config, report, session): assert len(dist_after) == 1 sdist = dist_after[0] assert t1_package != sdist + + +def test_install_via_installpkg(mock_venv, initproj, cmd): + base = initproj( + "pkg-0.1", + filedefs={ + "tox.ini": """ + [tox] + install_cmd = python -m -c 'print("ok")' -- {opts} {packages}' + """ + }, + ) + fake_package = base.ensure(".tox", "dist", "pkg123-0.1.zip") + result = cmd("-e", "py", '--notest', '--installpkg', str(fake_package.relto(base))) + assert result.ret == 0, result.out