@@ -964,7 +964,7 @@ fn dependency_inherit_with<'a>(
964964}
965965
966966fn inner_dependency_inherit_with < ' a > (
967- dependency : manifest:: TomlInheritedDependency ,
967+ pkg_dep : manifest:: TomlInheritedDependency ,
968968 name : & str ,
969969 inherit : & dyn Fn ( ) -> CargoResult < & ' a InheritableFields > ,
970970 package_root : & Path ,
@@ -982,64 +982,61 @@ fn inner_dependency_inherit_with<'a>(
982982 this could become a hard error in the future"
983983 ) )
984984 }
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 ) ;
10051012 }
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) ;
10411023 }
1024+ _ => { }
10421025 }
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)
10431040 } )
10441041}
10451042
0 commit comments