Skip to content

Commit 121ef6b

Browse files
authored
PyPy 7.3.1 now generates Scripts instead of bin on Windows (#1597)
1 parent 6360176 commit 121ef6b

File tree

7 files changed

+36
-18
lines changed

7 files changed

+36
-18
lines changed

.pre-commit-config.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ repos:
1313
- id: debug-statements
1414
- id: end-of-file-fixer
1515
- id: trailing-whitespace
16-
- repo: https://github.com/asottile/add-trailing-comma
17-
rev: v2.0.1
18-
hooks:
19-
- id: add-trailing-comma
2016
- repo: https://github.com/asottile/pyupgrade
2117
rev: v2.4.3
2218
hooks:
@@ -46,6 +42,10 @@ repos:
4642
additional_dependencies:
4743
- black==19.10b0
4844
language_version: python3.8
45+
- repo: https://github.com/asottile/add-trailing-comma
46+
rev: v2.0.1
47+
hooks:
48+
- id: add-trailing-comma
4949
- repo: https://github.com/pre-commit/pygrep-hooks
5050
rev: v1.5.1
5151
hooks:

docs/changelog/1597.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
PyPy 7.3.1 on Windows uses the ``Script`` folder instead of ``bin``. - by :user:`gaborbernat`

src/tox/config/__init__.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -955,10 +955,17 @@ def __init__(self, envname, config, factors, reader):
955955

956956
def get_envbindir(self):
957957
"""Path to directory where scripts/binaries reside."""
958-
if tox.INFO.IS_WIN and "jython" not in self.basepython and "pypy" not in self.basepython:
959-
return self.envdir.join("Scripts")
960-
else:
961-
return self.envdir.join("bin")
958+
is_bin = (
959+
isinstance(self.python_info, NoInterpreterInfo)
960+
or tox.INFO.IS_WIN is False
961+
or self.python_info.implementation == "Jython"
962+
or (
963+
tox.INFO.IS_WIN
964+
and self.python_info.implementation == "PyPy"
965+
and self.python_info.extra_version_info < (7, 3, 1)
966+
)
967+
)
968+
return self.envdir.join("bin" if is_bin else "Scripts")
962969

963970
@property
964971
def envbindir(self):

src/tox/helper/get_version.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
from __future__ import unicode_literals
22

33
import json
4+
import platform
45
import sys
56

67
info = {
78
"executable": sys.executable,
8-
"name": "pypy" if hasattr(sys, "pypy_version_info") else "python",
9+
"implementation": platform.python_implementation(),
910
"version_info": list(sys.version_info),
1011
"version": sys.version,
1112
"is_64": sys.maxsize > 2 ** 32,
1213
"sysplatform": sys.platform,
14+
"extra_version_info": getattr(sys, "pypy_version_info", None),
1315
}
1416
info_as_dump = json.dumps(info)
1517
print(info_as_dump)

src/tox/interpreters/__init__.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,16 @@ def run_and_get_interpreter_info(name, executable):
5959
try:
6060
result = get_python_info(str(executable))
6161
result["version_info"] = tuple(result["version_info"]) # fix json dump transformation
62-
del result["name"]
62+
if result["extra_version_info"] is not None:
63+
result["extra_version_info"] = tuple(
64+
result["extra_version_info"],
65+
) # fix json dump transformation
6366
del result["version"]
6467
result["executable"] = str(executable)
6568
except ExecFailed as e:
6669
return NoInterpreterInfo(name, executable=e.executable, out=e.out, err=e.err)
6770
else:
68-
return InterpreterInfo(name, **result)
71+
return InterpreterInfo(**result)
6972

7073

7174
def exec_on_interpreter(*args):
@@ -93,12 +96,16 @@ def __init__(self, executable, source, out, err):
9396

9497

9598
class InterpreterInfo:
96-
def __init__(self, name, executable, version_info, sysplatform, is_64):
97-
self.name = name
99+
def __init__(
100+
self, implementation, executable, version_info, sysplatform, is_64, extra_version_info,
101+
):
102+
self.implementation = implementation
98103
self.executable = executable
104+
99105
self.version_info = version_info
100106
self.sysplatform = sysplatform
101107
self.is_64 = is_64
108+
self.extra_version_info = extra_version_info
102109

103110
def __str__(self):
104111
return "<executable at {}, version_info {}>".format(self.executable, self.version_info)

src/tox/interpreters/via_path.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def exe_spec(python_exe, base):
3838
info = get_python_info(python_exe)
3939
if info is not None:
4040
found = PythonSpec(
41-
info["name"],
41+
"pypy" if info["implementation"] == "PyPy" else "python",
4242
info["version_info"][0],
4343
info["version_info"][1],
4444
64 if info["is_64"] else 32,

tests/unit/interpreters/test_interpreters.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import unicode_literals
22

33
import os
4+
import platform
45
import stat
56
import subprocess
67
import sys
@@ -101,7 +102,7 @@ def test_run_and_get_interpreter_info():
101102
name = os.path.basename(sys.executable)
102103
info = run_and_get_interpreter_info(name, sys.executable)
103104
assert info.version_info == tuple(sys.version_info)
104-
assert info.name == name
105+
assert info.implementation == platform.python_implementation()
105106
assert info.executable == sys.executable
106107

107108

@@ -186,16 +187,16 @@ def test_exec_failed():
186187
class TestInterpreterInfo:
187188
@staticmethod
188189
def info(
189-
name="my-name",
190+
implementation="CPython",
190191
executable="my-executable",
191192
version_info="my-version-info",
192193
sysplatform="my-sys-platform",
193194
):
194-
return InterpreterInfo(name, executable, version_info, sysplatform, True)
195+
return InterpreterInfo(implementation, executable, version_info, sysplatform, True, None)
195196

196197
def test_data(self):
197198
x = self.info("larry", "moe", "shemp", "curly")
198-
assert x.name == "larry"
199+
assert x.implementation == "larry"
199200
assert x.executable == "moe"
200201
assert x.version_info == "shemp"
201202
assert x.sysplatform == "curly"

0 commit comments

Comments
 (0)