Skip to content

Commit

Permalink
Split after specifiers in --with requirements (#9089)
Browse files Browse the repository at this point in the history
## Summary

Part of me wants to revert support for `--with "flask, requests"`, but
the multiple specifiers case actually isn't ambiguous, and handling it
is better than shipping a breaking change in a patch release.

Closes #9081.
  • Loading branch information
charliermarsh authored Nov 13, 2024
1 parent 2ea81b3 commit 709e45f
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
11 changes: 11 additions & 0 deletions crates/uv-cli/src/comma.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,17 @@ impl FromStr for CommaSeparatedRequirements {
depth = depth.saturating_sub(1);
}
',' if depth == 0 => {
// If the next character is a version identifier, skip the comma, as in:
// `requests>=2.1,<3`.
if let Some(c) = input
.get(i + ','.len_utf8()..)
.and_then(|s| s.chars().find(|c| !c.is_whitespace()))
{
if matches!(c, '!' | '=' | '<' | '>' | '~') {
continue;
}
}

let requirement = input[start..i].trim().to_string();
if !requirement.is_empty() {
requirements.push(requirement);
Expand Down
16 changes: 16 additions & 0 deletions crates/uv-cli/src/comma/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,19 @@ fn double_extras() {
])
);
}

#[test]
fn single_specifiers() {
assert_eq!(
CommaSeparatedRequirements::from_str("requests>=2.1,<3").unwrap(),
CommaSeparatedRequirements(vec!["requests>=2.1,<3".to_string(),])
);
}

#[test]
fn double_specifiers() {
assert_eq!(
CommaSeparatedRequirements::from_str("requests>=2.1,<3, flask").unwrap(),
CommaSeparatedRequirements(vec!["requests>=2.1,<3".to_string(), "flask".to_string()])
);
}

0 comments on commit 709e45f

Please sign in to comment.