mirror of https://github.com/pypa/pip
Include subdirectory URL fragment in the cache key
This commit is contained in:
parent
6c04feff1d
commit
613cc01c0b
|
@ -0,0 +1 @@
|
|||
Include ``subdirectory`` URL fragments in cache keys.
|
|
@ -58,6 +58,10 @@ class Cache(object):
|
|||
key_parts = [link.url_without_fragment]
|
||||
if link.hash_name is not None and link.hash is not None:
|
||||
key_parts.append("=".join([link.hash_name, link.hash]))
|
||||
if link.subdirectory_fragment:
|
||||
key_parts.append(
|
||||
"=".join(["subdirectory", link.subdirectory_fragment])
|
||||
)
|
||||
key_url = "#".join(key_parts)
|
||||
|
||||
# Encode our key url with sha224, we'll use this because it has similar
|
||||
|
@ -168,11 +172,17 @@ class SimpleWheelCache(Cache):
|
|||
# type: (...) -> Link
|
||||
candidates = []
|
||||
|
||||
canonical_package_name = None
|
||||
if package_name:
|
||||
canonical_package_name = canonicalize_name(package_name)
|
||||
for wheel_name in self._get_candidates(link, package_name):
|
||||
try:
|
||||
wheel = Wheel(wheel_name)
|
||||
except InvalidWheelFilename:
|
||||
continue
|
||||
assert canonical_package_name
|
||||
if wheel.name != canonical_package_name:
|
||||
continue
|
||||
if not wheel.supported(supported_tags):
|
||||
# Built for a different python/arch/etc
|
||||
continue
|
||||
|
|
|
@ -1,13 +1,44 @@
|
|||
import os
|
||||
|
||||
from pip._internal.cache import WheelCache
|
||||
from pip._internal.models.format_control import FormatControl
|
||||
from pip._internal.models.link import Link
|
||||
from pip._internal.utils.compat import expanduser
|
||||
from pip._internal.utils.misc import ensure_dir
|
||||
|
||||
|
||||
class TestWheelCache:
|
||||
def test_expands_path():
|
||||
wc = WheelCache("~/.foo/", None)
|
||||
assert wc.cache_dir == expanduser("~/.foo/")
|
||||
|
||||
def test_expands_path(self):
|
||||
wc = WheelCache("~/.foo/", None)
|
||||
assert wc.cache_dir == expanduser("~/.foo/")
|
||||
|
||||
def test_falsey_path_none(self):
|
||||
wc = WheelCache(False, None)
|
||||
assert wc.cache_dir is None
|
||||
def test_falsey_path_none():
|
||||
wc = WheelCache(False, None)
|
||||
assert wc.cache_dir is None
|
||||
|
||||
|
||||
def test_subdirectory_fragment():
|
||||
"""
|
||||
Test the subdirectory URL fragment is part of the cache key.
|
||||
"""
|
||||
wc = WheelCache("~/.foo/", None)
|
||||
link1 = Link("git+https://g.c/o/r#subdirectory=d1")
|
||||
link2 = Link("git+https://g.c/o/r#subdirectory=d2")
|
||||
assert wc.get_path_for_link(link1) != wc.get_path_for_link(link2)
|
||||
|
||||
|
||||
def test_wheel_name_filter(tmpdir):
|
||||
"""
|
||||
Test the wheel cache filters on wheel name when several wheels
|
||||
for different package are stored under the same cache directory.
|
||||
"""
|
||||
wc = WheelCache(tmpdir, FormatControl())
|
||||
link = Link("https://g.c/package.tar.gz")
|
||||
cache_path = wc.get_path_for_link(link)
|
||||
ensure_dir(cache_path)
|
||||
with open(os.path.join(cache_path, "package-1.0-py3-none-any.whl"), "w"):
|
||||
pass
|
||||
# package matches wheel name
|
||||
assert wc.get(link, "package", [("py3", "none", "any")]) is not link
|
||||
# package2 does not match wheel name
|
||||
assert wc.get(link, "package2", [("py3", "none", "any")]) is link
|
||||
|
|
Loading…
Reference in New Issue