Skip to content

Commit

Permalink
Respect preferences for explicit index dependencies from `requirement…
Browse files Browse the repository at this point in the history
…s.txt` (#10690)

## Summary

Closes: #10383.
  • Loading branch information
charliermarsh authored Jan 16, 2025
1 parent 75a1a47 commit 45455b3
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 3 deletions.
5 changes: 2 additions & 3 deletions crates/uv-resolver/src/candidate_selector.rs
Original file line number Diff line number Diff line change
Expand Up @@ -188,10 +188,9 @@ impl CandidateSelector {
.filter(|(marker, _index, _version)| !env.included_by_marker(marker.pep508()));
let preferences = preferences_match.chain(preferences_mismatch).filter_map(
|(marker, source, version)| {
// If the package is mapped to an explicit index, only consider preferences that
// match the index.
// Ignore preferences that are associated with conflicting indexes.
index
.map_or(true, |index| source == Some(index))
.is_none_or(|index| source.is_none_or(|source| source == index))
.then_some((marker, version))
},
);
Expand Down
48 changes: 48 additions & 0 deletions crates/uv/tests/it/pip_compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14345,3 +14345,51 @@ fn max_python_requirement() -> Result<()> {

Ok(())
}

/// See: <https://github.com/astral-sh/uv/issues/10383>
#[test]
fn respect_index_preference() -> Result<()> {
let context = TestContext::new("3.12");
let pyproject_toml = context.temp_dir.child("pyproject.toml");
pyproject_toml.write_str(indoc::indoc! {r#"
[project]
name = "project"
version = "0.1.0"
dependencies = ["iniconfig>=1", "typing-extensions>=4"]
[[tool.uv.index]]
name = "pypi"
url = "https://pypi.org/simple"
explicit = true
[tool.uv.sources]
iniconfig = { index = "pypi" }
"#})?;

let requirements_txt = context.temp_dir.child("requirements.txt");
requirements_txt.write_str(indoc::indoc! {r"
iniconfig==1.1.1
typing-extensions==4.6.0
"})?;

uv_snapshot!(context
.pip_compile()
.arg("pyproject.toml")
.arg("-o")
.arg("requirements.txt"), @r###"
success: true
exit_code: 0
----- stdout -----
# This file was autogenerated by uv via the following command:
# uv pip compile --cache-dir [CACHE_DIR] pyproject.toml -o requirements.txt
iniconfig==1.1.1
# via project (pyproject.toml)
typing-extensions==4.6.0
# via project (pyproject.toml)
----- stderr -----
Resolved 2 packages in [TIME]
"###);

Ok(())
}

0 comments on commit 45455b3

Please sign in to comment.