Skip to content

Commit af7170e

Browse files
zaniebkonstincthoytcharliermarsh
committed
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 8062ebd commit af7170e

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

crates/uv-resolver/src/prerelease.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
use uv_pypi_types::RequirementSource;
22

3-
use uv_normalize::PackageName;
4-
53
use crate::resolver::ForkSet;
64
use crate::{DependencyMode, Manifest, ResolverEnvironment};
75

6+
use uv_normalize::PackageName;
7+
use uv_pep440::Operator;
8+
89
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
910
#[serde(deny_unknown_fields, rename_all = "kebab-case")]
1011
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
@@ -84,6 +85,9 @@ impl PrereleaseStrategy {
8485

8586
if specifier
8687
.iter()
88+
.filter(|spec| {
89+
!matches!(spec.operator(), Operator::NotEqual | Operator::NotEqualStar)
90+
})
8791
.any(uv_pep440::VersionSpecifier::any_prerelease)
8892
{
8993
packages.add(&requirement, ());

crates/uv/tests/it/pip_compile.rs

+36
Original file line numberDiff line numberDiff line change
@@ -12687,6 +12687,42 @@ fn unsupported_requires_python_dynamic_metadata() -> Result<()> {
1268712687
Ok(())
1268812688
}
1268912689

12690+
#[test]
12691+
fn negation_not_imply_prerelease() -> Result<()> {
12692+
let context = TestContext::new("3.12");
12693+
12694+
let requirements_in = context.temp_dir.child("requirements.in");
12695+
requirements_in.write_str("flask<2.0.1, !=2.0.0rc1")?;
12696+
uv_snapshot!(context
12697+
.pip_compile()
12698+
.arg("requirements.in"), @r###"
12699+
success: true
12700+
exit_code: 0
12701+
----- stdout -----
12702+
# This file was autogenerated by uv via the following command:
12703+
# uv pip compile --cache-dir [CACHE_DIR] requirements.in
12704+
click==8.1.7
12705+
# via flask
12706+
flask==2.0.0
12707+
# via -r requirements.in
12708+
itsdangerous==2.1.2
12709+
# via flask
12710+
jinja2==3.1.3
12711+
# via flask
12712+
markupsafe==2.1.5
12713+
# via
12714+
# jinja2
12715+
# werkzeug
12716+
werkzeug==3.0.1
12717+
# via flask
12718+
12719+
----- stderr -----
12720+
Resolved 6 packages in [TIME]
12721+
"###);
12722+
12723+
Ok(())
12724+
}
12725+
1269012726
/// Perform a universal resolution with a constraint, where the constraint itself has a marker.
1269112727
#[test]
1269212728
fn lowest_direct_fork() -> Result<()> {

0 commit comments

Comments
 (0)