[Python-checkins] bpo-45783: Preserve file moves and deletions in the tests for the freeze tool. (GH-29527)

encukou webhook-mailer at python.org
Tue Nov 23 08:43:51 EST 2021


https://github.com/python/cpython/commit/8ed1495ad900dd815ff8fb97926da5312aaa23f9
commit: 8ed1495ad900dd815ff8fb97926da5312aaa23f9
branch: main
author: Eric Snow <ericsnowcurrently at gmail.com>
committer: encukou <encukou at gmail.com>
date: 2021-11-23T14:43:40+01:00
summary:

bpo-45783: Preserve file moves and deletions in the tests for the freeze tool. (GH-29527)

Use shutil.copytree rather than Git, which might be missing (or configured
differently) when testing Python built from a source release.

files:
A Misc/NEWS.d/next/Tests/2021-11-11-13-56-00.bpo-45783.8k1Rng.rst
M Lib/test/test_tools/test_freeze.py
M Tools/freeze/test/freeze.py

diff --git a/Lib/test/test_tools/test_freeze.py b/Lib/test/test_tools/test_freeze.py
index 392a776f042e4..386c35a973bc2 100644
--- a/Lib/test/test_tools/test_freeze.py
+++ b/Lib/test/test_tools/test_freeze.py
@@ -5,6 +5,7 @@
 import unittest
 
 from test import support
+from test.support import os_helper
 
 from . import imports_under_tool, skip_if_missing
 skip_if_missing('freeze')
@@ -22,8 +23,8 @@ def test_freeze_simple_script(self):
             print('running...')
             sys.exit(0)
             """)
-        outdir, scriptfile, python = helper.prepare(script)
-
-        executable = helper.freeze(python, scriptfile, outdir)
-        text = helper.run(executable)
+        with os_helper.temp_dir() as outdir:
+            outdir, scriptfile, python = helper.prepare(script, outdir)
+            executable = helper.freeze(python, scriptfile, outdir)
+            text = helper.run(executable)
         self.assertEqual(text, 'running...')
diff --git a/Misc/NEWS.d/next/Tests/2021-11-11-13-56-00.bpo-45783.8k1Rng.rst b/Misc/NEWS.d/next/Tests/2021-11-11-13-56-00.bpo-45783.8k1Rng.rst
new file mode 100644
index 0000000000000..cb0e07f27fb55
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2021-11-11-13-56-00.bpo-45783.8k1Rng.rst
@@ -0,0 +1 @@
+The test for the freeze tool now handles file moves and deletions.
diff --git a/Tools/freeze/test/freeze.py b/Tools/freeze/test/freeze.py
index 387f1ff70b234..db2aa3101d879 100644
--- a/Tools/freeze/test/freeze.py
+++ b/Tools/freeze/test/freeze.py
@@ -11,7 +11,6 @@
 SRCDIR = os.path.dirname(os.path.dirname(TOOL_ROOT))
 
 MAKE = shutil.which('make')
-GIT = shutil.which('git')
 FREEZE = os.path.join(TOOL_ROOT, 'freeze.py')
 OUTDIR = os.path.join(TESTS_DIR, 'outdir')
 
@@ -75,36 +74,15 @@ def ensure_opt(args, name, value):
             args[pos] = f'{opt}={value}'
 
 
-def git_copy_repo(newroot, oldroot):
-    if not GIT:
-        raise UnsupportedError('git')
-
+def copy_source_tree(newroot, oldroot):
+    print(f'copying the source tree into {newroot}...')
     if os.path.exists(newroot):
-        print(f'updating copied repo {newroot}...')
         if newroot == SRCDIR:
             raise Exception('this probably isn\'t what you wanted')
-        _run_quiet([GIT, 'clean', '-d', '-f'], newroot)
-        _run_quiet([GIT, 'reset'], newroot)
-        _run_quiet([GIT, 'checkout', '.'], newroot)
-        _run_quiet([GIT, 'pull', '-f', oldroot], newroot)
-    else:
-        print(f'copying repo into {newroot}...')
-        _run_quiet([GIT, 'clone', oldroot, newroot])
-
-    # Copy over any uncommited files.
-    text = _run_stdout([GIT, 'status', '-s'], oldroot)
-    for line in text.splitlines():
-        _, _, relfile = line.strip().partition(' ')
-        relfile = relfile.strip()
-        isdir = relfile.endswith(os.path.sep)
-        relfile = relfile.rstrip(os.path.sep)
-        srcfile = os.path.join(oldroot, relfile)
-        dstfile = os.path.join(newroot, relfile)
-        os.makedirs(os.path.dirname(dstfile), exist_ok=True)
-        if isdir:
-            shutil.copytree(srcfile, dstfile, dirs_exist_ok=True)
-        else:
-            shutil.copy2(srcfile, dstfile)
+        shutil.rmtree(newroot)
+    shutil.copytree(oldroot, newroot)
+    if os.path.exists(os.path.join(newroot, 'Makefile')):
+        _run_quiet([MAKE, 'clean'], newroot)
 
 
 def get_makefile_var(builddir, name):
@@ -146,12 +124,14 @@ def prepare(script=None, outdir=None):
     # Write the script to disk.
     if script:
         scriptfile = os.path.join(outdir, 'app.py')
+        print(f'creating the script to be frozen at {scriptfile}')
         with open(scriptfile, 'w') as outfile:
             outfile.write(script)
 
-    # Make a copy of the repo to avoid affecting the current build.
+    # Make a copy of the repo to avoid affecting the current build
+    # (e.g. changing PREFIX).
     srcdir = os.path.join(outdir, 'cpython')
-    git_copy_repo(srcdir, SRCDIR)
+    copy_source_tree(srcdir, SRCDIR)
 
     # We use an out-of-tree build (instead of srcdir).
     builddir = os.path.join(outdir, 'python-build')
@@ -172,7 +152,7 @@ def prepare(script=None, outdir=None):
         raise UnsupportedError('make')
 
     # Build python.
-    print('building python...')
+    print(f'building python in {builddir}...')
     if os.path.exists(os.path.join(srcdir, 'Makefile')):
         # Out-of-tree builds require a clean srcdir.
         _run_quiet([MAKE, '-C', srcdir, 'clean'])



More information about the Python-checkins mailing list