Add spack purge --cache to purge local archive cache.

This commit is contained in:
Todd Gamblin 2016-06-29 01:41:55 -07:00
parent bc1320d83a
commit c996632113
3 changed files with 30 additions and 4 deletions

1
.gitignore vendored
View file

@ -1,4 +1,5 @@
/var/spack/stage /var/spack/stage
/var/spack/cache
*.pyc *.pyc
/opt/ /opt/
*~ *~

View file

@ -22,9 +22,31 @@
# License along with this program; if not, write to the Free Software # License along with this program; if not, write to the Free Software
# 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 spack
import spack.stage as stage import spack.stage as stage
description = "Remove all temporary build files and downloaded archives" description = "Remove temporary build files and/or downloaded archives"
def setup_parser(subparser):
subparser.add_argument(
'-s', '--stage', action='store_true', default=True,
help="Remove all temporary build stages (default).")
subparser.add_argument(
'-c', '--cache', action='store_true', help="Remove cached downloads.")
subparser.add_argument(
'-a', '--all', action='store_true',
help="Remove all of the above.")
def purge(parser, args): def purge(parser, args):
stage.purge() # Special case: no flags.
if not any((args.stage, args.cache, args.all)):
stage.purge()
return
# handle other flags with fall through.
if args.stage or args.all:
stage.purge()
if args.cache or args.all:
spack.cache.destroy()

View file

@ -361,7 +361,7 @@ class CacheURLFetchStrategy(URLFetchStrategy):
"""The resource associated with a cache URL may be out of date.""" """The resource associated with a cache URL may be out of date."""
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(CacheURLFetchStrategy, self).__init__(*args, **kwargs) super(CacheURLFetchStrategy, self).__init__(*args, **kwargs)
@_needs_stage @_needs_stage
def fetch(self): def fetch(self):
super(CacheURLFetchStrategy, self).fetch() super(CacheURLFetchStrategy, self).fetch()
@ -853,11 +853,14 @@ def store(self, fetcher, relativeDst):
dst = join_path(self.root, relativeDst) dst = join_path(self.root, relativeDst)
mkdirp(os.path.dirname(dst)) mkdirp(os.path.dirname(dst))
fetcher.archive(dst) fetcher.archive(dst)
def fetcher(self, targetPath, digest): def fetcher(self, targetPath, digest):
url = "file://" + join_path(self.root, targetPath) url = "file://" + join_path(self.root, targetPath)
return CacheURLFetchStrategy(url, digest) return CacheURLFetchStrategy(url, digest)
def destroy(self):
shutil.rmtree(self.root, ignore_errors=True)
class FetchError(spack.error.SpackError): class FetchError(spack.error.SpackError):