let keep = |p: &PackageId| pre_patch_keep(p) && !avoid_patch_ids.contains(p);
+ let dev_deps = ws.require_optional_deps() || has_dev_units == HasDevUnits::Yes;
// In the case where a previous instance of resolve is available, we
// want to lock as many packages as possible to the previous version
// without disturbing the graph structure.
if let Some(r) = previous {
trace!("previous: {:?}", r);
- register_previous_locks(ws, registry, r, &keep);
+ register_previous_locks(ws, registry, r, &keep, dev_deps);
}
// Everything in the previous lock file we want to keep is prioritized
// in dependency selection if it comes up, aka we want to have
registry.add_sources(Some(member.package_id().source_id()))?;
}
- let dev_deps = ws.require_optional_deps() || has_dev_units == HasDevUnits::Yes;
let summaries: Vec<(Summary, ResolveOpts)> = ws
.members_with_features(specs, cli_features)?
.into_iter()
registry: &mut PackageRegistry<'_>,
resolve: &Resolve,
keep: &dyn Fn(&PackageId) -> bool,
+ dev_deps: bool,
) {
let path_pkg = |id: SourceId| {
if !id.is_path() {
continue;
}
+ // If dev-dependencies aren't being resolved, skip them.
+ if !dep.is_transitive() && !dev_deps {
+ continue;
+ }
+
// If this is a path dependency, then try to push it onto our
// worklist.
if let Some(pkg) = path_pkg(dep.source_id()) {
.build();
p.cargo("check").build_std().target_host().run();
- p.cargo("build").build_std().target_host().run();
+ p.cargo("build")
+ .build_std()
+ .target_host()
+ // Importantly, this should not say [UPDATING]
+ // There have been multiple bugs where every build triggers and update.
+ .with_stderr(
+ "[COMPILING] foo v0.0.1 [..]\n\
+ [FINISHED] dev [..]",
+ )
+ .run();
p.cargo("run").build_std().target_host().run();
p.cargo("test").build_std().target_host().run();