Skip to content

Commit e8ba122

Browse files
committed
fix(toml): Don't lose 'public' when inheriting a dep
When inheriting a simple dep, we preserved the package dep's `public` field but lost it when inheriting a detailed dep. This was done by consolidating the code paths. This also reduces the risk of us doing this again in the future.
1 parent bfe62a6 commit e8ba122

File tree

1 file changed

+38
-48
lines changed

1 file changed

+38
-48
lines changed

src/cargo/util/toml/mod.rs

Lines changed: 38 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -983,57 +983,47 @@ fn inner_dependency_inherit_with<'a>(
983983
))
984984
}
985985
inherit()?.get_dependency(name, package_root).map(|ws_dep| {
986-
match ws_dep {
987-
manifest::TomlDependency::Simple(ws_version) => {
988-
if let Some(false) = pkg_dep.default_features() {
989-
default_features_msg(name, None, warnings);
990-
}
991-
manifest::TomlDependency::Detailed(manifest::TomlDetailedDependency {
992-
version: Some(ws_version),
993-
optional: pkg_dep.optional,
994-
features: pkg_dep.features.clone(),
995-
public: pkg_dep.public,
996-
..Default::default()
997-
})
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+
match (pkg_dep.default_features(), merged_dep.default_features()) {
994+
// member: default-features = true and
995+
// workspace: default-features = false should turn on
996+
// default-features
997+
(Some(true), Some(false)) => {
998+
merged_dep.default_features = Some(true);
998999
}
999-
manifest::TomlDependency::Detailed(ws_dep) => {
1000-
let mut merged_dep = ws_dep.clone();
1001-
match (pkg_dep.default_features(), merged_dep.default_features()) {
1002-
// member: default-features = true and
1003-
// workspace: default-features = false should turn on
1004-
// default-features
1005-
(Some(true), Some(false)) => {
1006-
merged_dep.default_features = Some(true);
1007-
}
1008-
// member: default-features = false and
1009-
// workspace: default-features = true should ignore member
1010-
// default-features
1011-
(Some(false), Some(true)) => {
1012-
default_features_msg(name, Some(true), warnings);
1013-
}
1014-
// member: default-features = false and
1015-
// workspace: dep = "1.0" should ignore member default-features
1016-
(Some(false), None) => {
1017-
default_features_msg(name, None, warnings);
1018-
}
1019-
_ => {}
1020-
}
1021-
merged_dep.features = match (merged_dep.features.clone(), pkg_dep.features.clone())
1022-
{
1023-
(Some(dep_feat), Some(inherit_feat)) => Some(
1024-
dep_feat
1025-
.into_iter()
1026-
.chain(inherit_feat)
1027-
.collect::<Vec<String>>(),
1028-
),
1029-
(Some(dep_fet), None) => Some(dep_fet),
1030-
(None, Some(inherit_feat)) => Some(inherit_feat),
1031-
(None, None) => None,
1032-
};
1033-
merged_dep.optional = pkg_dep.optional;
1034-
manifest::TomlDependency::Detailed(merged_dep)
1000+
// member: default-features = false and
1001+
// workspace: default-features = true should ignore member
1002+
// default-features
1003+
(Some(false), Some(true)) => {
1004+
default_features_msg(name, Some(true), warnings);
10351005
}
1006+
// member: default-features = false and
1007+
// workspace: dep = "1.0" should ignore member default-features
1008+
(Some(false), None) => {
1009+
default_features_msg(name, None, warnings);
1010+
}
1011+
_ => {}
10361012
}
1013+
merged_dep.features = match (merged_dep.features.clone(), pkg_dep.features.clone()) {
1014+
(Some(dep_feat), Some(inherit_feat)) => Some(
1015+
dep_feat
1016+
.into_iter()
1017+
.chain(inherit_feat)
1018+
.collect::<Vec<String>>(),
1019+
),
1020+
(Some(dep_fet), None) => Some(dep_fet),
1021+
(None, Some(inherit_feat)) => Some(inherit_feat),
1022+
(None, None) => None,
1023+
};
1024+
merged_dep.optional = pkg_dep.optional;
1025+
merged_dep.public = pkg_dep.public;
1026+
manifest::TomlDependency::Detailed(merged_dep)
10371027
})
10381028
}
10391029

0 commit comments

Comments
 (0)