diff --git a/crates/uv/tests/pip_compile_scenarios.rs b/crates/uv/tests/pip_compile_scenarios.rs index c5a920a12..815def6d3 100644 --- a/crates/uv/tests/pip_compile_scenarios.rs +++ b/crates/uv/tests/pip_compile_scenarios.rs @@ -1,7 +1,7 @@ //! DO NOT EDIT //! //! Generated with `./scripts/sync_scenarios.sh` -//! Scenarios from +//! Scenarios from //! #![cfg(all(feature = "python", feature = "pypi", unix))] @@ -27,9 +27,9 @@ fn command(context: &TestContext, python_versions: &[&str]) -> Command { .arg("compile") .arg("requirements.in") .arg("--index-url") - .arg("https://astral-sh.github.io/packse/0.3.14/simple-html/") + .arg("https://astral-sh.github.io/packse/0.3.15/simple-html/") .arg("--find-links") - .arg("https://raw.githubusercontent.com/astral-sh/packse/0.3.14/vendor/links.html") + .arg("https://raw.githubusercontent.com/astral-sh/packse/0.3.15/vendor/links.html") .arg("--cache-dir") .arg(context.cache_dir.path()) .env("VIRTUAL_ENV", context.venv.as_os_str()) diff --git a/crates/uv/tests/pip_install_scenarios.rs b/crates/uv/tests/pip_install_scenarios.rs index ea9cd3f97..12eef71bc 100644 --- a/crates/uv/tests/pip_install_scenarios.rs +++ b/crates/uv/tests/pip_install_scenarios.rs @@ -1,7 +1,7 @@ //! DO NOT EDIT //! //! Generated with `./scripts/sync_scenarios.sh` -//! Scenarios from +//! Scenarios from //! #![cfg(all(feature = "python", feature = "pypi", unix))] @@ -46,9 +46,9 @@ fn command(context: &TestContext) -> Command { .arg("pip") .arg("install") .arg("--index-url") - .arg("https://astral-sh.github.io/packse/0.3.14/simple-html/") + .arg("https://astral-sh.github.io/packse/0.3.15/simple-html/") .arg("--find-links") - .arg("https://raw.githubusercontent.com/astral-sh/packse/0.3.14/vendor/links.html") + .arg("https://raw.githubusercontent.com/astral-sh/packse/0.3.15/vendor/links.html") .arg("--cache-dir") .arg(context.cache_dir.path()) .env("VIRTUAL_ENV", context.venv.as_os_str()) @@ -1258,6 +1258,51 @@ fn transitive_incompatible_with_transitive() { ); } +/// The user requires `a`, which requires two incompatible, existing versions of +/// package `b` +/// +/// ```text +/// transitive-incompatible-versions +/// ├── environment +/// │ └── python3.8 +/// ├── root +/// │ └── requires a==1.0.0 +/// │ └── satisfied by a-1.0.0 +/// └── a +/// └── a-1.0.0 +/// ├── requires b==2.0.0 +/// └── unsatisfied: no versions for package +/// └── requires b==1.0.0 +/// └── unsatisfied: no versions for package +/// ``` +#[test] +fn transitive_incompatible_versions() { + let context = TestContext::new("3.8"); + + // In addition to the standard filters, swap out package names for shorter messages + let mut filters = context.filters(); + filters.push((r"transitive-incompatible-versions-", "package-")); + + uv_snapshot!(filters, command(&context) + .arg("transitive-incompatible-versions-a==1.0.0") + , @r###" + success: false + exit_code: 1 + ----- stdout ----- + + ----- stderr ----- + × No solution found when resolving dependencies: + ╰─▶ Because package-a==1.0.0 depends on package-b==1.0.0 and package-a==1.0.0 depends on package-b==2.0.0, we can conclude that package-a==1.0.0 cannot be used. + And because you require package-a==1.0.0, we can conclude that the requirements are unsatisfiable. + "###); + + assert_not_installed( + &context.venv, + "transitive_incompatible_versions_a", + &context.temp_dir, + ); +} + /// A simple version constraint should not exclude published versions with local /// segments. /// diff --git a/scripts/scenarios/requirements.txt b/scripts/scenarios/requirements.txt index 1d7df3023..7989f4455 100644 --- a/scripts/scenarios/requirements.txt +++ b/scripts/scenarios/requirements.txt @@ -6,11 +6,11 @@ charset-normalizer==3.3.2 # via requests chevron-blue==0.2.1 # via packse -docutils==0.21.post1 +docutils==0.21.2 # via readme-renderer -hatchling==1.22.5 +hatchling==1.24.2 # via packse -idna==3.6 +idna==3.7 # via requests importlib-metadata==7.1.0 # via twine @@ -18,7 +18,7 @@ jaraco-classes==3.4.0 # via keyring jaraco-context==5.3.0 # via keyring -jaraco-functools==4.0.0 +jaraco-functools==4.0.1 # via keyring keyring==25.1.0 # via twine @@ -36,17 +36,19 @@ nh3==0.2.17 # via readme-renderer packaging==24.0 # via hatchling -packse==0.3.14 +packse==0.3.15 pathspec==0.12.1 # via hatchling pkginfo==1.10.0 # via twine -pluggy==1.4.0 +pluggy==1.5.0 # via hatchling pygments==2.17.2 # via # readme-renderer # rich +pyyaml==6.0.1 + # via packse readme-renderer==43.0 # via twine requests==2.31.0 @@ -59,7 +61,7 @@ rfc3986==2.0.0 # via twine rich==13.7.1 # via twine -setuptools==69.2.0 +setuptools==69.5.1 # via packse trove-classifiers==2024.4.10 # via hatchling