Respect --quiet flag in uv build (#7674)

I noticed this was not respected, seems like an oversight.
This commit is contained in:
Zanie Blue 2024-09-25 08:23:43 -05:00 committed by GitHub
parent 84e5f6e871
commit 12ab7d1ab7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 105 additions and 27 deletions

View file

@ -239,7 +239,7 @@ impl Error {
if let Some(missing_library) = missing_library { if let Some(missing_library) = missing_library {
return match level { return match level {
BuildOutput::Stderr => Self::MissingHeader { BuildOutput::Stderr | BuildOutput::Quiet => Self::MissingHeader {
message, message,
exit_code: output.status, exit_code: output.status,
missing_header_cause: MissingHeaderCause { missing_header_cause: MissingHeaderCause {
@ -265,7 +265,7 @@ impl Error {
} }
match level { match level {
BuildOutput::Stderr => Self::BuildBackend { BuildOutput::Stderr | BuildOutput::Quiet => Self::BuildBackend {
message, message,
exit_code: output.status, exit_code: output.status,
}, },

View file

@ -988,6 +988,8 @@ pub enum Printer {
Stderr, Stderr,
/// Send the build backend output to `tracing`. /// Send the build backend output to `tracing`.
Debug, Debug,
/// Hide the build backend output.
Quiet,
} }
impl From<BuildOutput> for Printer { impl From<BuildOutput> for Printer {
@ -995,6 +997,7 @@ impl From<BuildOutput> for Printer {
match output { match output {
BuildOutput::Stderr => Self::Stderr, BuildOutput::Stderr => Self::Stderr,
BuildOutput::Debug => Self::Debug, BuildOutput::Debug => Self::Debug,
BuildOutput::Quiet => Self::Quiet,
} }
} }
} }
@ -1008,6 +1011,7 @@ impl Write for Printer {
Self::Debug => { Self::Debug => {
debug!("{s}"); debug!("{s}");
} }
Self::Quiet => {}
} }
Ok(()) Ok(())
} }

View file

@ -31,6 +31,8 @@ pub enum BuildOutput {
Stderr, Stderr,
/// Send the build backend output to `tracing`. /// Send the build backend output to `tracing`.
Debug, Debug,
/// Do not display the build backend output.
Quiet,
} }
#[derive(Debug, Default, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[derive(Debug, Default, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]

View file

@ -1,15 +1,11 @@
use crate::commands::project::find_requires_python;
use crate::commands::reporters::PythonDownloadReporter;
use crate::commands::{ExitStatus, SharedState};
use crate::printer::Printer;
use crate::settings::{ResolverSettings, ResolverSettingsRef};
use std::borrow::Cow; use std::borrow::Cow;
use std::fmt::Write;
use std::path::{Path, PathBuf};
use crate::commands::pip::operations;
use anyhow::Result; use anyhow::Result;
use distribution_filename::SourceDistExtension; use distribution_filename::SourceDistExtension;
use owo_colors::OwoColorize; use owo_colors::OwoColorize;
use std::path::{Path, PathBuf};
use uv_auth::store_credentials_from_url; use uv_auth::store_credentials_from_url;
use uv_cache::Cache; use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder}; use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder};
@ -26,6 +22,13 @@ use uv_resolver::{FlatIndex, RequiresPython};
use uv_types::{BuildContext, BuildIsolation, HashStrategy}; use uv_types::{BuildContext, BuildIsolation, HashStrategy};
use uv_workspace::{DiscoveryOptions, Workspace}; use uv_workspace::{DiscoveryOptions, Workspace};
use crate::commands::pip::operations;
use crate::commands::project::find_requires_python;
use crate::commands::reporters::PythonDownloadReporter;
use crate::commands::{ExitStatus, SharedState};
use crate::printer::Printer;
use crate::settings::{ResolverSettings, ResolverSettingsRef};
/// Build source distributions and wheels. /// Build source distributions and wheels.
#[allow(clippy::fn_params_excessive_bools)] #[allow(clippy::fn_params_excessive_bools)]
pub(crate) async fn build( pub(crate) async fn build(
@ -72,17 +75,26 @@ pub(crate) async fn build(
match assets { match assets {
BuiltDistributions::Wheel(wheel) => { BuiltDistributions::Wheel(wheel) => {
anstream::eprintln!("Successfully built {}", wheel.user_display().bold().cyan()); writeln!(
printer.stderr(),
"Successfully built {}",
wheel.user_display().bold().cyan()
)?;
} }
BuiltDistributions::Sdist(sdist) => { BuiltDistributions::Sdist(sdist) => {
anstream::eprintln!("Successfully built {}", sdist.user_display().bold().cyan()); writeln!(
printer.stderr(),
"Successfully built {}",
sdist.user_display().bold().cyan()
)?;
} }
BuiltDistributions::Both(sdist, wheel) => { BuiltDistributions::Both(sdist, wheel) => {
anstream::eprintln!( writeln!(
printer.stderr(),
"Successfully built {} and {}", "Successfully built {} and {}",
sdist.user_display().bold().cyan(), sdist.user_display().bold().cyan(),
wheel.user_display().bold().cyan() wheel.user_display().bold().cyan()
); )?;
} }
} }
@ -356,9 +368,18 @@ async fn build_impl(
let version_id = src.path().file_name().and_then(|name| name.to_str()); let version_id = src.path().file_name().and_then(|name| name.to_str());
let dist = None; let dist = None;
let build_output = match printer {
Printer::Default | Printer::NoProgress | Printer::Verbose => BuildOutput::Stderr,
Printer::Quiet => BuildOutput::Quiet,
};
let assets = match plan { let assets = match plan {
BuildPlan::SdistToWheel => { BuildPlan::SdistToWheel => {
anstream::eprintln!("{}", "Building source distribution...".bold()); writeln!(
printer.stderr(),
"{}",
"Building source distribution...".bold()
)?;
// Build the sdist. // Build the sdist.
let builder = build_dispatch let builder = build_dispatch
@ -368,7 +389,7 @@ async fn build_impl(
version_id.map(ToString::to_string), version_id.map(ToString::to_string),
dist, dist,
BuildKind::Sdist, BuildKind::Sdist,
BuildOutput::Stderr, build_output,
) )
.await?; .await?;
let sdist = builder.build(&output_dir).await?; let sdist = builder.build(&output_dir).await?;
@ -389,7 +410,11 @@ async fn build_impl(
Err(err) => return Err(err.into()), Err(err) => return Err(err.into()),
}; };
anstream::eprintln!("{}", "Building wheel from source distribution...".bold()); writeln!(
printer.stderr(),
"{}",
"Building wheel from source distribution...".bold()
)?;
// Build a wheel from the source distribution. // Build a wheel from the source distribution.
let builder = build_dispatch let builder = build_dispatch
@ -399,7 +424,7 @@ async fn build_impl(
version_id.map(ToString::to_string), version_id.map(ToString::to_string),
dist, dist,
BuildKind::Wheel, BuildKind::Wheel,
BuildOutput::Stderr, build_output,
) )
.await?; .await?;
let wheel = builder.build(&output_dir).await?; let wheel = builder.build(&output_dir).await?;
@ -407,7 +432,11 @@ async fn build_impl(
BuiltDistributions::Both(output_dir.join(sdist), output_dir.join(wheel)) BuiltDistributions::Both(output_dir.join(sdist), output_dir.join(wheel))
} }
BuildPlan::Sdist => { BuildPlan::Sdist => {
anstream::eprintln!("{}", "Building source distribution...".bold()); writeln!(
printer.stderr(),
"{}",
"Building source distribution...".bold()
)?;
let builder = build_dispatch let builder = build_dispatch
.setup_build( .setup_build(
@ -416,7 +445,7 @@ async fn build_impl(
version_id.map(ToString::to_string), version_id.map(ToString::to_string),
dist, dist,
BuildKind::Sdist, BuildKind::Sdist,
BuildOutput::Stderr, build_output,
) )
.await?; .await?;
let sdist = builder.build(&output_dir).await?; let sdist = builder.build(&output_dir).await?;
@ -424,7 +453,7 @@ async fn build_impl(
BuiltDistributions::Sdist(output_dir.join(sdist)) BuiltDistributions::Sdist(output_dir.join(sdist))
} }
BuildPlan::Wheel => { BuildPlan::Wheel => {
anstream::eprintln!("{}", "Building wheel...".bold()); writeln!(printer.stderr(), "{}", "Building wheel...".bold())?;
let builder = build_dispatch let builder = build_dispatch
.setup_build( .setup_build(
@ -433,7 +462,7 @@ async fn build_impl(
version_id.map(ToString::to_string), version_id.map(ToString::to_string),
dist, dist,
BuildKind::Wheel, BuildKind::Wheel,
BuildOutput::Stderr, build_output,
) )
.await?; .await?;
let wheel = builder.build(&output_dir).await?; let wheel = builder.build(&output_dir).await?;
@ -441,7 +470,11 @@ async fn build_impl(
BuiltDistributions::Wheel(output_dir.join(wheel)) BuiltDistributions::Wheel(output_dir.join(wheel))
} }
BuildPlan::SdistAndWheel => { BuildPlan::SdistAndWheel => {
anstream::eprintln!("{}", "Building source distribution...".bold()); writeln!(
printer.stderr(),
"{}",
"Building source distribution...".bold()
)?;
let builder = build_dispatch let builder = build_dispatch
.setup_build( .setup_build(
src.path(), src.path(),
@ -449,12 +482,12 @@ async fn build_impl(
version_id.map(ToString::to_string), version_id.map(ToString::to_string),
dist, dist,
BuildKind::Sdist, BuildKind::Sdist,
BuildOutput::Stderr, build_output,
) )
.await?; .await?;
let sdist = builder.build(&output_dir).await?; let sdist = builder.build(&output_dir).await?;
anstream::eprintln!("{}", "Building wheel...".bold()); writeln!(printer.stderr(), "{}", "Building wheel...".bold())?;
let builder = build_dispatch let builder = build_dispatch
.setup_build( .setup_build(
src.path(), src.path(),
@ -462,7 +495,7 @@ async fn build_impl(
version_id.map(ToString::to_string), version_id.map(ToString::to_string),
dist, dist,
BuildKind::Wheel, BuildKind::Wheel,
BuildOutput::Stderr, build_output,
) )
.await?; .await?;
let wheel = builder.build(&output_dir).await?; let wheel = builder.build(&output_dir).await?;
@ -470,7 +503,11 @@ async fn build_impl(
BuiltDistributions::Both(output_dir.join(&sdist), output_dir.join(&wheel)) BuiltDistributions::Both(output_dir.join(&sdist), output_dir.join(&wheel))
} }
BuildPlan::WheelFromSdist => { BuildPlan::WheelFromSdist => {
anstream::eprintln!("{}", "Building wheel from source distribution...".bold()); writeln!(
printer.stderr(),
"{}",
"Building wheel from source distribution...".bold()
)?;
// Extract the source distribution into a temporary directory. // Extract the source distribution into a temporary directory.
let reader = fs_err::tokio::File::open(src.path()).await?; let reader = fs_err::tokio::File::open(src.path()).await?;
@ -495,7 +532,7 @@ async fn build_impl(
version_id.map(ToString::to_string), version_id.map(ToString::to_string),
dist, dist,
BuildKind::Wheel, BuildKind::Wheel,
BuildOutput::Stderr, build_output,
) )
.await?; .await?;
let wheel = builder.build(&output_dir).await?; let wheel = builder.build(&output_dir).await?;

View file

@ -1486,3 +1486,38 @@ fn sha() -> Result<()> {
Ok(()) Ok(())
} }
#[test]
fn build_quiet() -> Result<()> {
let context = TestContext::new("3.12");
let project = context.temp_dir.child("project");
let pyproject_toml = project.child("pyproject.toml");
pyproject_toml.write_str(
r#"
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = ["anyio==3.7.0"]
[build-system]
requires = ["setuptools>=42"]
build-backend = "setuptools.build_meta"
"#,
)?;
project.child("src").child("__init__.py").touch()?;
project.child("README").touch()?;
uv_snapshot!(&context.filters(), context.build().arg("project").arg("-q"), @r###"
success: true
exit_code: 0
----- stdout -----
----- stderr -----
"###);
Ok(())
}