@@ -980,39 +980,56 @@ impl<'cfg> Workspace<'cfg> {
980
980
if !manifest. patch ( ) . is_empty ( ) {
981
981
emit_warning ( "patch" ) ?;
982
982
}
983
- if manifest. defaulted_resolve_behavior ( ) != self . resolve_behavior {
984
- let package_reason = manifest
985
- . resolve_behavior ( )
986
- . is_none ( )
987
- . then ( || format ! ( r#" implied by edition = "{}""# , manifest. edition( ) ) )
988
- . unwrap_or_default ( ) ;
989
- let workspace_reason = match self . root_maybe ( ) {
983
+ }
984
+ let mut inconsistent_resolvers: Vec < _ > = self
985
+ . members ( )
986
+ . filter ( |p| p. manifest_path ( ) != root_manifest)
987
+ . filter ( |p| p. manifest ( ) . defaulted_resolve_behavior ( ) != self . resolve_behavior )
988
+ . map ( |pkg| {
989
+ format ! (
990
+ r#"package: {} expects resolver = "{}"{}"# ,
991
+ pkg. manifest_path( ) . display( ) ,
992
+ pkg. manifest( )
993
+ . defaulted_resolve_behavior( )
994
+ . to_manifest( )
995
+ . unwrap_or_else( || "1" . into( ) ) ,
996
+ pkg. manifest( )
997
+ . resolve_behavior( )
998
+ . is_none( )
999
+ . then( || format!(
1000
+ r#" implied by edition = "{}""# ,
1001
+ pkg. manifest( ) . edition( )
1002
+ ) )
1003
+ . unwrap_or_default( )
1004
+ )
1005
+ } )
1006
+ . collect ( ) ;
1007
+ if !inconsistent_resolvers. is_empty ( ) {
1008
+ inconsistent_resolvers. insert (
1009
+ 0 ,
1010
+ "expected resolver for package(s) are overridden by the workspace root:" . into ( ) ,
1011
+ ) ;
1012
+ inconsistent_resolvers. push ( format ! (
1013
+ r#"workspace: {} sets resolver = "{}"{}"# ,
1014
+ root_manifest. display( ) ,
1015
+ self . resolve_behavior
1016
+ . to_manifest( )
1017
+ . unwrap_or_else( || "1" . into( ) ) ,
1018
+ match self . root_maybe( ) {
990
1019
MaybePackage :: Package ( p) => {
991
1020
p. manifest( ) . resolve_behavior( ) . is_none( ) . then( || {
992
- format ! ( r#" implied by edition = "{}""# , manifest. edition( ) )
1021
+ format!( r#" implied by edition = "{}""# , p . manifest( ) . edition( ) )
993
1022
} )
994
1023
}
995
1024
MaybePackage :: Virtual ( vm) => {
996
1025
vm. resolve_behavior( ) . is_none( ) . then( || " (default)" . into( ) )
997
1026
}
998
1027
}
999
- . unwrap_or_default ( ) ;
1000
- let msg = format ! (
1001
- "expected resolver for package is overridden by the workspace root:\n \
1002
- package: {} expects resolver = \" {}\" {package_reason}\n \
1003
- workspace: {} sets resolver = \" {}\" {workspace_reason}",
1004
- pkg. manifest_path( ) . display( ) ,
1005
- manifest
1006
- . defaulted_resolve_behavior( )
1007
- . to_manifest( )
1008
- . unwrap_or_else( || "1" . into( ) ) ,
1009
- root_manifest. display( ) ,
1010
- self . resolve_behavior
1011
- . to_manifest( )
1012
- . unwrap_or_else( || "1" . into( ) ) ,
1013
- ) ;
1014
- self . config . shell ( ) . warn ( & msg) ?;
1015
- }
1028
+ . unwrap_or_default( ) ,
1029
+ ) ) ;
1030
+ self . config
1031
+ . shell ( )
1032
+ . warn ( inconsistent_resolvers. join ( "\n " ) ) ?;
1016
1033
}
1017
1034
}
1018
1035
Ok ( ( ) )
0 commit comments