Skip to content

Commit

Permalink
gh-89792: Prevent test_tools from copying 1000M of "source" in freeze…
Browse files Browse the repository at this point in the history
… test (#101837)

Prevent test_tools from copying 1000M of "source"
    
It doesn't need a git repo, just the checkout.  We skip .git metadata, Doc/build, Doc/venv, and `__pycache__` subdirs, that developers often have in their clients to reduce the size of the source tree copy ten-fold.

This should significantly reduce IO and presumably time on buildbots during this long test.
  • Loading branch information
gpshead committed Feb 12, 2023
1 parent 3eb12df commit 1d19423
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
``test_tools`` now copies up to 10x less source data to a temporary
directory during the ``freeze`` test by ignoring git metadata and other
artifacts.
14 changes: 13 additions & 1 deletion Tools/freeze/test/freeze.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,19 @@ def copy_source_tree(newroot, oldroot):
if newroot == SRCDIR:
raise Exception('this probably isn\'t what you wanted')
shutil.rmtree(newroot)
shutil.copytree(oldroot, newroot)

def ignore_non_src(src, names):
"""Turns what could be a 1000M copy into a 100M copy."""
# Don't copy the ~600M+ of needless git repo metadata.
# source only, ignore cached .pyc files.
subdirs_to_skip = {'.git', '__pycache__'}
if os.path.basename(src) == 'Doc':
# Another potential ~250M+ of non test related data.
subdirs_to_skip.add('build')
subdirs_to_skip.add('venv')
return subdirs_to_skip

shutil.copytree(oldroot, newroot, ignore=ignore_non_src)
if os.path.exists(os.path.join(newroot, 'Makefile')):
_run_quiet([MAKE, 'clean'], newroot)

Expand Down

0 comments on commit 1d19423

Please sign in to comment.