Skip to content

Commit 0131d09

Browse files
committed
move to a function
1 parent 4590e74 commit 0131d09

File tree

1 file changed

+49
-39
lines changed

1 file changed

+49
-39
lines changed

src/cargo/core/resolver/mod.rs

Lines changed: 49 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -159,45 +159,7 @@ pub fn resolve(
159159

160160
// If we have a shell, emit warnings about required deps used as feature.
161161
if print_warnings && config.is_some() {
162-
let mut new_cx = cx.clone();
163-
new_cx.resolve_features = im_rc::HashMap::new();
164-
let mut features_from_dep = HashMap::new();
165-
for (summery, method) in summaries {
166-
for (dep, features) in new_cx
167-
.resolve_features(None, summery, &method, config)
168-
.expect("can not resolve_features for a required summery")
169-
{
170-
features_from_dep.insert((summery.package_id(), dep), features);
171-
}
172-
}
173-
for summery in resolve.sort().iter().rev().map(|id| {
174-
cx.activations
175-
.get(&id.as_activations_key())
176-
.expect("id in dependency graph but not in activations")
177-
.0
178-
.clone()
179-
}) {
180-
for (parent, deps) in cx.parents.edges(&summery.package_id()) {
181-
for dep in deps.iter() {
182-
let features = features_from_dep
183-
.remove(&(*parent, dep.clone()))
184-
.expect("fulfilled a dep that was not needed");
185-
let method = Method::Required {
186-
dev_deps: false,
187-
features: &features,
188-
all_features: false,
189-
uses_default_features: dep.uses_default_features(),
190-
};
191-
for (dep, features) in new_cx
192-
.resolve_features(None, &summery, &method, config)
193-
.expect("can not resolve_features for a used dep")
194-
{
195-
features_from_dep.insert((summery.package_id(), dep), features);
196-
}
197-
}
198-
}
199-
}
200-
assert_eq!(cx.resolve_features, new_cx.resolve_features);
162+
emit_warnings(&cx, &resolve, summaries, config)
201163
}
202164

203165
Ok(resolve)
@@ -1129,3 +1091,51 @@ fn check_duplicate_pkgs_in_lockfile(resolve: &Resolve) -> CargoResult<()> {
11291091
}
11301092
Ok(())
11311093
}
1094+
1095+
/// re-run all used resolve_features so it can print warnings
1096+
fn emit_warnings(
1097+
cx: &Context,
1098+
resolve: &Resolve,
1099+
summaries: &[(Summary, Method<'_>)],
1100+
config: Option<&Config>,
1101+
) {
1102+
let mut new_cx = cx.clone();
1103+
new_cx.resolve_features = im_rc::HashMap::new();
1104+
let mut features_from_dep = HashMap::new();
1105+
for (summery, method) in summaries {
1106+
for (dep, features) in new_cx
1107+
.resolve_features(None, summery, &method, config)
1108+
.expect("can not resolve_features for a required summery")
1109+
{
1110+
features_from_dep.insert((summery.package_id(), dep), features);
1111+
}
1112+
}
1113+
for summery in resolve.sort().iter().rev().map(|id| {
1114+
cx.activations
1115+
.get(&id.as_activations_key())
1116+
.expect("id in dependency graph but not in activations")
1117+
.0
1118+
.clone()
1119+
}) {
1120+
for (parent, deps) in cx.parents.edges(&summery.package_id()) {
1121+
for dep in deps.iter() {
1122+
let features = features_from_dep
1123+
.remove(&(*parent, dep.clone()))
1124+
.expect("fulfilled a dep that was not needed");
1125+
let method = Method::Required {
1126+
dev_deps: false,
1127+
features: &features,
1128+
all_features: false,
1129+
uses_default_features: dep.uses_default_features(),
1130+
};
1131+
for (dep, features) in new_cx
1132+
.resolve_features(None, &summery, &method, config)
1133+
.expect("can not resolve_features for a used dep")
1134+
{
1135+
features_from_dep.insert((summery.package_id(), dep), features);
1136+
}
1137+
}
1138+
}
1139+
}
1140+
assert_eq!(cx.resolve_features, new_cx.resolve_features);
1141+
}

0 commit comments

Comments
 (0)