summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPeter Scheibel <scheibel1@llnl.gov>2016-06-06 12:26:13 -0700
committerPeter Scheibel <scheibel1@llnl.gov>2016-06-06 12:26:13 -0700
commitde1ec4be8b0c7bc8c36e88a460e64b3be38cff35 (patch)
treeebb2277356ff92263bb14e9887b1e87bf98831de /lib
parentdd26c0bbcc8d968a6af872f95bc401ab3ce9aaf2 (diff)
downloadspack-de1ec4be8b0c7bc8c36e88a460e64b3be38cff35.tar.gz
spack-de1ec4be8b0c7bc8c36e88a460e64b3be38cff35.tar.bz2
spack-de1ec4be8b0c7bc8c36e88a460e64b3be38cff35.tar.xz
spack-de1ec4be8b0c7bc8c36e88a460e64b3be38cff35.zip
change source archive caching to omit digest from name and instead calculate and compare the checksum. This achieves the original goal of discarding stale cache files without preserving multiple files for the same version.
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/fetch_strategy.py23
-rw-r--r--lib/spack/spack/mirror.py8
-rw-r--r--lib/spack/spack/package.py9
3 files changed, 22 insertions, 18 deletions
diff --git a/lib/spack/spack/fetch_strategy.py b/lib/spack/spack/fetch_strategy.py
index 4bbf7bb34c..fde2a8805e 100644
--- a/lib/spack/spack/fetch_strategy.py
+++ b/lib/spack/spack/fetch_strategy.py
@@ -343,7 +343,7 @@ class URLFetchStrategy(FetchStrategy):
def __repr__(self):
url = self.url if self.url else "no url"
- return "URLFetchStrategy<%s>" % url
+ return "%s<%s>" % (self.__class__.__name__, url)
def __str__(self):
if self.url:
@@ -352,6 +352,25 @@ class URLFetchStrategy(FetchStrategy):
return "[no url]"
+class URLMirrorFetchStrategy(URLFetchStrategy):
+ """The resource associated with a URL at a mirror may be out of date.
+ """
+ def __init__(self, *args, **kwargs):
+ super(URLMirrorFetchStrategy, self).__init__(*args, **kwargs)
+
+ @_needs_stage
+ def fetch(self):
+ super(URLMirrorFetchStrategy, self).fetch()
+ if self.digest:
+ try:
+ self.check()
+ except ChecksumError:
+ # Future fetchers will assume they don't need to download if the
+ # file remains
+ os.remove(self.archive_file)
+ raise
+
+
class VCSFetchStrategy(FetchStrategy):
def __init__(self, name, *rev_types, **kwargs):
super(VCSFetchStrategy, self).__init__()
@@ -816,7 +835,7 @@ class FsCache(object):
def fetcher(self, targetPath, digest):
url = "file://" + join_path(self.root, targetPath)
- return URLFetchStrategy(url, digest)
+ return URLMirrorFetchStrategy(url, digest)
class FetchError(spack.error.SpackError):
diff --git a/lib/spack/spack/mirror.py b/lib/spack/spack/mirror.py
index 81a2f6afb7..0bbcfba6b4 100644
--- a/lib/spack/spack/mirror.py
+++ b/lib/spack/spack/mirror.py
@@ -61,13 +61,7 @@ def mirror_archive_filename(spec, fetcher):
# Otherwise we'll make a .tar.gz ourselves
ext = 'tar.gz'
- tokens = [spec.package.name, spec.version]
- digests = spec.package.digests
- if digests:
- # If a package has multiple digests, any one is sufficient to identify it
- digestType, digest = sorted(digests.iteritems())[0]
- tokens.extend([digestType, digest])
- filename = '-'.join(str(t) for t in tokens)
+ filename = "%s-%s" % (spec.package.name, spec.version)
if ext:
filename += ".%s" % ext
return filename
diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py
index 70ec243726..cbf50e56f6 100644
--- a/lib/spack/spack/package.py
+++ b/lib/spack/spack/package.py
@@ -413,15 +413,6 @@ class Package(object):
raise ValueError("Can only get of package with concrete version.")
return self.spec.versions[0]
- @property
- def digests(self):
- """All digests for the concretized package version."""
- versionInfo = self.versions[self.version]
- digests = {}
- if 'md5' in versionInfo:
- digests['md5'] = versionInfo['md5']
- return digests
-
@memoized
def version_urls(self):
"""Return a list of URLs for different versions of this