From c724e26ba98a0577f040ed4691a36a44a3c2ea5f Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Tue, 7 Jun 2022 14:12:08 -0700 Subject: [PATCH] Staging: determine extensions from nonstandard URLs (#31027) Fixes #31021 With #25185, we no longer default to using tar when we can't determine the extension type, opting to fail instead. This broke fetching for the pcre package, where we couldn't determine the extension. To determine the extension, we were attempting to extract it from the destination filename; however, this file name may omit details of the origin URL that are required to determine the extension, so instead we examine the URL directly. This also updates the decompressor_for method not to set ext=None by default: it must now always be set by the caller. --- lib/spack/spack/fetch_strategy.py | 2 +- lib/spack/spack/util/compression.py | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/spack/spack/fetch_strategy.py b/lib/spack/spack/fetch_strategy.py index aaec9a40cd0..bd7331e1a13 100644 --- a/lib/spack/spack/fetch_strategy.py +++ b/lib/spack/spack/fetch_strategy.py @@ -521,7 +521,7 @@ def expand(self): "Failed on expand() for URL %s" % self.url) if not self.extension: - self.extension = extension(self.archive_file) + self.extension = extension(self.url) if self.stage.expanded: tty.debug('Source already staged to %s' % self.stage.source_path) diff --git a/lib/spack/spack/util/compression.py b/lib/spack/spack/util/compression.py index 9a8eda0c913..18c0a9ea5e2 100644 --- a/lib/spack/spack/util/compression.py +++ b/lib/spack/spack/util/compression.py @@ -246,7 +246,7 @@ def _7zip(archive_file): return outfile -def decompressor_for(path, ext=None): +def decompressor_for(path, ext): """Returns a function pointer to appropriate decompression algorithm based on extension type. @@ -254,9 +254,6 @@ def decompressor_for(path, ext=None): path (str): path of the archive file requiring decompression ext (str): Extension of archive file """ - if not ext: - ext = extension(path) - if not allowed_archive(ext): raise CommandNotFoundError("Cannot extract archive, \ unrecognized file extension: '%s'" % ext)