mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
* gh-109615: Fix support test_copy_python_src_ignore() (#109958) Fix the test when run on an installed Python: use "abs_srcdir" of sysconfig, and skip the test if the Python source code cannot be found. * Tools/patchcheck/patchcheck.py, Tools/freeze/test/freeze.py and Lib/test/libregrtest/utils.py now first try to get "abs_srcdir" from sysconfig, before getting "srcdir" from sysconfig. * test.pythoninfo logs sysconfig "abs_srcdir". (cherry picked from commitb89ed9df39
) * gh-109615: Fix support test_copy_python_src_ignore() on WASM (#109970) Not only check if src_dir exists, but look also for Lib/os.py landmark. (cherry picked from commitcc54bcf17b
) * gh-109615: Look for 'Modules' as landmark for test_copy_python_src_ignore (GH-110108) (cherry picked from commit20bc5f7c28
) * gh-109748: Fix again venv test_zippath_from_non_installed_posix() (#110149) Call also copy_python_src_ignore() on listdir() names. shutil.copytree(): replace set() with an empty tuple. An empty tuple becomes a constant in the compiler and checking if an item is in an empty tuple is cheap. (cherry picked from commit0def8c712b
) --------- Co-authored-by: Steve Dower <steve.dower@python.org>
This commit is contained in:
parent
e7a61d34b7
commit
8939221e91
7 changed files with 49 additions and 12 deletions
|
@ -481,7 +481,7 @@ def _copytree(entries, src, dst, symlinks, ignore, copy_function,
|
||||||
if ignore is not None:
|
if ignore is not None:
|
||||||
ignored_names = ignore(os.fspath(src), [x.name for x in entries])
|
ignored_names = ignore(os.fspath(src), [x.name for x in entries])
|
||||||
else:
|
else:
|
||||||
ignored_names = set()
|
ignored_names = ()
|
||||||
|
|
||||||
os.makedirs(dst, exist_ok=dirs_exist_ok)
|
os.makedirs(dst, exist_ok=dirs_exist_ok)
|
||||||
errors = []
|
errors = []
|
||||||
|
|
|
@ -747,11 +747,13 @@ class Regrtest:
|
||||||
if sysconfig.is_python_build():
|
if sysconfig.is_python_build():
|
||||||
self.tmp_dir = sysconfig.get_config_var('abs_builddir')
|
self.tmp_dir = sysconfig.get_config_var('abs_builddir')
|
||||||
if self.tmp_dir is None:
|
if self.tmp_dir is None:
|
||||||
# gh-74470: On Windows, only srcdir is available. Using
|
self.tmp_dir = sysconfig.get_config_var('abs_srcdir')
|
||||||
# abs_builddir mostly matters on UNIX when building Python
|
if not self.tmp_dir:
|
||||||
# out of the source tree, especially when the source tree
|
# gh-74470: On Windows, only srcdir is available. Using
|
||||||
# is read only.
|
# abs_builddir mostly matters on UNIX when building
|
||||||
self.tmp_dir = sysconfig.get_config_var('srcdir')
|
# Python out of the source tree, especially when the
|
||||||
|
# source tree is read only.
|
||||||
|
self.tmp_dir = sysconfig.get_config_var('srcdir')
|
||||||
self.tmp_dir = os.path.join(self.tmp_dir, 'build')
|
self.tmp_dir = os.path.join(self.tmp_dir, 'build')
|
||||||
else:
|
else:
|
||||||
self.tmp_dir = tempfile.gettempdir()
|
self.tmp_dir = tempfile.gettempdir()
|
||||||
|
|
|
@ -516,6 +516,8 @@ def collect_sysconfig(info_add):
|
||||||
'Py_ENABLE_SHARED',
|
'Py_ENABLE_SHARED',
|
||||||
'SHELL',
|
'SHELL',
|
||||||
'SOABI',
|
'SOABI',
|
||||||
|
'abs_builddir',
|
||||||
|
'abs_srcdir',
|
||||||
'prefix',
|
'prefix',
|
||||||
):
|
):
|
||||||
value = sysconfig.get_config_var(name)
|
value = sysconfig.get_config_var(name)
|
||||||
|
|
|
@ -767,12 +767,27 @@ class TestSupport(unittest.TestCase):
|
||||||
#self.assertEqual(available, 2)
|
#self.assertEqual(available, 2)
|
||||||
|
|
||||||
def test_copy_python_src_ignore(self):
|
def test_copy_python_src_ignore(self):
|
||||||
src_dir = sysconfig.get_config_var('srcdir')
|
# Get source directory
|
||||||
|
src_dir = sysconfig.get_config_var('abs_srcdir')
|
||||||
|
if not src_dir:
|
||||||
|
src_dir = sysconfig.get_config_var('srcdir')
|
||||||
src_dir = os.path.abspath(src_dir)
|
src_dir = os.path.abspath(src_dir)
|
||||||
|
|
||||||
ignored = {'.git', '__pycache__'}
|
# Check that the source code is available
|
||||||
|
if not os.path.exists(src_dir):
|
||||||
|
self.skipTest(f"cannot access Python source code directory:"
|
||||||
|
f" {src_dir!r}")
|
||||||
|
# Check that the landmark copy_python_src_ignore() expects is available
|
||||||
|
# (Previously we looked for 'Lib\os.py', which is always present on Windows.)
|
||||||
|
landmark = os.path.join(src_dir, 'Modules')
|
||||||
|
if not os.path.exists(landmark):
|
||||||
|
self.skipTest(f"cannot access Python source code directory:"
|
||||||
|
f" {landmark!r} landmark is missing")
|
||||||
|
|
||||||
|
# Test support.copy_python_src_ignore()
|
||||||
|
|
||||||
# Source code directory
|
# Source code directory
|
||||||
|
ignored = {'.git', '__pycache__'}
|
||||||
names = os.listdir(src_dir)
|
names = os.listdir(src_dir)
|
||||||
self.assertEqual(support.copy_python_src_ignore(src_dir, names),
|
self.assertEqual(support.copy_python_src_ignore(src_dir, names),
|
||||||
ignored | {'build'})
|
ignored | {'build'})
|
||||||
|
@ -782,7 +797,7 @@ class TestSupport(unittest.TestCase):
|
||||||
self.assertEqual(support.copy_python_src_ignore(path, os.listdir(path)),
|
self.assertEqual(support.copy_python_src_ignore(path, os.listdir(path)),
|
||||||
ignored | {'build', 'venv'})
|
ignored | {'build', 'venv'})
|
||||||
|
|
||||||
# An other directory
|
# Another directory
|
||||||
path = os.path.join(src_dir, 'Objects')
|
path = os.path.join(src_dir, 'Objects')
|
||||||
self.assertEqual(support.copy_python_src_ignore(path, os.listdir(path)),
|
self.assertEqual(support.copy_python_src_ignore(path, os.listdir(path)),
|
||||||
ignored)
|
ignored)
|
||||||
|
|
|
@ -571,7 +571,11 @@ class BasicTest(BaseTest):
|
||||||
eachpath,
|
eachpath,
|
||||||
os.path.join(non_installed_dir, platlibdir))
|
os.path.join(non_installed_dir, platlibdir))
|
||||||
elif os.path.isfile(os.path.join(eachpath, "os.py")):
|
elif os.path.isfile(os.path.join(eachpath, "os.py")):
|
||||||
for name in os.listdir(eachpath):
|
names = os.listdir(eachpath)
|
||||||
|
ignored_names = copy_python_src_ignore(eachpath, names)
|
||||||
|
for name in names:
|
||||||
|
if name in ignored_names:
|
||||||
|
continue
|
||||||
if name == "site-packages":
|
if name == "site-packages":
|
||||||
continue
|
continue
|
||||||
fn = os.path.join(eachpath, name)
|
fn = os.path.join(eachpath, name)
|
||||||
|
|
|
@ -7,9 +7,16 @@ import sysconfig
|
||||||
from test import support
|
from test import support
|
||||||
|
|
||||||
|
|
||||||
|
def get_python_source_dir():
|
||||||
|
src_dir = sysconfig.get_config_var('abs_srcdir')
|
||||||
|
if not src_dir:
|
||||||
|
src_dir = sysconfig.get_config_var('srcdir')
|
||||||
|
return os.path.abspath(src_dir)
|
||||||
|
|
||||||
|
|
||||||
TESTS_DIR = os.path.dirname(__file__)
|
TESTS_DIR = os.path.dirname(__file__)
|
||||||
TOOL_ROOT = os.path.dirname(TESTS_DIR)
|
TOOL_ROOT = os.path.dirname(TESTS_DIR)
|
||||||
SRCDIR = os.path.abspath(sysconfig.get_config_var('srcdir'))
|
SRCDIR = get_python_source_dir()
|
||||||
|
|
||||||
MAKE = shutil.which('make')
|
MAKE = shutil.which('make')
|
||||||
FREEZE = os.path.join(TOOL_ROOT, 'freeze.py')
|
FREEZE = os.path.join(TOOL_ROOT, 'freeze.py')
|
||||||
|
|
|
@ -11,6 +11,13 @@ import reindent
|
||||||
import untabify
|
import untabify
|
||||||
|
|
||||||
|
|
||||||
|
def get_python_source_dir():
|
||||||
|
src_dir = sysconfig.get_config_var('abs_srcdir')
|
||||||
|
if not src_dir:
|
||||||
|
src_dir = sysconfig.get_config_var('srcdir')
|
||||||
|
return os.path.abspath(src_dir)
|
||||||
|
|
||||||
|
|
||||||
# Excluded directories which are copies of external libraries:
|
# Excluded directories which are copies of external libraries:
|
||||||
# don't check their coding style
|
# don't check their coding style
|
||||||
EXCLUDE_DIRS = [
|
EXCLUDE_DIRS = [
|
||||||
|
@ -18,7 +25,7 @@ EXCLUDE_DIRS = [
|
||||||
os.path.join('Modules', 'expat'),
|
os.path.join('Modules', 'expat'),
|
||||||
os.path.join('Modules', 'zlib'),
|
os.path.join('Modules', 'zlib'),
|
||||||
]
|
]
|
||||||
SRCDIR = sysconfig.get_config_var('srcdir')
|
SRCDIR = get_python_source_dir()
|
||||||
|
|
||||||
|
|
||||||
def n_files_str(count):
|
def n_files_str(count):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue