From 79b407f59e7a9ef73d95d087c0e2bba31952c643 Mon Sep 17 00:00:00 2001
From: Andreas Baumbach <healther@users.noreply.github.com>
Date: Sun, 15 Jul 2018 02:20:49 +0200
Subject: [PATCH] clean up of spack clean (#8610)

* update help of `clean --all` to include `-p`
* remove old orphaned `.pyc` removal
* restrict removal or orphaned pyc files to `lib/spack` and `var/spack`
---
 bin/spack                    | 24 ------------------------
 lib/spack/spack/cmd/clean.py | 28 +++++++++++++++-------------
 2 files changed, 15 insertions(+), 37 deletions(-)

diff --git a/bin/spack b/bin/spack
index 78f5b7977f..80e47caa1a 100755
--- a/bin/spack
+++ b/bin/spack
@@ -56,30 +56,6 @@ else:
     spack_yaml_libs = os.path.join(spack_external_libs, "yaml/lib3")
 sys.path.insert(0, spack_yaml_libs)
 
-# Quick and dirty check to clean orphaned .pyc files left over from
-# previous revisions.  These files were present in earlier versions of
-# Spack, were removed, but shadow system modules that Spack still
-# imports.  If we leave them, Spack will fail in mysterious ways.
-# TODO: more elegant solution for orphaned pyc files.
-orphaned_pyc_files = [
-    os.path.join(spack_external_libs, 'functools.pyc'),
-    os.path.join(spack_external_libs, 'ordereddict.pyc'),
-    os.path.join(spack_lib_path, 'spack', 'platforms', 'cray_xc.pyc'),
-    os.path.join(spack_lib_path, 'spack', 'cmd', 'package-list.pyc'),
-    os.path.join(spack_lib_path, 'spack', 'cmd', 'test-install.pyc'),
-    os.path.join(spack_lib_path, 'spack', 'cmd', 'url-parse.pyc'),
-    os.path.join(spack_lib_path, 'spack', 'test', 'yaml.pyc')
-]
-
-for pyc_file in orphaned_pyc_files:
-    if not os.path.exists(pyc_file):
-        continue
-    try:
-        os.remove(pyc_file)
-    except OSError as e:
-        print("WARNING: Spack may fail mysteriously. "
-              "Couldn't remove orphaned .pyc file: %s" % pyc_file)
-
 # Once we've set up the system path, run the spack main method
 import spack.main  # noqa
 sys.exit(spack.main.main())
diff --git a/lib/spack/spack/cmd/clean.py b/lib/spack/spack/cmd/clean.py
index b61a02adb0..185a2c406a 100644
--- a/lib/spack/spack/cmd/clean.py
+++ b/lib/spack/spack/cmd/clean.py
@@ -32,7 +32,8 @@
 import spack.cmd
 import spack.repo
 import spack.stage
-from spack.paths import spack_root
+from spack.paths import lib_path, var_path
+
 
 description = "remove temporary build files and/or downloaded archives"
 section = "build"
@@ -59,7 +60,7 @@ def setup_parser(subparser):
         '-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
+        '-a', '--all', action=AllClean, help="equivalent to -sdmp", nargs=0
     )
     subparser.add_argument(
         'specs',
@@ -97,14 +98,15 @@ def clean(parser, args):
 
     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)
+        for directory in [lib_path, var_path]:
+            for root, dirs, files in os.walk(directory):
+                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)
-- 
GitLab