diff --git a/crates/uv/tests/pip_compile.rs b/crates/uv/tests/pip_compile.rs index 82360443a..de40cc531 100644 --- a/crates/uv/tests/pip_compile.rs +++ b/crates/uv/tests/pip_compile.rs @@ -3901,6 +3901,58 @@ fn find_links_requirements_txt() -> Result<()> { Ok(()) } +/// `extras==0.0.2` fails to build (i.e., it always throws). Since `extras==0.0.1` is pinned, we +/// should never even attempt to build `extras==0.0.2`, despite an unpinned `extras[dev]` +/// requirement. +/// +/// This resolution should succeed, but currently fails. +#[test] +fn avoid_irrelevant_extras() -> Result<()> { + let context = TestContext::new("3.12"); + let requirements_in = context.temp_dir.child("requirements.in"); + requirements_in.write_str(indoc! {r" + extras==0.0.1 + extras[dev] + "})?; + + let filters = std::iter::once((r"exit code: 1", "exit status: 1")) + .chain(context.filters()) + .collect::>(); + + uv_snapshot!(filters, context.compile() + .arg("requirements.in") + .arg("--find-links") + .arg(context.workspace_root.join("scripts").join("links")), @r###" + success: false + exit_code: 2 + ----- stdout ----- + + ----- stderr ----- + error: Failed to download and build: extras==0.0.2 + Caused by: Failed to build: extras==0.0.2 + Caused by: Build backend failed to determine extra requires with `build_wheel()` with exit status: 1 + --- stdout: + + --- stderr: + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/[TMP]/build_meta.py", line 487, in run_setup + super().run_setup(setup_script=setup_script) + File "[CACHE_DIR]/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 3, in + ZeroDivisionError: division by zero + --- + "###); + + Ok(()) +} + /// Use an existing resolution for `black==23.10.1`, with stale versions of `click` and `pathspec`. /// Nothing should change. #[test] diff --git a/scripts/links/extras-0.0.1.tar.gz b/scripts/links/extras-0.0.1.tar.gz new file mode 100644 index 000000000..4672622a8 Binary files /dev/null and b/scripts/links/extras-0.0.1.tar.gz differ diff --git a/scripts/links/extras-0.0.2.tar.gz b/scripts/links/extras-0.0.2.tar.gz new file mode 100644 index 000000000..38df28bce Binary files /dev/null and b/scripts/links/extras-0.0.2.tar.gz differ