@@ -69,6 +69,8 @@ pub enum ProjectWorkspaceKind {
69
69
Cargo {
70
70
/// The workspace as returned by `cargo metadata`.
71
71
cargo : CargoWorkspace ,
72
+ /// Additional `cargo metadata` error. (only populated if retried fetching via `--no-deps` succeeded).
73
+ error : Option < Arc < anyhow:: Error > > ,
72
74
/// The build script results for the workspace.
73
75
build_scripts : WorkspaceBuildScripts ,
74
76
/// The rustc workspace loaded for this workspace. An `Err(None)` means loading has been
@@ -93,7 +95,7 @@ pub enum ProjectWorkspaceKind {
93
95
/// The file in question.
94
96
file : ManifestPath ,
95
97
/// Is this file a cargo script file?
96
- cargo : Option < ( CargoWorkspace , WorkspaceBuildScripts ) > ,
98
+ cargo : Option < ( CargoWorkspace , WorkspaceBuildScripts , Option < Arc < anyhow :: Error > > ) > ,
97
99
/// Environment variables set in the `.cargo/config` file.
98
100
cargo_config_extra_env : FxHashMap < String , String > ,
99
101
} ,
@@ -106,6 +108,7 @@ impl fmt::Debug for ProjectWorkspace {
106
108
match kind {
107
109
ProjectWorkspaceKind :: Cargo {
108
110
cargo,
111
+ error : _,
109
112
build_scripts : _,
110
113
rustc,
111
114
cargo_config_extra_env,
@@ -256,7 +259,7 @@ impl ProjectWorkspace {
256
259
false ,
257
260
progress,
258
261
) {
259
- Ok ( meta) => {
262
+ Ok ( ( meta, _error ) ) => {
260
263
let workspace = CargoWorkspace :: new ( meta, cargo_toml. clone ( ) ) ;
261
264
let buildscripts = WorkspaceBuildScripts :: rustc_crates (
262
265
& workspace,
@@ -301,7 +304,7 @@ impl ProjectWorkspace {
301
304
tracing:: error!( %e, "failed fetching data layout for {cargo_toml:?} workspace" ) ;
302
305
}
303
306
304
- let meta = CargoWorkspace :: fetch_metadata (
307
+ let ( meta, error ) = CargoWorkspace :: fetch_metadata (
305
308
cargo_toml,
306
309
cargo_toml. parent ( ) ,
307
310
config,
@@ -324,6 +327,7 @@ impl ProjectWorkspace {
324
327
build_scripts : WorkspaceBuildScripts :: default ( ) ,
325
328
rustc,
326
329
cargo_config_extra_env,
330
+ error : error. map ( Arc :: new) ,
327
331
} ,
328
332
sysroot,
329
333
rustc_cfg,
@@ -404,10 +408,11 @@ impl ProjectWorkspace {
404
408
let cargo_script =
405
409
CargoWorkspace :: fetch_metadata ( detached_file, dir, config, & sysroot, false , & |_| ( ) )
406
410
. ok ( )
407
- . map ( |ws | {
411
+ . map ( |( ws , error ) | {
408
412
(
409
413
CargoWorkspace :: new ( ws, detached_file. clone ( ) ) ,
410
414
WorkspaceBuildScripts :: default ( ) ,
415
+ error. map ( Arc :: new) ,
411
416
)
412
417
} ) ;
413
418
@@ -440,10 +445,8 @@ impl ProjectWorkspace {
440
445
progress : & dyn Fn ( String ) ,
441
446
) -> anyhow:: Result < WorkspaceBuildScripts > {
442
447
match & self . kind {
443
- ProjectWorkspaceKind :: DetachedFile { cargo : Some ( ( cargo, _) ) , .. }
444
- | ProjectWorkspaceKind :: Cargo { cargo, .. }
445
- if !cargo. no_deps ( ) =>
446
- {
448
+ ProjectWorkspaceKind :: DetachedFile { cargo : Some ( ( cargo, _, None ) ) , .. }
449
+ | ProjectWorkspaceKind :: Cargo { cargo, error : None , .. } => {
447
450
WorkspaceBuildScripts :: run_for_workspace ( config, cargo, progress, & self . sysroot )
448
451
. with_context ( || {
449
452
format ! ( "Failed to run build scripts for {}" , cargo. workspace_root( ) )
@@ -502,7 +505,7 @@ impl ProjectWorkspace {
502
505
pub fn set_build_scripts ( & mut self , bs : WorkspaceBuildScripts ) {
503
506
match & mut self . kind {
504
507
ProjectWorkspaceKind :: Cargo { build_scripts, .. }
505
- | ProjectWorkspaceKind :: DetachedFile { cargo : Some ( ( _, build_scripts) ) , .. } => {
508
+ | ProjectWorkspaceKind :: DetachedFile { cargo : Some ( ( _, build_scripts, _ ) ) , .. } => {
506
509
* build_scripts = bs
507
510
}
508
511
_ => assert_eq ! ( bs, WorkspaceBuildScripts :: default ( ) ) ,
@@ -593,6 +596,7 @@ impl ProjectWorkspace {
593
596
rustc,
594
597
build_scripts,
595
598
cargo_config_extra_env : _,
599
+ error : _,
596
600
} => {
597
601
cargo
598
602
. packages ( )
@@ -648,7 +652,7 @@ impl ProjectWorkspace {
648
652
include : vec ! [ file. to_path_buf( ) ] ,
649
653
exclude : Vec :: new ( ) ,
650
654
} )
651
- . chain ( cargo_script. iter ( ) . flat_map ( |( cargo, build_scripts) | {
655
+ . chain ( cargo_script. iter ( ) . flat_map ( |( cargo, build_scripts, _ ) | {
652
656
cargo. packages ( ) . map ( |pkg| {
653
657
let is_local = cargo[ pkg] . is_local ;
654
658
let pkg_root = cargo[ pkg] . manifest . parent ( ) . to_path_buf ( ) ;
@@ -703,7 +707,7 @@ impl ProjectWorkspace {
703
707
}
704
708
ProjectWorkspaceKind :: DetachedFile { cargo : cargo_script, .. } => {
705
709
sysroot_package_len
706
- + cargo_script. as_ref ( ) . map_or ( 1 , |( cargo, _) | cargo. packages ( ) . len ( ) )
710
+ + cargo_script. as_ref ( ) . map_or ( 1 , |( cargo, _, _ ) | cargo. packages ( ) . len ( ) )
707
711
}
708
712
}
709
713
}
@@ -733,6 +737,7 @@ impl ProjectWorkspace {
733
737
rustc,
734
738
build_scripts,
735
739
cargo_config_extra_env : _,
740
+ error : _,
736
741
} => (
737
742
cargo_to_crate_graph (
738
743
load,
@@ -746,7 +751,7 @@ impl ProjectWorkspace {
746
751
sysroot,
747
752
) ,
748
753
ProjectWorkspaceKind :: DetachedFile { file, cargo : cargo_script, .. } => (
749
- if let Some ( ( cargo, build_scripts) ) = cargo_script {
754
+ if let Some ( ( cargo, build_scripts, _ ) ) = cargo_script {
750
755
cargo_to_crate_graph (
751
756
& mut |path| load ( path) ,
752
757
None ,
@@ -795,12 +800,14 @@ impl ProjectWorkspace {
795
800
rustc,
796
801
cargo_config_extra_env,
797
802
build_scripts : _,
803
+ error : _,
798
804
} ,
799
805
ProjectWorkspaceKind :: Cargo {
800
806
cargo : o_cargo,
801
807
rustc : o_rustc,
802
808
cargo_config_extra_env : o_cargo_config_extra_env,
803
809
build_scripts : _,
810
+ error : _,
804
811
} ,
805
812
) => {
806
813
cargo == o_cargo
@@ -813,12 +820,12 @@ impl ProjectWorkspace {
813
820
(
814
821
ProjectWorkspaceKind :: DetachedFile {
815
822
file,
816
- cargo : Some ( ( cargo_script, _) ) ,
823
+ cargo : Some ( ( cargo_script, _, _ ) ) ,
817
824
cargo_config_extra_env,
818
825
} ,
819
826
ProjectWorkspaceKind :: DetachedFile {
820
827
file : o_file,
821
- cargo : Some ( ( o_cargo_script, _) ) ,
828
+ cargo : Some ( ( o_cargo_script, _, _ ) ) ,
822
829
cargo_config_extra_env : o_cargo_config_extra_env,
823
830
} ,
824
831
) => {
0 commit comments