Skip to content

Commit 14fb435

Browse files
Czakikonstincthoytcharliermarsh
authored andcommitted
do not imply pre-release when != operator is used (#7974)
closes #6640 Could you suggest how I should test it? (already tested locally) --------- Co-authored-by: konstin <[email protected]> Co-authored-by: Charles Tapley Hoyt <[email protected]> Co-authored-by: Charlie Marsh <[email protected]>
1 parent 6858962 commit 14fb435

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

crates/uv-resolver/src/prerelease.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use uv_pypi_types::RequirementSource;
22

3-
use uv_normalize::PackageName;
4-
53
use crate::resolver::ForkSet;
64
use crate::{DependencyMode, Manifest, ResolverMarkers};
5+
use uv_normalize::PackageName;
6+
use uv_pep440::Operator;
77

88
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
99
#[serde(deny_unknown_fields, rename_all = "kebab-case")]
@@ -84,6 +84,9 @@ impl PrereleaseStrategy {
8484

8585
if specifier
8686
.iter()
87+
.filter(|spec| {
88+
!matches!(spec.operator(), Operator::NotEqual | Operator::NotEqualStar)
89+
})
8790
.any(uv_pep440::VersionSpecifier::any_prerelease)
8891
{
8992
packages.add(&requirement, ());

crates/uv/tests/it/pip_compile.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12418,3 +12418,39 @@ fn prune_unreachable() -> Result<()> {
1241812418

1241912419
Ok(())
1242012420
}
12421+
12422+
#[test]
12423+
fn negation_not_imply_prerelease() -> Result<()> {
12424+
let context = TestContext::new("3.12");
12425+
12426+
let requirements_in = context.temp_dir.child("requirements.in");
12427+
requirements_in.write_str("flask<2.0.1, !=2.0.0rc1")?;
12428+
uv_snapshot!(context
12429+
.pip_compile()
12430+
.arg("requirements.in"), @r###"
12431+
success: true
12432+
exit_code: 0
12433+
----- stdout -----
12434+
# This file was autogenerated by uv via the following command:
12435+
# uv pip compile --cache-dir [CACHE_DIR] requirements.in
12436+
click==8.1.7
12437+
# via flask
12438+
flask==2.0.0
12439+
# via -r requirements.in
12440+
itsdangerous==2.1.2
12441+
# via flask
12442+
jinja2==3.1.3
12443+
# via flask
12444+
markupsafe==2.1.5
12445+
# via
12446+
# jinja2
12447+
# werkzeug
12448+
werkzeug==3.0.1
12449+
# via flask
12450+
12451+
----- stderr -----
12452+
Resolved 6 packages in [TIME]
12453+
"###);
12454+
12455+
Ok(())
12456+
}

0 commit comments

Comments
 (0)