mirror of
https://github.com/astral-sh/uv.git
synced 2025-08-04 10:58:28 +00:00
Don't install incompatible path and url wheels (#739)
Add early tag checking for path and url wheels. This does not check for resolve for consistency with index wheels.
This commit is contained in:
parent
cd43708369
commit
a3d8b3d9ca
2 changed files with 54 additions and 0 deletions
|
@ -2475,3 +2475,43 @@ fn sync_editable_and_registry() -> Result<()> {
|
|||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn incompatible_wheel() -> Result<()> {
|
||||
let temp_dir = assert_fs::TempDir::new()?;
|
||||
let wheel_dir = assert_fs::TempDir::new()?;
|
||||
let cache_dir = assert_fs::TempDir::new()?;
|
||||
let venv = create_venv_py312(&temp_dir, &cache_dir);
|
||||
|
||||
let wheel = wheel_dir.child("foo-1.2.3-not-compatible-wheel.whl");
|
||||
wheel.touch()?;
|
||||
|
||||
let requirements_txt = temp_dir.child("requirements.txt");
|
||||
requirements_txt.write_str(&format!("foo @ file://{}", wheel.path().display()))?;
|
||||
|
||||
let mut filters = INSTA_FILTERS.to_vec();
|
||||
let wheel_dir = wheel_dir.path().display().to_string();
|
||||
filters.push((&wheel_dir, "[TEMP_DIR]"));
|
||||
|
||||
insta::with_settings!({
|
||||
filters => filters
|
||||
}, {
|
||||
assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME))
|
||||
.arg("pip-sync")
|
||||
.arg("requirements.txt")
|
||||
.arg("--cache-dir")
|
||||
.arg(cache_dir.path())
|
||||
.env("VIRTUAL_ENV", venv.as_os_str())
|
||||
.current_dir(&temp_dir), @r###"
|
||||
success: false
|
||||
exit_code: 2
|
||||
----- stdout -----
|
||||
|
||||
----- stderr -----
|
||||
error: Failed to determine installation plan
|
||||
Caused by: A path dependency is incompatible with the current platform: [TEMP_DIR]/foo-1.2.3-not-compatible-wheel.whl
|
||||
"###);
|
||||
});
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -192,6 +192,13 @@ impl InstallPlan {
|
|||
// Nothing to do.
|
||||
}
|
||||
Dist::Built(BuiltDist::DirectUrl(wheel)) => {
|
||||
if !wheel.filename.is_compatible(tags) {
|
||||
bail!(
|
||||
"A URL dependency is incompatible with the current platform: {}",
|
||||
wheel.url
|
||||
);
|
||||
}
|
||||
|
||||
// Find the exact wheel from the cache, since we know the filename in
|
||||
// advance.
|
||||
let cache_entry = cache.entry(
|
||||
|
@ -213,6 +220,13 @@ impl InstallPlan {
|
|||
}
|
||||
}
|
||||
Dist::Built(BuiltDist::Path(wheel)) => {
|
||||
if !wheel.filename.is_compatible(tags) {
|
||||
bail!(
|
||||
"A path dependency is incompatible with the current platform: {}",
|
||||
wheel.path.display()
|
||||
);
|
||||
}
|
||||
|
||||
// Find the exact wheel from the cache, since we know the filename in
|
||||
// advance.
|
||||
let cache_entry = cache.entry(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue