@@ -964,7 +964,7 @@ fn dependency_inherit_with<'a>(
964
964
}
965
965
966
966
fn inner_dependency_inherit_with < ' a > (
967
- dependency : manifest:: TomlInheritedDependency ,
967
+ pkg_dep : manifest:: TomlInheritedDependency ,
968
968
name : & str ,
969
969
inherit : & dyn Fn ( ) -> CargoResult < & ' a InheritableFields > ,
970
970
package_root : & Path ,
@@ -982,64 +982,61 @@ fn inner_dependency_inherit_with<'a>(
982
982
this could become a hard error in the future"
983
983
) )
984
984
}
985
- inherit ( ) ?. get_dependency ( name, package_root) . map ( |d| {
986
- match d {
987
- manifest:: TomlDependency :: Simple ( s) => {
988
- if let Some ( false ) = dependency. default_features ( ) {
989
- default_features_msg ( name, None , warnings) ;
990
- }
991
- if dependency. optional . is_some ( )
992
- || dependency. features . is_some ( )
993
- || dependency. public . is_some ( )
994
- {
995
- manifest:: TomlDependency :: Detailed ( manifest:: TomlDetailedDependency {
996
- version : Some ( s) ,
997
- optional : dependency. optional ,
998
- features : dependency. features . clone ( ) ,
999
- public : dependency. public ,
1000
- ..Default :: default ( )
1001
- } )
1002
- } else {
1003
- manifest:: TomlDependency :: Simple ( s)
1004
- }
985
+ inherit ( ) ?. get_dependency ( name, package_root) . map ( |ws_dep| {
986
+ let mut merged_dep = match ws_dep {
987
+ manifest:: TomlDependency :: Simple ( ws_version) => manifest:: TomlDetailedDependency {
988
+ version : Some ( ws_version) ,
989
+ ..Default :: default ( )
990
+ } ,
991
+ manifest:: TomlDependency :: Detailed ( ws_dep) => ws_dep. clone ( ) ,
992
+ } ;
993
+ let manifest:: TomlInheritedDependency {
994
+ workspace : _,
995
+
996
+ features,
997
+ optional,
998
+ default_features,
999
+ default_features2,
1000
+ public,
1001
+
1002
+ _unused_keys : _,
1003
+ } = & pkg_dep;
1004
+ let default_features = default_features. or ( * default_features2) ;
1005
+
1006
+ match ( default_features, merged_dep. default_features ( ) ) {
1007
+ // member: default-features = true and
1008
+ // workspace: default-features = false should turn on
1009
+ // default-features
1010
+ ( Some ( true ) , Some ( false ) ) => {
1011
+ merged_dep. default_features = Some ( true ) ;
1005
1012
}
1006
- manifest:: TomlDependency :: Detailed ( d) => {
1007
- let mut d = d. clone ( ) ;
1008
- match ( dependency. default_features ( ) , d. default_features ( ) ) {
1009
- // member: default-features = true and
1010
- // workspace: default-features = false should turn on
1011
- // default-features
1012
- ( Some ( true ) , Some ( false ) ) => {
1013
- d. default_features = Some ( true ) ;
1014
- }
1015
- // member: default-features = false and
1016
- // workspace: default-features = true should ignore member
1017
- // default-features
1018
- ( Some ( false ) , Some ( true ) ) => {
1019
- default_features_msg ( name, Some ( true ) , warnings) ;
1020
- }
1021
- // member: default-features = false and
1022
- // workspace: dep = "1.0" should ignore member default-features
1023
- ( Some ( false ) , None ) => {
1024
- default_features_msg ( name, None , warnings) ;
1025
- }
1026
- _ => { }
1027
- }
1028
- d. features = match ( d. features . clone ( ) , dependency. features . clone ( ) ) {
1029
- ( Some ( dep_feat) , Some ( inherit_feat) ) => Some (
1030
- dep_feat
1031
- . into_iter ( )
1032
- . chain ( inherit_feat)
1033
- . collect :: < Vec < String > > ( ) ,
1034
- ) ,
1035
- ( Some ( dep_fet) , None ) => Some ( dep_fet) ,
1036
- ( None , Some ( inherit_feat) ) => Some ( inherit_feat) ,
1037
- ( None , None ) => None ,
1038
- } ;
1039
- d. optional = dependency. optional ;
1040
- manifest:: TomlDependency :: Detailed ( d)
1013
+ // member: default-features = false and
1014
+ // workspace: default-features = true should ignore member
1015
+ // default-features
1016
+ ( Some ( false ) , Some ( true ) ) => {
1017
+ default_features_msg ( name, Some ( true ) , warnings) ;
1018
+ }
1019
+ // member: default-features = false and
1020
+ // workspace: dep = "1.0" should ignore member default-features
1021
+ ( Some ( false ) , None ) => {
1022
+ default_features_msg ( name, None , warnings) ;
1041
1023
}
1024
+ _ => { }
1042
1025
}
1026
+ merged_dep. features = match ( merged_dep. features . clone ( ) , features. clone ( ) ) {
1027
+ ( Some ( dep_feat) , Some ( inherit_feat) ) => Some (
1028
+ dep_feat
1029
+ . into_iter ( )
1030
+ . chain ( inherit_feat)
1031
+ . collect :: < Vec < String > > ( ) ,
1032
+ ) ,
1033
+ ( Some ( dep_fet) , None ) => Some ( dep_fet) ,
1034
+ ( None , Some ( inherit_feat) ) => Some ( inherit_feat) ,
1035
+ ( None , None ) => None ,
1036
+ } ;
1037
+ merged_dep. optional = * optional;
1038
+ merged_dep. public = * public;
1039
+ manifest:: TomlDependency :: Detailed ( merged_dep)
1043
1040
} )
1044
1041
}
1045
1042
0 commit comments