@@ -59,13 +59,50 @@ impl WorkspaceResolve {
59
59
& self ,
60
60
package_id : PackageId ,
61
61
target_kind : & TargetKind ,
62
- ) -> Vec < Package > {
62
+ ) -> Result < Vec < Package > > {
63
63
assert ! ( self . packages. contains_key( & package_id) ) ;
64
- self . resolve
64
+ let dependencies = self
65
+ . resolve
65
66
. package_dependencies_for_target_kind ( package_id, target_kind)
66
67
. iter ( )
67
68
. map ( |id| self . packages [ id] . clone ( ) )
68
- . collect_vec ( )
69
+ . collect_vec ( ) ;
70
+
71
+ let re_exported = dependencies
72
+ . iter ( )
73
+ . flat_map ( |dependency| {
74
+ let package_dependencies = self
75
+ . resolve
76
+ . package_dependencies_for_target_kind ( dependency. id , target_kind) ;
77
+ dependency
78
+ . manifest
79
+ . summary
80
+ . re_export_cairo_plugins
81
+ . iter ( )
82
+ . map ( move |plugin_name| {
83
+ package_dependencies
84
+ . iter ( )
85
+ . find ( |id| id. name == * plugin_name)
86
+ . map ( |id| {
87
+ self . packages . get ( id) . expect ( "workspace resolve packages must include all dependency graph nodes" ) . clone ( )
88
+ } )
89
+ . filter ( |package| package. is_cairo_plugin ( ) )
90
+ . map ( Ok )
91
+ . unwrap_or_else ( || {
92
+ bail ! (
93
+ "package `{}` cannot re-export cairo plugin `{plugin_name}` which is not a dependency of `{}`" ,
94
+ dependency. id. name, dependency. id. name)
95
+ } )
96
+ } )
97
+
98
+ } )
99
+ . collect_vec ( ) ;
100
+
101
+ dependencies
102
+ . into_iter ( )
103
+ . map ( Ok )
104
+ . chain ( re_exported)
105
+ . collect :: < Result < Vec < Package > > > ( )
69
106
}
70
107
71
108
/// Get all dependencies with allowed prebuilt macros for a given package.
@@ -517,21 +554,23 @@ fn cairo_compilation_unit_for_target(
517
554
. iter ( )
518
555
. find ( |component| component. package . id == member. id )
519
556
. unwrap ( ) ;
520
- let mut test_package_deps = solution. component_dependencies ( member_component, & components) ;
521
- test_package_deps. push ( CompilationUnitDependency :: Library (
522
- member_component. id . clone ( ) ,
523
- ) ) ;
557
+ let mut test_package_deps = solution. component_dependencies ( member_component, & components) ?;
558
+ if is_integration_test {
559
+ test_package_deps. push ( CompilationUnitDependency :: Library (
560
+ member_component. id . clone ( ) ,
561
+ ) ) ;
562
+ }
524
563
525
564
let dependencies_for_components: Vec < _ > = components
526
565
. iter ( )
527
566
. map ( |component| {
528
- if component. package . id == test_package_id {
567
+ Ok ( if component. package . id == test_package_id {
529
568
test_package_deps. clone ( )
530
569
} else {
531
- solution. component_dependencies ( component, & components)
532
- }
570
+ solution. component_dependencies ( component, & components) ?
571
+ } )
533
572
} )
534
- . collect ( ) ;
573
+ . collect :: < Result < Vec < _ > > > ( ) ? ;
535
574
536
575
for ( component, dependencies) in zip ( & mut components, dependencies_for_components) {
537
576
component. dependencies = dependencies;
@@ -727,14 +766,14 @@ impl<'a> PackageSolutionCollector<'a> {
727
766
& self ,
728
767
component : & CompilationUnitComponent ,
729
768
components : & [ CompilationUnitComponent ] ,
730
- ) -> Vec < CompilationUnitDependency > {
769
+ ) -> Result < Vec < CompilationUnitDependency > > {
731
770
let package_id = component. id . package_id ;
732
771
let component_target_kind = self . target_kind . as_ref ( ) . unwrap ( ) ;
733
772
734
773
// Those are direct dependencies of the component.
735
774
let dependencies_packages = self
736
775
. resolve
737
- . package_dependencies ( package_id, component_target_kind) ;
776
+ . package_dependencies ( package_id, component_target_kind) ? ;
738
777
739
778
// We iterate over all the compilation unit components to get dependency's version.
740
779
let mut dependencies: Vec < _ > = components
@@ -760,10 +799,8 @@ impl<'a> PackageSolutionCollector<'a> {
760
799
dependencies. push ( CompilationUnitDependency :: Library ( component. id . clone ( ) ) ) ;
761
800
}
762
801
763
- let plugin_dependencies = self
764
- . resolve
765
- . package_dependencies ( package_id, component_target_kind)
766
- . into_iter ( )
802
+ let plugin_dependencies = dependencies_packages
803
+ . iter ( )
767
804
. filter ( |package| package. is_cairo_plugin ( ) )
768
805
. map ( |package| {
769
806
CompilationUnitDependency :: Plugin ( CompilationUnitComponentId {
@@ -773,7 +810,7 @@ impl<'a> PackageSolutionCollector<'a> {
773
810
. collect :: < Vec < _ > > ( ) ;
774
811
775
812
dependencies. extend ( plugin_dependencies) ;
776
- dependencies
813
+ Ok ( dependencies)
777
814
}
778
815
779
816
pub fn show_warnings ( self ) {
0 commit comments