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:
parent
1d3ad6ea7e
commit
980817575a
@ -23,6 +23,8 @@
|
|||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
|
|
||||||
@ -30,6 +32,7 @@
|
|||||||
import spack.cmd
|
import spack.cmd
|
||||||
import spack.repo
|
import spack.repo
|
||||||
import spack.stage
|
import spack.stage
|
||||||
|
from spack.paths import spack_root
|
||||||
|
|
||||||
description = "remove temporary build files and/or downloaded archives"
|
description = "remove temporary build files and/or downloaded archives"
|
||||||
section = "build"
|
section = "build"
|
||||||
@ -37,9 +40,9 @@
|
|||||||
|
|
||||||
|
|
||||||
class AllClean(argparse.Action):
|
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):
|
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):
|
def setup_parser(subparser):
|
||||||
@ -52,6 +55,9 @@ def setup_parser(subparser):
|
|||||||
subparser.add_argument(
|
subparser.add_argument(
|
||||||
'-m', '--misc-cache', action='store_true',
|
'-m', '--misc-cache', action='store_true',
|
||||||
help="remove long-lived caches, like the virtual package index")
|
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(
|
subparser.add_argument(
|
||||||
'-a', '--all', action=AllClean, help="equivalent to -sdm", nargs=0
|
'-a', '--all', action=AllClean, help="equivalent to -sdm", nargs=0
|
||||||
)
|
)
|
||||||
@ -63,9 +69,9 @@ def setup_parser(subparser):
|
|||||||
|
|
||||||
|
|
||||||
def clean(parser, args):
|
def clean(parser, args):
|
||||||
|
|
||||||
# If nothing was set, activate the default
|
# 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
|
args.stage = True
|
||||||
|
|
||||||
# Then do the cleaning falling through the cases
|
# Then do the cleaning falling through the cases
|
||||||
@ -88,3 +94,17 @@ def clean(parser, args):
|
|||||||
if args.misc_cache:
|
if args.misc_cache:
|
||||||
tty.msg('Removing cached information on repositories')
|
tty.msg('Removing cached information on repositories')
|
||||||
spack.caches.misc_cache.destroy()
|
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)
|
||||||
|
Loading…
Reference in New Issue
Block a user