From 67f2d64a3f57e81564549042bcf2111baa0416ed Mon Sep 17 00:00:00 2001 From: Harmen Stoppels Date: Fri, 15 Jul 2022 18:43:14 +0200 Subject: Use lexists instead of exists during fetch (#31509) --- lib/spack/spack/fetch_strategy.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/spack/spack/fetch_strategy.py b/lib/spack/spack/fetch_strategy.py index 378209308f..339d805712 100644 --- a/lib/spack/spack/fetch_strategy.py +++ b/lib/spack/spack/fetch_strategy.py @@ -327,9 +327,7 @@ class URLFetchStrategy(FetchStrategy): continue try: - partial_file, save_file = self._fetch_from_url(url) - if save_file and (partial_file is not None): - llnl.util.filesystem.rename(partial_file, save_file) + self._fetch_from_url(url) break except FailedDownloadError as e: errors.append(str(e)) @@ -379,9 +377,7 @@ class URLFetchStrategy(FetchStrategy): @_needs_stage def _fetch_urllib(self, url): - save_file = None - if self.stage.save_filename: - save_file = self.stage.save_filename + save_file = self.stage.save_filename tty.msg('Fetching {0}'.format(url)) # Run urllib but grab the mime type from the http headers @@ -391,16 +387,18 @@ class URLFetchStrategy(FetchStrategy): # clean up archive on failure. if self.archive_file: os.remove(self.archive_file) - if save_file and os.path.exists(save_file): + if os.path.lexists(save_file): os.remove(save_file) msg = 'urllib failed to fetch with error {0}'.format(e) raise FailedDownloadError(url, msg) + if os.path.lexists(save_file): + os.remove(save_file) + with open(save_file, 'wb') as _open_file: shutil.copyfileobj(response, _open_file) self._check_headers(str(headers)) - return None, save_file @_needs_stage def _fetch_curl(self, url): @@ -461,7 +459,7 @@ class URLFetchStrategy(FetchStrategy): if self.archive_file: os.remove(self.archive_file) - if partial_file and os.path.exists(partial_file): + if partial_file and os.path.lexists(partial_file): os.remove(partial_file) if curl.returncode == 22: @@ -488,7 +486,9 @@ class URLFetchStrategy(FetchStrategy): "Curl failed with error %d" % curl.returncode) self._check_headers(headers) - return partial_file, save_file + + if save_file and (partial_file is not None): + fs.rename(partial_file, save_file) @property # type: ignore # decorated properties unsupported in mypy @_needs_stage @@ -642,7 +642,7 @@ class CacheURLFetchStrategy(URLFetchStrategy): # remove old symlink if one is there. filename = self.stage.save_filename - if os.path.exists(filename): + if os.path.lexists(filename): os.remove(filename) # Symlink to local cached archive. -- cgit v1.2.3-70-g09d2