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:
		| @@ -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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 healther
					healther