62bf92132b
When a process is running and another calls `uv cache clean` or `uv cache prune` we currently deadlock - sometimes until the CI timeout (https://github.com/astral-sh/setup-uv/issues/588). To avoid this, we add a default 5 min timeout waiting for a lock. 5 min balances allowing in-progress builds to finish, especially with larger native dependencies, while also giving timely errors for deadlocks on (remote) systems. Commit 1 is a refactoring. This branch also fixes a problem with the logging where acquired and released resources currently mismatch: ``` DEBUG Acquired lock for `https://github.com/tqdm/tqdm` DEBUG Using existing Git source `https://github.com/tqdm/tqdm` DEBUG Released lock at `C:\Users\Konsti\AppData\Local\uv\cache\git-v0\locks\16bb813afef8edd2` ```
34 lines
1.3 KiB
Rust
34 lines
1.3 KiB
Rust
use std::str::FromStr;
|
|
|
|
use anyhow::Result;
|
|
|
|
use uv_cache::Cache;
|
|
use uv_client::{BaseClientBuilder, RegistryClientBuilder};
|
|
use uv_distribution_filename::WheelFilename;
|
|
use uv_distribution_types::{BuiltDist, DirectUrlBuiltDist, IndexCapabilities};
|
|
use uv_pep508::VerbatimUrl;
|
|
use uv_redacted::DisplaySafeUrl;
|
|
|
|
#[tokio::test]
|
|
async fn remote_metadata_with_and_without_cache() -> Result<()> {
|
|
let cache = Cache::temp()?.init().await?;
|
|
let client = RegistryClientBuilder::new(BaseClientBuilder::default(), cache).build();
|
|
|
|
// The first run is without cache (the tempdir is empty), the second has the cache from the
|
|
// first run.
|
|
for _ in 0..2 {
|
|
let url = "https://files.pythonhosted.org/packages/00/e5/f12a80907d0884e6dff9c16d0c0114d81b8cd07dc3ae54c5e962cc83037e/tqdm-4.66.1-py3-none-any.whl";
|
|
let filename = WheelFilename::from_str(url.rsplit_once('/').unwrap().1)?;
|
|
let dist = BuiltDist::DirectUrl(DirectUrlBuiltDist {
|
|
filename,
|
|
location: Box::new(DisplaySafeUrl::parse(url)?),
|
|
url: VerbatimUrl::from_str(url)?,
|
|
});
|
|
let capabilities = IndexCapabilities::default();
|
|
let metadata = client.wheel_metadata(&dist, &capabilities).await?;
|
|
assert_eq!(metadata.version.to_string(), "4.66.1");
|
|
}
|
|
|
|
Ok(())
|
|
}
|