diff --git a/crates/uv-build/src/lib.rs b/crates/uv-build/src/lib.rs index 3c0f1b469..479a4b35d 100644 --- a/crates/uv-build/src/lib.rs +++ b/crates/uv-build/src/lib.rs @@ -398,6 +398,7 @@ impl SourceBuild { pub async fn setup( source: &Path, subdirectory: Option<&Path>, + fallback_package_name: Option<&PackageName>, interpreter: &Interpreter, build_context: &impl BuildContext, source_build_context: SourceBuildContext, @@ -422,10 +423,10 @@ impl SourceBuild { let (pep517_backend, project) = Self::extract_pep517_backend(&source_tree, &default_backend).map_err(|err| *err)?; - let package_name = project.clone().map(|p| p.name); + let package_name = project.as_ref().map(|p| &p.name).or(fallback_package_name); // Create a virtual environment, or install into the shared environment if requested. - let venv = if let Some(venv) = build_isolation.shared_environment(package_name.as_ref()) { + let venv = if let Some(venv) = build_isolation.shared_environment(package_name) { venv.clone() } else { uv_virtualenv::create_venv( @@ -440,7 +441,7 @@ impl SourceBuild { // Setup the build environment. If build isolation is disabled, we assume the build // environment is already setup. - if build_isolation.is_isolated(package_name.as_ref()) { + if build_isolation.is_isolated(package_name) { let resolved_requirements = Self::get_resolved_requirements( build_context, source_build_context, @@ -490,7 +491,7 @@ impl SourceBuild { // Create the PEP 517 build environment. If build isolation is disabled, we assume the build // environment is already setup. let runner = PythonRunner::new(concurrent_builds); - if build_isolation.is_isolated(package_name.as_ref()) { + if build_isolation.is_isolated(package_name) { create_pep517_build_environment( &runner, &source_tree, diff --git a/crates/uv-dev/src/build.rs b/crates/uv-dev/src/build.rs index 0b7a3584f..8170c2080 100644 --- a/crates/uv-dev/src/build.rs +++ b/crates/uv-dev/src/build.rs @@ -98,6 +98,7 @@ pub(crate) async fn build(args: BuildArgs) -> Result { let builder = SourceBuild::setup( &args.sdist, args.subdirectory.as_deref(), + None, python.interpreter(), &build_dispatch, SourceBuildContext::default(), diff --git a/crates/uv-dispatch/src/lib.rs b/crates/uv-dispatch/src/lib.rs index 9b8134523..4a95d4554 100644 --- a/crates/uv-dispatch/src/lib.rs +++ b/crates/uv-dispatch/src/lib.rs @@ -298,11 +298,12 @@ impl<'a> BuildContext for BuildDispatch<'a> { dist: Option<&'data SourceDist>, build_kind: BuildKind, ) -> Result { + let dist_name = dist.map(distribution_types::Name::name); // Note we can only prevent builds by name for packages with names // unless all builds are disabled. if self .build_options - .no_build_requirement(dist.map(distribution_types::Name::name)) + .no_build_requirement(dist_name) // We always allow editable builds && !matches!(build_kind, BuildKind::Editable) { @@ -318,6 +319,7 @@ impl<'a> BuildContext for BuildDispatch<'a> { let builder = SourceBuild::setup( source, subdirectory, + dist_name, self.interpreter, self, self.source_build_context.clone(),