mirror of https://github.com/astral-sh/uv
178 lines
4.9 KiB
Rust
178 lines
4.9 KiB
Rust
use anyhow::Result;
|
|
use assert_cmd::prelude::*;
|
|
use assert_fs::prelude::*;
|
|
|
|
use crate::common::{TestContext, uv_snapshot};
|
|
|
|
/// `cache clean` should remove all packages.
|
|
#[test]
|
|
fn clean_all() -> Result<()> {
|
|
let context = TestContext::new("3.12");
|
|
|
|
let requirements_txt = context.temp_dir.child("requirements.txt");
|
|
requirements_txt.write_str("typing-extensions\niniconfig")?;
|
|
|
|
// Install a requirement, to populate the cache.
|
|
context
|
|
.pip_sync()
|
|
.arg("requirements.txt")
|
|
.assert()
|
|
.success();
|
|
|
|
uv_snapshot!(context.with_filtered_counts().filters(), context.clean().arg("--verbose"), @r"
|
|
success: true
|
|
exit_code: 0
|
|
----- stdout -----
|
|
|
|
----- stderr -----
|
|
DEBUG uv [VERSION] ([COMMIT] DATE)
|
|
DEBUG Acquired lock for `[CACHE_DIR]/`
|
|
Clearing cache at: [CACHE_DIR]/
|
|
DEBUG Released lock at `[CACHE_DIR]/.lock`
|
|
Removed [N] files ([SIZE])
|
|
");
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// `cache clean iniconfig` should remove a single package (`iniconfig`).
|
|
#[test]
|
|
fn clean_package_pypi() -> Result<()> {
|
|
let context = TestContext::new("3.12");
|
|
|
|
let requirements_txt = context.temp_dir.child("requirements.txt");
|
|
requirements_txt.write_str("anyio\niniconfig")?;
|
|
|
|
// Install a requirement, to populate the cache.
|
|
context
|
|
.pip_sync()
|
|
.arg("requirements.txt")
|
|
.assert()
|
|
.success();
|
|
|
|
// Assert that the `.rkyv` file is created for `iniconfig`.
|
|
let rkyv = context
|
|
.cache_dir
|
|
.child("simple-v18")
|
|
.child("pypi")
|
|
.child("iniconfig.rkyv");
|
|
assert!(
|
|
rkyv.exists(),
|
|
"Expected the `.rkyv` file to exist for `iniconfig`"
|
|
);
|
|
|
|
let filters: Vec<_> = context
|
|
.filters()
|
|
.into_iter()
|
|
.chain([
|
|
// The cache entry does not have a stable key, so we filter it out.
|
|
(
|
|
r"\[CACHE_DIR\](\\|\/)(.+)(\\|\/).*",
|
|
"[CACHE_DIR]/$2/[ENTRY]",
|
|
),
|
|
// The file count varies by operating system, so we filter it out.
|
|
("Removed \\d+ files?", "Removed [N] files"),
|
|
])
|
|
.collect();
|
|
|
|
uv_snapshot!(&filters, context.clean().arg("--verbose").arg("iniconfig"), @r"
|
|
success: true
|
|
exit_code: 0
|
|
----- stdout -----
|
|
|
|
----- stderr -----
|
|
DEBUG uv [VERSION] ([COMMIT] DATE)
|
|
DEBUG Acquired lock for `[CACHE_DIR]/`
|
|
DEBUG Removing dangling cache entry: [CACHE_DIR]/archive-v0/[ENTRY]
|
|
Removed [N] files ([SIZE])
|
|
DEBUG Released lock at `[CACHE_DIR]/.lock`
|
|
");
|
|
|
|
// Assert that the `.rkyv` file is removed for `iniconfig`.
|
|
assert!(
|
|
!rkyv.exists(),
|
|
"Expected the `.rkyv` file to be removed for `iniconfig`"
|
|
);
|
|
|
|
// Running `uv cache prune` should have no effect.
|
|
uv_snapshot!(&filters, context.prune().arg("--verbose"), @r"
|
|
success: true
|
|
exit_code: 0
|
|
----- stdout -----
|
|
|
|
----- stderr -----
|
|
DEBUG uv [VERSION] ([COMMIT] DATE)
|
|
DEBUG Acquired lock for `[CACHE_DIR]/`
|
|
Pruning cache at: [CACHE_DIR]/
|
|
No unused entries found
|
|
DEBUG Released lock at `[CACHE_DIR]/.lock`
|
|
");
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// `cache clean iniconfig` should remove a single package (`iniconfig`).
|
|
#[test]
|
|
fn clean_package_index() -> Result<()> {
|
|
let context = TestContext::new("3.12");
|
|
|
|
let requirements_txt = context.temp_dir.child("requirements.txt");
|
|
requirements_txt.write_str("anyio\niniconfig")?;
|
|
|
|
// Install a requirement, to populate the cache.
|
|
context
|
|
.pip_sync()
|
|
.arg("requirements.txt")
|
|
.arg("--index-url")
|
|
.arg("https://test.pypi.org/simple")
|
|
.assert()
|
|
.success();
|
|
|
|
// Assert that the `.rkyv` file is created for `iniconfig`.
|
|
let rkyv = context
|
|
.cache_dir
|
|
.child("simple-v18")
|
|
.child("index")
|
|
.child("e8208120cae3ba69")
|
|
.child("iniconfig.rkyv");
|
|
assert!(
|
|
rkyv.exists(),
|
|
"Expected the `.rkyv` file to exist for `iniconfig`"
|
|
);
|
|
|
|
let filters: Vec<_> = context
|
|
.filters()
|
|
.into_iter()
|
|
.chain([
|
|
// The cache entry does not have a stable key, so we filter it out.
|
|
(
|
|
r"\[CACHE_DIR\](\\|\/)(.+)(\\|\/).*",
|
|
"[CACHE_DIR]/$2/[ENTRY]",
|
|
),
|
|
// The file count varies by operating system, so we filter it out.
|
|
("Removed \\d+ files?", "Removed [N] files"),
|
|
])
|
|
.collect();
|
|
|
|
uv_snapshot!(&filters, context.clean().arg("--verbose").arg("iniconfig"), @r"
|
|
success: true
|
|
exit_code: 0
|
|
----- stdout -----
|
|
|
|
----- stderr -----
|
|
DEBUG uv [VERSION] ([COMMIT] DATE)
|
|
DEBUG Acquired lock for `[CACHE_DIR]/`
|
|
DEBUG Removing dangling cache entry: [CACHE_DIR]/archive-v0/[ENTRY]
|
|
Removed [N] files ([SIZE])
|
|
DEBUG Released lock at `[CACHE_DIR]/.lock`
|
|
");
|
|
|
|
// Assert that the `.rkyv` file is removed for `iniconfig`.
|
|
assert!(
|
|
!rkyv.exists(),
|
|
"Expected the `.rkyv` file to be removed for `iniconfig`"
|
|
);
|
|
|
|
Ok(())
|
|
}
|