From 980817575a694419198a7ac2e3995a42c8c01b68 Mon Sep 17 00:00:00 2001 From: healther Date: Thu, 7 Jun 2018 19:33:38 +0200 Subject: 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" --- lib/spack/spack/cmd/clean.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/spack/spack/cmd/clean.py b/lib/spack/spack/cmd/clean.py index fd122714a9..b61a02adb0 100644 --- a/lib/spack/spack/cmd/clean.py +++ b/lib/spack/spack/cmd/clean.py @@ -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.caches 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 @@ level = "long" 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) -- cgit v1.2.3-60-g2f50