@@ -7,7 +7,6 @@ mod error;
7
7
use fs_err as fs;
8
8
use indoc:: formatdoc;
9
9
use itertools:: Itertools ;
10
- use owo_colors:: OwoColorize ;
11
10
use rustc_hash:: FxHashMap ;
12
11
use serde:: de:: { value, IntoDeserializer , SeqAccess , Visitor } ;
13
12
use serde:: { de, Deserialize , Deserializer } ;
@@ -36,7 +35,7 @@ use uv_pep508::PackageName;
36
35
use uv_pypi_types:: { Requirement , VerbatimParsedUrl } ;
37
36
use uv_python:: { Interpreter , PythonEnvironment } ;
38
37
use uv_static:: EnvVars ;
39
- use uv_types:: { BuildContext , BuildIsolation , SourceBuildTrait } ;
38
+ use uv_types:: { AnyErrorBuild , BuildContext , BuildIsolation , SourceBuildTrait } ;
40
39
41
40
pub use crate :: error:: { Error , MissingHeaderCause } ;
42
41
@@ -325,7 +324,7 @@ impl SourceBuild {
325
324
build_context
326
325
. install ( & resolved_requirements, & venv)
327
326
. await
328
- . map_err ( |err| Error :: RequirementsInstall ( "`build-system.requires`" , err) ) ?;
327
+ . map_err ( |err| Error :: RequirementsInstall ( "`build-system.requires`" , err. into ( ) ) ) ?;
329
328
} else {
330
329
debug ! ( "Proceeding without build isolation" ) ;
331
330
}
@@ -423,15 +422,19 @@ impl SourceBuild {
423
422
let resolved_requirements = build_context
424
423
. resolve ( & default_backend. requirements )
425
424
. await
426
- . map_err ( |err| Error :: RequirementsResolve ( "`setup.py` build" , err) ) ?;
425
+ . map_err ( |err| {
426
+ Error :: RequirementsResolve ( "`setup.py` build" , err. into ( ) )
427
+ } ) ?;
427
428
* resolution = Some ( resolved_requirements. clone ( ) ) ;
428
429
resolved_requirements
429
430
}
430
431
} else {
431
432
build_context
432
433
. resolve ( & pep517_backend. requirements )
433
434
. await
434
- . map_err ( |err| Error :: RequirementsResolve ( "`build-system.requires`" , err) ) ?
435
+ . map_err ( |err| {
436
+ Error :: RequirementsResolve ( "`build-system.requires`" , err. into ( ) )
437
+ } ) ?
435
438
} ,
436
439
)
437
440
}
@@ -622,8 +625,8 @@ impl SourceBuild {
622
625
if !output. status . success ( ) {
623
626
return Err ( Error :: from_command_output (
624
627
format ! (
625
- "Build backend failed to determine metadata through `{}` " ,
626
- format! ( "prepare_metadata_for_build_{}" , self . build_kind) . green ( )
628
+ "Call to `{}.prepare_metadata_for_build_{}` failed " ,
629
+ self . pep517_backend . backend , self . build_kind
627
630
) ,
628
631
& output,
629
632
self . level ,
@@ -745,9 +748,8 @@ impl SourceBuild {
745
748
if !output. status . success ( ) {
746
749
return Err ( Error :: from_command_output (
747
750
format ! (
748
- "Build backend failed to build {} through `{}`" ,
749
- self . build_kind,
750
- format!( "build_{}" , self . build_kind) . green( ) ,
751
+ "Call to `{}.build_{}` failed" ,
752
+ pep517_backend. backend, self . build_kind
751
753
) ,
752
754
& output,
753
755
self . level ,
@@ -761,8 +763,8 @@ impl SourceBuild {
761
763
if !output_dir. join ( & distribution_filename) . is_file ( ) {
762
764
return Err ( Error :: from_command_output (
763
765
format ! (
764
- "Build backend failed to produce {} through `{}`: `{distribution_filename }` not found " ,
765
- self . build_kind , format! ( "build_{}" , self . build_kind) . green ( ) ,
766
+ "Call to `{}.build_{ }` failed " ,
767
+ pep517_backend . backend , self . build_kind
766
768
) ,
767
769
& output,
768
770
self . level ,
@@ -776,11 +778,11 @@ impl SourceBuild {
776
778
}
777
779
778
780
impl SourceBuildTrait for SourceBuild {
779
- async fn metadata ( & mut self ) -> anyhow :: Result < Option < PathBuf > > {
781
+ async fn metadata ( & mut self ) -> Result < Option < PathBuf > , AnyErrorBuild > {
780
782
Ok ( self . get_metadata_without_build ( ) . await ?)
781
783
}
782
784
783
- async fn wheel < ' a > ( & ' a self , wheel_dir : & ' a Path ) -> anyhow :: Result < String > {
785
+ async fn wheel < ' a > ( & ' a self , wheel_dir : & ' a Path ) -> Result < String , AnyErrorBuild > {
784
786
Ok ( self . build ( wheel_dir) . await ?)
785
787
}
786
788
}
@@ -858,8 +860,8 @@ async fn create_pep517_build_environment(
858
860
if !output. status . success ( ) {
859
861
return Err ( Error :: from_command_output (
860
862
format ! (
861
- "Build backend failed to determine requirements with `{}` " ,
862
- format! ( "build_{build_kind}()" ) . green ( )
863
+ "Call to `{}.build_{}` failed " ,
864
+ pep517_backend . backend , build_kind
863
865
) ,
864
866
& output,
865
867
level,
@@ -869,37 +871,27 @@ async fn create_pep517_build_environment(
869
871
) ) ;
870
872
}
871
873
872
- // Read the requirements from the output file.
873
- let contents = fs_err:: read ( & outfile) . map_err ( |err| {
874
- Error :: from_command_output (
875
- format ! (
876
- "Build backend failed to read requirements from `{}`: {err}" ,
877
- format!( "get_requires_for_build_{build_kind}" ) . green( ) ,
878
- ) ,
879
- & output,
880
- level,
881
- package_name,
882
- package_version,
883
- version_id,
884
- )
885
- } ) ?;
886
-
887
- // Deserialize the requirements from the output file.
888
- let extra_requires: Vec < uv_pep508:: Requirement < VerbatimParsedUrl > > =
889
- serde_json:: from_slice :: < Vec < uv_pep508:: Requirement < VerbatimParsedUrl > > > ( & contents)
890
- . map_err ( |err| {
891
- Error :: from_command_output (
892
- format ! (
893
- "Build backend failed to return requirements from `{}`: {err}" ,
894
- format!( "get_requires_for_build_{build_kind}" ) . green( ) ,
895
- ) ,
896
- & output,
897
- level,
898
- package_name,
899
- package_version,
900
- version_id,
901
- )
902
- } ) ?;
874
+ // Read and deserialize the requirements from the output file.
875
+ let read_requires_result = fs_err:: read ( & outfile)
876
+ . map_err ( |err| err. to_string ( ) )
877
+ . and_then ( |contents| serde_json:: from_slice ( & contents) . map_err ( |err| err. to_string ( ) ) ) ;
878
+ let extra_requires: Vec < uv_pep508:: Requirement < VerbatimParsedUrl > > = match read_requires_result
879
+ {
880
+ Ok ( extra_requires) => extra_requires,
881
+ Err ( err) => {
882
+ return Err ( Error :: from_command_output (
883
+ format ! (
884
+ "Call to `{}.get_requires_for_build_{}` failed: {}" ,
885
+ pep517_backend. backend, build_kind, err
886
+ ) ,
887
+ & output,
888
+ level,
889
+ package_name,
890
+ package_version,
891
+ version_id,
892
+ ) )
893
+ }
894
+ } ;
903
895
904
896
// If necessary, lower the requirements.
905
897
let extra_requires = match source_strategy {
@@ -937,15 +929,16 @@ async fn create_pep517_build_environment(
937
929
. cloned ( )
938
930
. chain ( extra_requires)
939
931
. collect ( ) ;
940
- let resolution = build_context
941
- . resolve ( & requirements)
942
- . await
943
- . map_err ( |err| Error :: RequirementsResolve ( "`build-system.requires`" , err) ) ?;
932
+ let resolution = build_context. resolve ( & requirements) . await . map_err ( |err| {
933
+ Error :: RequirementsResolve ( "`build-system.requires`" , AnyErrorBuild :: from ( err) )
934
+ } ) ?;
944
935
945
936
build_context
946
937
. install ( & resolution, venv)
947
938
. await
948
- . map_err ( |err| Error :: RequirementsInstall ( "`build-system.requires`" , err) ) ?;
939
+ . map_err ( |err| {
940
+ Error :: RequirementsInstall ( "`build-system.requires`" , AnyErrorBuild :: from ( err) )
941
+ } ) ?;
949
942
}
950
943
951
944
Ok ( ( ) )
0 commit comments