Mirrors: skip attempts to fetch BundlePackages

BundlePackages use a noop fetch strategy. The mirror logic was assuming
that the fetcher had a resource to cach after performing a fetch. This adds
a special check to skip caching if the stage is associated with a
BundleFetchStrategy. Note that this should allow caching resources
associated with BundlePackages.
This commit is contained in:
Peter Josef Scheibel 2019-11-26 19:50:06 -08:00 committed by Todd Gamblin
parent d71428622b
commit 587c650b88
No known key found for this signature in database
GPG key ID: 66B24B9050FDD0B8

View file

@ -492,6 +492,16 @@ def cache_local(self):
def cache_mirror(self, stats): def cache_mirror(self, stats):
"""Perform a fetch if the resource is not already cached""" """Perform a fetch if the resource is not already cached"""
if isinstance(self.default_fetcher, fs.BundleFetchStrategy):
# BundleFetchStrategy has no source to fetch. The associated
# fetcher does nothing but the associated stage may still exist.
# There is currently no method available on the fetcher to
# distinguish this ('cachable' refers to whether the fetcher
# refers to a resource with a fixed ID, which is not the same
# concept as whether there is anything to fetch at all) so we
# must examine the type of the fetcher.
return
dst_root = spack.caches.mirror_cache.root dst_root = spack.caches.mirror_cache.root
absolute_storage_path = os.path.join( absolute_storage_path = os.path.join(
dst_root, self.mirror_paths.storage_path) dst_root, self.mirror_paths.storage_path)