summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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