diff options
author | Eric Snow <ericsnowcurrently@gmail.com> | 2021-11-23 13:43:40 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-23 13:43:40 (GMT) |
commit | 8ed1495ad900dd815ff8fb97926da5312aaa23f9 (patch) | |
tree | 809effba278ac5513f1073b662da77f7e50301f1 /Tools/freeze | |
parent | b48ac6fe38b2fca9963b097c04cdecfc6083104e (diff) | |
download | cpython-8ed1495ad900dd815ff8fb97926da5312aaa23f9.zip cpython-8ed1495ad900dd815ff8fb97926da5312aaa23f9.tar.gz cpython-8ed1495ad900dd815ff8fb97926da5312aaa23f9.tar.bz2 |
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.
Diffstat (limited to 'Tools/freeze')
-rw-r--r-- | Tools/freeze/test/freeze.py | 42 |
1 files changed, 11 insertions, 31 deletions
diff --git a/Tools/freeze/test/freeze.py b/Tools/freeze/test/freeze.py index 387f1ff..db2aa31 100644 --- a/Tools/freeze/test/freeze.py +++ b/Tools/freeze/test/freeze.py @@ -11,7 +11,6 @@ TOOL_ROOT = os.path.dirname(TESTS_DIR) 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']) |