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

Use rich diagnostic formatting for early build failures #9041

Merged
merged 1 commit into from
Nov 12, 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
11 changes: 11 additions & 0 deletions crates/uv/src/commands/pip/compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,17 @@ pub(crate) async fn pip_compile(
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(operations::Error::Requirements(uv_requirements::Error::DownloadAndBuild(
dist,
err,
))) => {
diagnostics::fetch_and_build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(operations::Error::Requirements(uv_requirements::Error::Build(dist, err))) => {
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(err) => return Err(err.into()),
};

Expand Down
11 changes: 11 additions & 0 deletions crates/uv/src/commands/pip/install.rs
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,17 @@ pub(crate) async fn pip_install(
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(operations::Error::Requirements(uv_requirements::Error::DownloadAndBuild(
dist,
err,
))) => {
diagnostics::fetch_and_build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(operations::Error::Requirements(uv_requirements::Error::Build(dist, err))) => {
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(err) => return Err(err.into()),
};

Expand Down
11 changes: 11 additions & 0 deletions crates/uv/src/commands/pip/sync.rs
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,17 @@ pub(crate) async fn pip_sync(
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(operations::Error::Requirements(uv_requirements::Error::DownloadAndBuild(
dist,
err,
))) => {
diagnostics::fetch_and_build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(operations::Error::Requirements(uv_requirements::Error::Build(dist, err))) => {
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(err) => return Err(err.into()),
};

Expand Down
12 changes: 12 additions & 0 deletions crates/uv/src/commands/project/add.rs
Original file line number Diff line number Diff line change
Expand Up @@ -691,6 +691,18 @@ pub(crate) async fn add(
diagnostics::build(dist, err);
Ok(ExitStatus::Failure)
}
ProjectError::Operation(pip::operations::Error::Requirements(
uv_requirements::Error::DownloadAndBuild(dist, err),
)) => {
diagnostics::fetch_and_build(dist, err);
Ok(ExitStatus::Failure)
}
ProjectError::Operation(pip::operations::Error::Requirements(
uv_requirements::Error::Build(dist, err),
)) => {
diagnostics::build(dist, err);
Ok(ExitStatus::Failure)
}
err => {
// Revert the changes to the `pyproject.toml`, if necessary.
if modified {
Expand Down
12 changes: 12 additions & 0 deletions crates/uv/src/commands/project/export.rs
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,18 @@ pub(crate) async fn export(
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(ProjectError::Operation(pip::operations::Error::Requirements(
uv_requirements::Error::DownloadAndBuild(dist, err),
))) => {
diagnostics::fetch_and_build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(ProjectError::Operation(pip::operations::Error::Requirements(
uv_requirements::Error::Build(dist, err),
))) => {
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(err) => return Err(err.into()),
};

Expand Down
13 changes: 12 additions & 1 deletion crates/uv/src/commands/project/lock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,18 @@ pub(crate) async fn lock(
diagnostics::build(dist, err);
Ok(ExitStatus::Failure)
}

Err(ProjectError::Operation(pip::operations::Error::Requirements(
uv_requirements::Error::DownloadAndBuild(dist, err),
))) => {
diagnostics::fetch_and_build(dist, err);
Ok(ExitStatus::Failure)
}
Err(ProjectError::Operation(pip::operations::Error::Requirements(
uv_requirements::Error::Build(dist, err),
))) => {
diagnostics::build(dist, err);
Ok(ExitStatus::Failure)
}
Err(err) => Err(err.into()),
}
}
Expand Down
36 changes: 36 additions & 0 deletions crates/uv/src/commands/project/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,18 @@ pub(crate) async fn run(
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(ProjectError::Operation(operations::Error::Requirements(
uv_requirements::Error::DownloadAndBuild(dist, err),
))) => {
diagnostics::fetch_and_build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(ProjectError::Operation(operations::Error::Requirements(
uv_requirements::Error::Build(dist, err),
))) => {
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(err) => return Err(err.into()),
};

Expand Down Expand Up @@ -646,6 +658,18 @@ pub(crate) async fn run(
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(ProjectError::Operation(operations::Error::Requirements(
uv_requirements::Error::DownloadAndBuild(dist, err),
))) => {
diagnostics::fetch_and_build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(ProjectError::Operation(operations::Error::Requirements(
uv_requirements::Error::Build(dist, err),
))) => {
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(err) => return Err(err.into()),
};

Expand Down Expand Up @@ -849,6 +873,18 @@ pub(crate) async fn run(
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(ProjectError::Operation(operations::Error::Requirements(
uv_requirements::Error::DownloadAndBuild(dist, err),
))) => {
diagnostics::fetch_and_build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(ProjectError::Operation(operations::Error::Requirements(
uv_requirements::Error::Build(dist, err),
))) => {
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(ProjectError::Operation(operations::Error::Requirements(err))) => {
let err = miette::Report::msg(format!("{err}"))
.context("Invalid `--with` requirement");
Expand Down
12 changes: 12 additions & 0 deletions crates/uv/src/commands/project/sync.rs
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,18 @@ pub(crate) async fn sync(
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(ProjectError::Operation(operations::Error::Requirements(
uv_requirements::Error::DownloadAndBuild(dist, err),
))) => {
diagnostics::fetch_and_build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(ProjectError::Operation(operations::Error::Requirements(
uv_requirements::Error::Build(dist, err),
))) => {
diagnostics::build(dist, err);
return Ok(ExitStatus::Failure);
}
Err(err) => return Err(err.into()),
};

Expand Down
19 changes: 9 additions & 10 deletions crates/uv/tests/it/lock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15666,20 +15666,19 @@ fn lock_invalid_project_table() -> Result<()> {

uv_snapshot!(context.filters(), context.lock().current_dir(context.temp_dir.join("a")), @r###"
success: false
exit_code: 2
exit_code: 1
----- stdout -----

----- stderr -----
Using CPython 3.12.[X] interpreter at: [PYTHON-3.12]
error: Failed to build `b @ file://[TEMP_DIR]/b`
Caused by: Failed to extract static metadata from `pyproject.toml`
Caused by: `pyproject.toml` is using the `[project]` table, but the required `project.name` field is not set.
Caused by: TOML parse error at line 2, column 10
|
2 | [project.urls]
| ^^^^^^^
missing field `name`

× Failed to build `b @ file://[TEMP_DIR]/b`
├─▶ Failed to extract static metadata from `pyproject.toml`
├─▶ `pyproject.toml` is using the `[project]` table, but the required `project.name` field is not set.
╰─▶ TOML parse error at line 2, column 10
|
2 | [project.urls]
| ^^^^^^^
missing field `name`
"###);

Ok(())
Expand Down
23 changes: 11 additions & 12 deletions crates/uv/tests/it/pip_compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1871,12 +1871,12 @@ fn compile_git_mismatched_name() -> Result<()> {
uv_snapshot!(context.filters(), context.pip_compile()
.arg("requirements.in"), @r###"
success: false
exit_code: 2
exit_code: 1
----- stdout -----

----- stderr -----
error: Failed to download and build `dask @ git+https://github.com/pallets/[email protected]`
Caused by: Package metadata name `flask` does not match given name `dask`
× Failed to download and build `dask @ git+https://github.com/pallets/[email protected]`
╰─▶ Package metadata name `flask` does not match given name `dask`
"###
);

Expand Down Expand Up @@ -12017,18 +12017,17 @@ fn git_source_missing_tag() -> Result<()> {
uv_snapshot!(filters, context.pip_compile()
.arg("pyproject.toml"), @r###"
success: false
exit_code: 2
exit_code: 1
----- stdout -----

----- stderr -----
error: Failed to download and build `uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@missing`
Caused by: Git operation failed
Caused by: failed to clone into: [CACHE_DIR]/git-v0/db/8dab139913c4b566
Caused by: failed to fetch tag `missing`
Caused by: process didn't exit successfully: `git fetch --force --update-head-ok 'https://github.com/astral-test/uv-public-pypackage' '+refs/tags/missing:refs/remotes/origin/tags/missing'` (exit status: 128)
--- stderr
fatal: couldn't find remote ref refs/tags/missing

× Failed to download and build `uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@missing`
├─▶ Git operation failed
├─▶ failed to clone into: [CACHE_DIR]/git-v0/db/8dab139913c4b566
├─▶ failed to fetch tag `missing`
╰─▶ process didn't exit successfully: `git fetch --force --update-head-ok 'https://github.com/astral-test/uv-public-pypackage' '+refs/tags/missing:refs/remotes/origin/tags/missing'` (exit status: 128)
--- stderr
fatal: couldn't find remote ref refs/tags/missing
"###);

Ok(())
Expand Down
Loading
Loading