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` ```
47 lines
1.2 KiB
Rust
47 lines
1.2 KiB
Rust
use std::path::PathBuf;
|
|
|
|
use clap::Parser;
|
|
use tracing::info;
|
|
|
|
use uv_cache::{Cache, CacheArgs};
|
|
use uv_configuration::Concurrency;
|
|
use uv_preview::Preview;
|
|
use uv_python::{EnvironmentPreference, PythonEnvironment, PythonPreference, PythonRequest};
|
|
|
|
#[derive(Parser)]
|
|
pub(crate) struct CompileArgs {
|
|
/// Compile all `.py` in this or any subdirectory to bytecode
|
|
root: PathBuf,
|
|
python: Option<PathBuf>,
|
|
#[command(flatten)]
|
|
cache_args: CacheArgs,
|
|
}
|
|
|
|
pub(crate) async fn compile(args: CompileArgs) -> anyhow::Result<()> {
|
|
let cache = Cache::try_from(args.cache_args)?.init().await?;
|
|
|
|
let interpreter = if let Some(python) = args.python {
|
|
python
|
|
} else {
|
|
let interpreter = PythonEnvironment::find(
|
|
&PythonRequest::default(),
|
|
EnvironmentPreference::OnlyVirtual,
|
|
PythonPreference::default(),
|
|
&cache,
|
|
Preview::default(),
|
|
)?
|
|
.into_interpreter();
|
|
interpreter.sys_executable().to_path_buf()
|
|
};
|
|
|
|
let files = uv_installer::compile_tree(
|
|
&fs_err::canonicalize(args.root)?,
|
|
&interpreter,
|
|
&Concurrency::default(),
|
|
cache.root(),
|
|
)
|
|
.await?;
|
|
info!("Compiled {files} files");
|
|
Ok(())
|
|
}
|