summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam J. Stewart <ajstewart426@gmail.com>2021-07-03 00:20:09 -0500
committerGreg Becker <becker33@llnl.gov>2021-09-21 16:58:41 -0700
commit9120856c01bae7d57867e7b05fb7b292ed3ccacb (patch)
treebe21c339eef59943d85719b2e900e5f08fdb92a9
parentc699e907fc436ecc2b153520040e5967f25dc7de (diff)
downloadspack-9120856c01bae7d57867e7b05fb7b292ed3ccacb.tar.gz
spack-9120856c01bae7d57867e7b05fb7b292ed3ccacb.tar.bz2
spack-9120856c01bae7d57867e7b05fb7b292ed3ccacb.tar.xz
spack-9120856c01bae7d57867e7b05fb7b292ed3ccacb.zip
Fix fetching for Python 3.9.6 (#24686)
When using Python 3.9.6, Spack is no longer able to fetch anything. Commands like `spack fetch` and `spack install` all break. Python 3.9.6 includes a [new change](https://github.com/python/cpython/pull/25853/files#diff-b3712475a413ec972134c0260c8f1eb1deefb66184f740ef00c37b4487ef873eR462) that means that `scheme` must be a string, it cannot be None. The solution is to use an empty string like the method default. Fixes #24644. Also see https://github.com/Homebrew/homebrew-core/pull/80175 where this issue was discovered by CI. Thanks @branchvincent for reporting such a serious issue before any actual users encountered it! Co-authored-by: Todd Gamblin <tgamblin@llnl.gov>
-rw-r--r--lib/spack/spack/util/url.py12
1 files changed, 6 insertions, 6 deletions
diff --git a/lib/spack/spack/util/url.py b/lib/spack/spack/util/url.py
index ab5503229f..3a3e0dfec7 100644
--- a/lib/spack/spack/util/url.py
+++ b/lib/spack/spack/util/url.py
@@ -11,8 +11,8 @@ import itertools
import os.path
import re
-from six import string_types
import six.moves.urllib.parse as urllib_parse
+from six import string_types
import spack.util.path
@@ -151,21 +151,21 @@ def join(base_url, path, *extra, **kwargs):
for x in itertools.chain((base_url, path), extra)]
n = len(paths)
last_abs_component = None
- scheme = None
+ scheme = ''
for i in range(n - 1, -1, -1):
obj = urllib_parse.urlparse(
- paths[i], scheme=None, allow_fragments=False)
+ paths[i], scheme='', allow_fragments=False)
scheme = obj.scheme
# in either case the component is absolute
- if scheme is not None or obj.path.startswith('/'):
- if scheme is None:
+ if scheme or obj.path.startswith('/'):
+ if not scheme:
# Without a scheme, we have to go back looking for the
# next-last component that specifies a scheme.
for j in range(i - 1, -1, -1):
obj = urllib_parse.urlparse(
- paths[j], scheme=None, allow_fragments=False)
+ paths[j], scheme='', allow_fragments=False)
if obj.scheme:
paths[i] = '{SM}://{NL}{PATH}'.format(