diff --git a/crates/uv/tests/pip_compile.rs b/crates/uv/tests/pip_compile.rs index e89ad8ec0cc5..45b00bb84a94 100644 --- a/crates/uv/tests/pip_compile.rs +++ b/crates/uv/tests/pip_compile.rs @@ -3901,6 +3901,55 @@ 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] + "})?; + + uv_snapshot!(context.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/editables-0.5.tar.gz b/scripts/links/editables-0.5.tar.gz new file mode 100644 index 000000000000..6a1e8ce42703 Binary files /dev/null and b/scripts/links/editables-0.5.tar.gz differ 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 000000000000..4672622a8dae 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 000000000000..38df28bce37e Binary files /dev/null and b/scripts/links/extras-0.0.2.tar.gz differ diff --git a/scripts/packages/setup_py_editable/build/lib/setup_py_editable/__init__.py b/scripts/packages/setup_py_editable/build/lib/setup_py_editable/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/scripts/packages/setup_py_editable/dist/extras-0.0.1.tar.gz b/scripts/packages/setup_py_editable/dist/extras-0.0.1.tar.gz new file mode 100644 index 000000000000..4672622a8dae Binary files /dev/null and b/scripts/packages/setup_py_editable/dist/extras-0.0.1.tar.gz differ diff --git a/scripts/packages/setup_py_editable/dist/extras-0.0.1/PKG-INFO b/scripts/packages/setup_py_editable/dist/extras-0.0.1/PKG-INFO new file mode 100644 index 000000000000..c9c760bf7b39 --- /dev/null +++ b/scripts/packages/setup_py_editable/dist/extras-0.0.1/PKG-INFO @@ -0,0 +1,4 @@ +Metadata-Version: 2.1 +Name: extras +Version: 0.0.1 +Provides-Extra: dev diff --git a/scripts/packages/setup_py_editable/dist/extras-0.0.1/extras/__init__.py b/scripts/packages/setup_py_editable/dist/extras-0.0.1/extras/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/scripts/packages/setup_py_editable/dist/extras-0.0.1/setup.cfg b/scripts/packages/setup_py_editable/dist/extras-0.0.1/setup.cfg new file mode 100644 index 000000000000..8bfd5a12f85b --- /dev/null +++ b/scripts/packages/setup_py_editable/dist/extras-0.0.1/setup.cfg @@ -0,0 +1,4 @@ +[egg_info] +tag_build = +tag_date = 0 + diff --git a/scripts/packages/setup_py_editable/dist/extras-0.0.1/setup.py b/scripts/packages/setup_py_editable/dist/extras-0.0.1/setup.py new file mode 100644 index 000000000000..fc7356e572c7 --- /dev/null +++ b/scripts/packages/setup_py_editable/dist/extras-0.0.1/setup.py @@ -0,0 +1,12 @@ +from setuptools import setup + +setup( + name="extras", + version="0.0.1", + install_requires=[ + "iniconfig", + ], + extras_require={ + "dev": ["anyio"], + } +) diff --git a/scripts/packages/setup_py_editable/dist/extras-0.0.2.tar.gz b/scripts/packages/setup_py_editable/dist/extras-0.0.2.tar.gz new file mode 100644 index 000000000000..38df28bce37e Binary files /dev/null and b/scripts/packages/setup_py_editable/dist/extras-0.0.2.tar.gz differ diff --git a/scripts/packages/setup_py_editable/dist/extras-0.0.2/PKG-INFO b/scripts/packages/setup_py_editable/dist/extras-0.0.2/PKG-INFO new file mode 100644 index 000000000000..024de22145c2 --- /dev/null +++ b/scripts/packages/setup_py_editable/dist/extras-0.0.2/PKG-INFO @@ -0,0 +1,4 @@ +Metadata-Version: 2.1 +Name: extras +Version: 0.0.2 +Provides-Extra: dev diff --git a/scripts/packages/setup_py_editable/dist/extras-0.0.2/extras/__init__.py b/scripts/packages/setup_py_editable/dist/extras-0.0.2/extras/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/scripts/packages/setup_py_editable/dist/extras-0.0.2/setup.cfg b/scripts/packages/setup_py_editable/dist/extras-0.0.2/setup.cfg new file mode 100644 index 000000000000..8bfd5a12f85b --- /dev/null +++ b/scripts/packages/setup_py_editable/dist/extras-0.0.2/setup.cfg @@ -0,0 +1,4 @@ +[egg_info] +tag_build = +tag_date = 0 + diff --git a/scripts/packages/setup_py_editable/dist/extras-0.0.2/setup.py b/scripts/packages/setup_py_editable/dist/extras-0.0.2/setup.py new file mode 100644 index 000000000000..6124ea50a8aa --- /dev/null +++ b/scripts/packages/setup_py_editable/dist/extras-0.0.2/setup.py @@ -0,0 +1,14 @@ +from setuptools import setup + +1/0 + +setup( + name="extras", + version="0.0.2", + install_requires=[ + "httpx", + ], + extras_require={ + "dev": ["anyio"], + } +) diff --git a/scripts/packages/setup_py_editable/dist/setup-py-editable-0.0.1/PKG-INFO b/scripts/packages/setup_py_editable/dist/setup-py-editable-0.0.1/PKG-INFO new file mode 100644 index 000000000000..fd7901439977 --- /dev/null +++ b/scripts/packages/setup_py_editable/dist/setup-py-editable-0.0.1/PKG-INFO @@ -0,0 +1,4 @@ +Metadata-Version: 2.1 +Name: setup-py-editable +Version: 0.0.1 +Provides-Extra: dev diff --git a/scripts/packages/setup_py_editable/dist/setup-py-editable-0.0.1/setup.cfg b/scripts/packages/setup_py_editable/dist/setup-py-editable-0.0.1/setup.cfg new file mode 100644 index 000000000000..8bfd5a12f85b --- /dev/null +++ b/scripts/packages/setup_py_editable/dist/setup-py-editable-0.0.1/setup.cfg @@ -0,0 +1,4 @@ +[egg_info] +tag_build = +tag_date = 0 + diff --git a/scripts/packages/setup_py_editable/dist/setup-py-editable-0.0.1/setup.py b/scripts/packages/setup_py_editable/dist/setup-py-editable-0.0.1/setup.py new file mode 100644 index 000000000000..8f7e3ce83a68 --- /dev/null +++ b/scripts/packages/setup_py_editable/dist/setup-py-editable-0.0.1/setup.py @@ -0,0 +1,12 @@ +from setuptools import setup + +setup( + name="setup-py-editable", + version="0.0.1", + install_requires=[ + "httpx", + ], + extras_require={ + 'dev': ['anyio'], + } +) diff --git a/scripts/packages/setup_py_editable/dist/setup-py-editable-0.0.1/setup_py_editable/__init__.py b/scripts/packages/setup_py_editable/dist/setup-py-editable-0.0.1/setup_py_editable/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/scripts/packages/setup_py_editable/extras-0.0.2.tar.gz b/scripts/packages/setup_py_editable/extras-0.0.2.tar.gz new file mode 100644 index 000000000000..10b3c1fb3a45 Binary files /dev/null and b/scripts/packages/setup_py_editable/extras-0.0.2.tar.gz differ diff --git a/scripts/packages/setup_py_editable/setup.py b/scripts/packages/setup_py_editable/setup.py index 6308361a3434..8f7e3ce83a68 100644 --- a/scripts/packages/setup_py_editable/setup.py +++ b/scripts/packages/setup_py_editable/setup.py @@ -6,4 +6,7 @@ install_requires=[ "httpx", ], + extras_require={ + 'dev': ['anyio'], + } )