Add dedicated cache method for creating build directories (#8910)

## Summary

Based on feedback from
https://github.com/astral-sh/uv/pull/8905/files#r1833531812.
This commit is contained in:
Charlie Marsh 2024-11-07 19:50:55 -05:00 committed by GitHub
parent 88033610b5
commit 9cd51c8a57
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 18 additions and 12 deletions

View file

@ -261,7 +261,7 @@ impl SourceBuild {
level: BuildOutput,
concurrent_builds: usize,
) -> Result<Self, Error> {
let temp_dir = build_context.cache().environment()?;
let temp_dir = build_context.cache().venv_dir()?;
let source_tree = if let Some(subdir) = subdirectory {
source.join(subdir)

View file

@ -188,8 +188,14 @@ impl Cache {
self.bucket(CacheBucket::Archive).join(id)
}
/// Create an ephemeral Python environment in the cache.
pub fn environment(&self) -> io::Result<tempfile::TempDir> {
/// Create a temporary directory to be used as a Python virtual environment.
pub fn venv_dir(&self) -> io::Result<tempfile::TempDir> {
fs_err::create_dir_all(self.bucket(CacheBucket::Builds))?;
tempfile::tempdir_in(self.bucket(CacheBucket::Builds))
}
/// Create a temporary directory to be used for executing PEP 517 source distribution builds.
pub fn build_dir(&self) -> io::Result<tempfile::TempDir> {
fs_err::create_dir_all(self.bucket(CacheBucket::Builds))?;
tempfile::tempdir_in(self.bucket(CacheBucket::Builds))
}

View file

@ -1720,10 +1720,10 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
}
// Build into a temporary directory, to prevent partial builds.
let build = self
let temp_dir = self
.build_context
.cache()
.environment()
.build_dir()
.map_err(Error::CacheWrite)?;
// Build the wheel.
@ -1748,13 +1748,13 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
)
.await
.map_err(Error::Build)?
.wheel(build.path())
.wheel(temp_dir.path())
.await
.map_err(Error::Build)?;
// Move the wheel to the cache.
rename_with_retry(
build.path().join(&disk_filename),
temp_dir.path().join(&disk_filename),
cache_shard.join(&disk_filename),
)
.await

View file

@ -98,7 +98,7 @@ impl CachedEnvironment {
}
// Create the environment in the cache, then relocate it to its content-addressed location.
let temp_dir = cache.environment()?;
let temp_dir = cache.venv_dir()?;
let venv = uv_virtualenv::create_venv(
temp_dir.path(),
interpreter,

View file

@ -323,7 +323,7 @@ pub(crate) async fn run(
Some(environment.into_interpreter())
} else {
// Create a virtual environment.
temp_dir = cache.environment()?;
temp_dir = cache.venv_dir()?;
let environment = uv_virtualenv::create_venv(
temp_dir.path(),
interpreter,
@ -538,7 +538,7 @@ pub(crate) async fn run(
}
// Create a virtual environment
temp_dir = cache.environment()?;
temp_dir = cache.venv_dir()?;
uv_virtualenv::create_venv(
temp_dir.path(),
interpreter,
@ -741,7 +741,7 @@ pub(crate) async fn run(
debug!("Creating isolated virtual environment");
// If we're isolating the environment, use an ephemeral virtual environment.
temp_dir = cache.environment()?;
temp_dir = cache.venv_dir()?;
let venv = uv_virtualenv::create_venv(
temp_dir.path(),
interpreter,
@ -791,7 +791,7 @@ pub(crate) async fn run(
Some(match spec.filter(|spec| !spec.is_empty()) {
None => {
// Create a virtual environment
temp_dir = cache.environment()?;
temp_dir = cache.venv_dir()?;
uv_virtualenv::create_venv(
temp_dir.path(),
base_interpreter.clone(),