Skip to content

Commit 1b7a99f

Browse files
David Tolnaymeta-codesync[bot]
authored andcommitted
Do not create public alias for omitted top-level deps
Summary: Previously, a workspace member fixup containing `omit_deps` would cause the dependency to be omitted as a dependency of the workspace member, and would **usually** also skip generating Rust library targets and `alias` for that dependency, effectively omitting it from the dependency graph. Except in the case that some other transitive dependency path to that dependency existed, in which case Rust library targets would be produced (correct behavior) and as an unintended side effect a publi `alias` target would also be produced. This diff fixes the unintended effect by making workspace member `omit_deps` cause `alias` targets to be omitted for that dependency. You will only get `alias` targets for things that are actually a dependency of some workspace member after taking into account `omit_deps` fixups, whether or not the thing is part of the transitive dependency graph somewhere. Reviewed By: capickett Differential Revision: D116041689 fbshipit-source-id: 9212d429b077a587255a5c35b857ca7f916082bb
1 parent 65703c6 commit 1b7a99f

1 file changed

Lines changed: 16 additions & 24 deletions

File tree

src/index.rs

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -180,30 +180,22 @@ impl<'meta> Index<'meta> {
180180

181181
// Compute public set, with pkgid mapped to rename if it has one. Public set is
182182
// anything in top_levels, or first-order dependencies of any workspace member.
183-
index.public_targets = index
184-
.workspace_members
185-
.iter()
186-
.flat_map(|member| &index.pkgid_to_node[&member.id].deps)
187-
.flat_map(|node_dep| {
188-
let pkg = &index.pkgid_to_pkg[&node_dep.pkg];
189-
node_dep.dep_kinds.iter().map(|dep_kind| {
190-
let name = node_dep
191-
.name
192-
.as_deref()
193-
.or(dep_kind.extern_name.as_deref())
194-
.unwrap();
195-
let target_req = dep_kind.target_req();
196-
let opt_rename = dep_renamed.get(name).cloned();
197-
((pkg.id, target_req), opt_rename)
198-
})
199-
})
200-
.chain(top_levels.iter().flat_map(|&pkgid| {
201-
[
202-
((pkgid, TargetReq::Lib), None),
203-
((pkgid, TargetReq::EveryBin), None),
204-
]
205-
}))
206-
.collect::<BTreeMap<_, _>>();
183+
let mut public_targets = BTreeMap::new();
184+
for platform_name in config.platform.keys() {
185+
for member in &index.workspace_members {
186+
for target in &member.targets {
187+
for dep in index.resolved_deps_for_target(member, target, platform_name) {
188+
let rename = dep_renamed.get(dep.rename).copied();
189+
public_targets.insert((dep.package.id, dep.dep_kind.target_req()), rename);
190+
}
191+
}
192+
}
193+
}
194+
if let Some(top_level) = top_levels {
195+
public_targets.insert((top_level, TargetReq::Lib), None);
196+
public_targets.insert((top_level, TargetReq::EveryBin), None);
197+
}
198+
index.public_targets = public_targets;
207199

208200
for (&(id, _), &rename) in &index.public_targets {
209201
index.public_packages.insert(id, rename);

0 commit comments

Comments
 (0)