Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Respect --quiet flag in uv build #7674

Merged
merged 1 commit into from
Sep 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions crates/uv-build/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ impl Error {

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

match level {
BuildOutput::Stderr => Self::BuildBackend {
BuildOutput::Stderr | BuildOutput::Quiet => Self::BuildBackend {
message,
exit_code: output.status,
},
Expand Down
4 changes: 4 additions & 0 deletions crates/uv-build/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -988,13 +988,16 @@ pub enum Printer {
Stderr,
/// Send the build backend output to `tracing`.
Debug,
/// Hide the build backend output.
Quiet,
}

impl From<BuildOutput> for Printer {
fn from(output: BuildOutput) -> Self {
match output {
BuildOutput::Stderr => Self::Stderr,
BuildOutput::Debug => Self::Debug,
BuildOutput::Quiet => Self::Quiet,
}
}
}
Expand All @@ -1008,6 +1011,7 @@ impl Write for Printer {
Self::Debug => {
debug!("{s}");
}
Self::Quiet => {}
}
Ok(())
}
Expand Down
2 changes: 2 additions & 0 deletions crates/uv-configuration/src/build_options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ pub enum BuildOutput {
Stderr,
/// Send the build backend output to `tracing`.
Debug,
/// Do not display the build backend output.
Quiet,
}

#[derive(Debug, Default, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
Expand Down
87 changes: 62 additions & 25 deletions crates/uv/src/commands/build.rs
Original file line number Diff line number Diff line change
@@ -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::fmt::Write;
use std::path::{Path, PathBuf};

use crate::commands::pip::operations;
use anyhow::Result;
use distribution_filename::SourceDistExtension;
use owo_colors::OwoColorize;
use std::path::{Path, PathBuf};

use uv_auth::store_credentials_from_url;
use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder};
Expand All @@ -26,6 +22,13 @@ use uv_resolver::{FlatIndex, RequiresPython};
use uv_types::{BuildContext, BuildIsolation, HashStrategy};
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.
#[allow(clippy::fn_params_excessive_bools)]
pub(crate) async fn build(
Expand Down Expand Up @@ -72,17 +75,26 @@ pub(crate) async fn build(

match assets {
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) => {
anstream::eprintln!("Successfully built {}", sdist.user_display().bold().cyan());
writeln!(
printer.stderr(),
"Successfully built {}",
sdist.user_display().bold().cyan()
)?;
}
BuiltDistributions::Both(sdist, wheel) => {
anstream::eprintln!(
writeln!(
printer.stderr(),
"Successfully built {} and {}",
sdist.user_display().bold().cyan(),
wheel.user_display().bold().cyan()
);
)?;
}
}

Expand Down Expand Up @@ -356,9 +368,18 @@ async fn build_impl(
let version_id = src.path().file_name().and_then(|name| name.to_str());
let dist = None;

let build_output = match printer {
Printer::Default | Printer::NoProgress | Printer::Verbose => BuildOutput::Stderr,
Printer::Quiet => BuildOutput::Quiet,
};

let assets = match plan {
BuildPlan::SdistToWheel => {
anstream::eprintln!("{}", "Building source distribution...".bold());
writeln!(
printer.stderr(),
"{}",
"Building source distribution...".bold()
)?;

// Build the sdist.
let builder = build_dispatch
Expand All @@ -368,7 +389,7 @@ async fn build_impl(
version_id.map(ToString::to_string),
dist,
BuildKind::Sdist,
BuildOutput::Stderr,
build_output,
)
.await?;
let sdist = builder.build(&output_dir).await?;
Expand All @@ -389,7 +410,11 @@ async fn build_impl(
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.
let builder = build_dispatch
Expand All @@ -399,15 +424,19 @@ async fn build_impl(
version_id.map(ToString::to_string),
dist,
BuildKind::Wheel,
BuildOutput::Stderr,
build_output,
)
.await?;
let wheel = builder.build(&output_dir).await?;

BuiltDistributions::Both(output_dir.join(sdist), output_dir.join(wheel))
}
BuildPlan::Sdist => {
anstream::eprintln!("{}", "Building source distribution...".bold());
writeln!(
printer.stderr(),
"{}",
"Building source distribution...".bold()
)?;

let builder = build_dispatch
.setup_build(
Expand All @@ -416,15 +445,15 @@ async fn build_impl(
version_id.map(ToString::to_string),
dist,
BuildKind::Sdist,
BuildOutput::Stderr,
build_output,
)
.await?;
let sdist = builder.build(&output_dir).await?;

BuiltDistributions::Sdist(output_dir.join(sdist))
}
BuildPlan::Wheel => {
anstream::eprintln!("{}", "Building wheel...".bold());
writeln!(printer.stderr(), "{}", "Building wheel...".bold())?;

let builder = build_dispatch
.setup_build(
Expand All @@ -433,44 +462,52 @@ async fn build_impl(
version_id.map(ToString::to_string),
dist,
BuildKind::Wheel,
BuildOutput::Stderr,
build_output,
)
.await?;
let wheel = builder.build(&output_dir).await?;

BuiltDistributions::Wheel(output_dir.join(wheel))
}
BuildPlan::SdistAndWheel => {
anstream::eprintln!("{}", "Building source distribution...".bold());
writeln!(
printer.stderr(),
"{}",
"Building source distribution...".bold()
)?;
let builder = build_dispatch
.setup_build(
src.path(),
subdirectory,
version_id.map(ToString::to_string),
dist,
BuildKind::Sdist,
BuildOutput::Stderr,
build_output,
)
.await?;
let sdist = builder.build(&output_dir).await?;

anstream::eprintln!("{}", "Building wheel...".bold());
writeln!(printer.stderr(), "{}", "Building wheel...".bold())?;
let builder = build_dispatch
.setup_build(
src.path(),
subdirectory,
version_id.map(ToString::to_string),
dist,
BuildKind::Wheel,
BuildOutput::Stderr,
build_output,
)
.await?;
let wheel = builder.build(&output_dir).await?;

BuiltDistributions::Both(output_dir.join(&sdist), output_dir.join(&wheel))
}
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.
let reader = fs_err::tokio::File::open(src.path()).await?;
Expand All @@ -495,7 +532,7 @@ async fn build_impl(
version_id.map(ToString::to_string),
dist,
BuildKind::Wheel,
BuildOutput::Stderr,
build_output,
)
.await?;
let wheel = builder.build(&output_dir).await?;
Expand Down
35 changes: 35 additions & 0 deletions crates/uv/tests/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1486,3 +1486,38 @@ fn sha() -> Result<()> {

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(())
}
Loading