mirror of
https://github.com/astral-sh/uv.git
synced 2025-08-04 10:58:28 +00:00
Add --reinstall
flag to pip-sync
(#590)
## Summary This PR adds two flags to `pip-sync`: `--reinstall`, and `--reinstall-package [PACKAGE]`. The former reinstalls all packages in the requirements, while the latter can be repeated and reinstalls all specified packages. For our purposes, a reinstall includes (1) purging the cache, and (2) marking any already-installed versions as extraneous. Closes #572. Closes https://github.com/astral-sh/puffin/issues/271.
This commit is contained in:
parent
4b8642c6f7
commit
ffb8480087
6 changed files with 216 additions and 9 deletions
|
@ -1701,3 +1701,148 @@ fn duplicate_package_disjoint() -> Result<()> {
|
|||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Verify that we can force reinstall of packages.
|
||||
#[test]
|
||||
fn reinstall() -> Result<()> {
|
||||
let temp_dir = assert_fs::TempDir::new()?;
|
||||
let cache_dir = assert_fs::TempDir::new()?;
|
||||
let venv = create_venv_py312(&temp_dir, &cache_dir);
|
||||
|
||||
let requirements_txt = temp_dir.child("requirements.txt");
|
||||
requirements_txt.touch()?;
|
||||
requirements_txt.write_str("MarkupSafe==2.1.3\ntomli==2.0.1")?;
|
||||
|
||||
insta::with_settings!({
|
||||
filters => INSTA_FILTERS.to_vec()
|
||||
}, {
|
||||
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: true
|
||||
exit_code: 0
|
||||
----- stdout -----
|
||||
|
||||
----- stderr -----
|
||||
Resolved 2 packages in [TIME]
|
||||
Downloaded 2 packages in [TIME]
|
||||
Unzipped 2 packages in [TIME]
|
||||
Installed 2 packages in [TIME]
|
||||
+ markupsafe==2.1.3
|
||||
+ tomli==2.0.1
|
||||
"###);
|
||||
});
|
||||
|
||||
check_command(&venv, "import markupsafe", &temp_dir);
|
||||
check_command(&venv, "import tomli", &temp_dir);
|
||||
|
||||
// Re-run the installation with `--reinstall`.
|
||||
insta::with_settings!({
|
||||
filters => INSTA_FILTERS.to_vec()
|
||||
}, {
|
||||
assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME))
|
||||
.arg("pip-sync")
|
||||
.arg("requirements.txt")
|
||||
.arg("--reinstall")
|
||||
.arg("--cache-dir")
|
||||
.arg(cache_dir.path())
|
||||
.env("VIRTUAL_ENV", venv.as_os_str())
|
||||
.current_dir(&temp_dir), @r###"
|
||||
success: true
|
||||
exit_code: 0
|
||||
----- stdout -----
|
||||
|
||||
----- stderr -----
|
||||
Resolved 2 packages in [TIME]
|
||||
Downloaded 2 packages in [TIME]
|
||||
Unzipped 2 packages in [TIME]
|
||||
Uninstalled 2 packages in [TIME]
|
||||
Installed 2 packages in [TIME]
|
||||
- markupsafe==2.1.3
|
||||
+ markupsafe==2.1.3
|
||||
- tomli==2.0.1
|
||||
+ tomli==2.0.1
|
||||
"###);
|
||||
});
|
||||
|
||||
check_command(&venv, "import markupsafe", &temp_dir);
|
||||
check_command(&venv, "import tomli", &temp_dir);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Verify that we can force reinstall of selective packages.
|
||||
#[test]
|
||||
fn reinstall_package() -> Result<()> {
|
||||
let temp_dir = assert_fs::TempDir::new()?;
|
||||
let cache_dir = assert_fs::TempDir::new()?;
|
||||
let venv = create_venv_py312(&temp_dir, &cache_dir);
|
||||
|
||||
let requirements_txt = temp_dir.child("requirements.txt");
|
||||
requirements_txt.touch()?;
|
||||
requirements_txt.write_str("MarkupSafe==2.1.3\ntomli==2.0.1")?;
|
||||
|
||||
insta::with_settings!({
|
||||
filters => INSTA_FILTERS.to_vec()
|
||||
}, {
|
||||
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: true
|
||||
exit_code: 0
|
||||
----- stdout -----
|
||||
|
||||
----- stderr -----
|
||||
Resolved 2 packages in [TIME]
|
||||
Downloaded 2 packages in [TIME]
|
||||
Unzipped 2 packages in [TIME]
|
||||
Installed 2 packages in [TIME]
|
||||
+ markupsafe==2.1.3
|
||||
+ tomli==2.0.1
|
||||
"###);
|
||||
});
|
||||
|
||||
check_command(&venv, "import markupsafe", &temp_dir);
|
||||
check_command(&venv, "import tomli", &temp_dir);
|
||||
|
||||
// Re-run the installation with `--reinstall`.
|
||||
insta::with_settings!({
|
||||
filters => INSTA_FILTERS.to_vec()
|
||||
}, {
|
||||
assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME))
|
||||
.arg("pip-sync")
|
||||
.arg("requirements.txt")
|
||||
.arg("--reinstall-package")
|
||||
.arg("tomli")
|
||||
.arg("--cache-dir")
|
||||
.arg(cache_dir.path())
|
||||
.env("VIRTUAL_ENV", venv.as_os_str())
|
||||
.current_dir(&temp_dir), @r###"
|
||||
success: true
|
||||
exit_code: 0
|
||||
----- stdout -----
|
||||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
Downloaded 1 package in [TIME]
|
||||
Unzipped 1 package in [TIME]
|
||||
Uninstalled 1 package in [TIME]
|
||||
Installed 1 package in [TIME]
|
||||
- tomli==2.0.1
|
||||
+ tomli==2.0.1
|
||||
"###);
|
||||
});
|
||||
|
||||
check_command(&venv, "import markupsafe", &temp_dir);
|
||||
check_command(&venv, "import tomli", &temp_dir);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue