add python cache removal to spack clean (#8419)

Remove .pyc and .pyo files along with __pycache__directory if the user provides
the -p/--python-cache option to "spack clean"
This commit is contained in:
healther 2018-06-07 19:33:38 +02:00 committed by scheibelp
parent 1d3ad6ea7e
commit 980817575a

View File

@ -23,6 +23,8 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import argparse
import os
import shutil
import llnl.util.tty as tty
@ -30,6 +32,7 @@
import spack.cmd
import spack.repo
import spack.stage
from spack.paths import spack_root
description = "remove temporary build files and/or downloaded archives"
section = "build"
@ -37,9 +40,9 @@
class AllClean(argparse.Action):
"""Activates flags -s -d and -m simultaneously"""
"""Activates flags -s -d -m and -p simultaneously"""
def __call__(self, parser, namespace, values, option_string=None):
parser.parse_args(['-sdm'], namespace=namespace)
parser.parse_args(['-sdmp'], namespace=namespace)
def setup_parser(subparser):
@ -52,6 +55,9 @@ def setup_parser(subparser):
subparser.add_argument(
'-m', '--misc-cache', action='store_true',
help="remove long-lived caches, like the virtual package index")
subparser.add_argument(
'-p', '--python-cache', action='store_true',
help="remove .pyc, .pyo files and __pycache__ folders")
subparser.add_argument(
'-a', '--all', action=AllClean, help="equivalent to -sdm", nargs=0
)
@ -63,9 +69,9 @@ def setup_parser(subparser):
def clean(parser, args):
# If nothing was set, activate the default
if not any([args.specs, args.stage, args.downloads, args.misc_cache]):
if not any([args.specs, args.stage, args.downloads, args.misc_cache,
args.python_cache]):
args.stage = True
# Then do the cleaning falling through the cases
@ -88,3 +94,17 @@ def clean(parser, args):
if args.misc_cache:
tty.msg('Removing cached information on repositories')
spack.caches.misc_cache.destroy()
if args.python_cache:
tty.msg('Removing python cache files')
for root, dirs, files in os.walk(spack_root):
for f in files:
if f.endswith('.pyc') or f.endswith('.pyo'):
fname = os.path.join(root, f)
tty.debug('Removing {0}'.format(fname))
os.remove(fname)
for d in dirs:
if d == '__pycache__':
dname = os.path.join(root, d)
tty.debug('Removing {0}'.format(dname))
shutil.rmtree(dname)