Skip to content

Commit 94bbdfa

Browse files
authored
Merge pull request #9995 from di/fix/9644
Fix issue with installing dependencies with extras & hashes
2 parents 9cf35b2 + 06cd803 commit 94bbdfa

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

news/9644.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix an issue where pip did not consider dependencies with and without extras to be equal

tests/functional/test_new_resolver_hashes.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,64 @@ def test_new_resolver_hash_requirement_and_url_constraint_can_fail(
311311
) in result.stderr, str(result)
312312

313313
script.assert_not_installed("base", "other")
314+
315+
316+
def test_new_resolver_hash_with_extras(script: PipTestEnvironment) -> None:
317+
parent_with_extra_path = create_basic_wheel_for_package(
318+
script, "parent_with_extra", "0.1.0", depends=["child[extra]"]
319+
)
320+
parent_with_extra_hash = hashlib.sha256(
321+
parent_with_extra_path.read_bytes()
322+
).hexdigest()
323+
324+
parent_without_extra_path = create_basic_wheel_for_package(
325+
script, "parent_without_extra", "0.1.0", depends=["child"]
326+
)
327+
parent_without_extra_hash = hashlib.sha256(
328+
parent_without_extra_path.read_bytes()
329+
).hexdigest()
330+
331+
child_path = create_basic_wheel_for_package(
332+
script, "child", "0.1.0", extras={"extra": ["extra"]}
333+
)
334+
child_hash = hashlib.sha256(child_path.read_bytes()).hexdigest()
335+
336+
# Newer release
337+
create_basic_wheel_for_package(
338+
script, "child", "0.2.0", extras={"extra": ["extra"]}
339+
)
340+
341+
extra_path = create_basic_wheel_for_package(script, "extra", "0.1.0")
342+
extra_hash = hashlib.sha256(extra_path.read_bytes()).hexdigest()
343+
344+
requirements_txt = script.scratch_path / "requirements.txt"
345+
requirements_txt.write_text(
346+
"""
347+
child[extra]==0.1.0 --hash=sha256:{child_hash}
348+
parent_with_extra==0.1.0 --hash=sha256:{parent_with_extra_hash}
349+
parent_without_extra==0.1.0 --hash=sha256:{parent_without_extra_hash}
350+
extra==0.1.0 --hash=sha256:{extra_hash}
351+
""".format(
352+
child_hash=child_hash,
353+
parent_with_extra_hash=parent_with_extra_hash,
354+
parent_without_extra_hash=parent_without_extra_hash,
355+
extra_hash=extra_hash,
356+
),
357+
)
358+
359+
script.pip(
360+
"install",
361+
"--no-cache-dir",
362+
"--no-index",
363+
"--find-links",
364+
script.scratch_path,
365+
"--requirement",
366+
requirements_txt,
367+
)
368+
369+
script.assert_installed(
370+
parent_with_extra="0.1.0",
371+
parent_without_extra="0.1.0",
372+
child="0.1.0",
373+
extra="0.1.0",
374+
)

0 commit comments

Comments
 (0)