in focus/internals/src/lib/target_resolver/incremental_bazel_resolver.rs [337:399]
fn add_recursive_package_query_deps(
&self,
recursive_package_queries: BTreeSet<&Label>,
immediate_deps: &BTreeMap<DependencyKey, DependencyValue>,
) -> BTreeMap<DependencyKey, DependencyValue> {
let mut deps: BTreeMap<Label, BTreeSet<DependencyKey>> = BTreeMap::new();
for containing_target in recursive_package_queries {
debug_assert_eq!(containing_target.target_name, TargetName::Ellipsis);
// Given the label `//foo/...`, try to find targets like
// `//foo/bar:baz`, for which `//foo` is a prefix.
for dep_key in immediate_deps.keys() {
match dep_key {
DependencyKey::BazelPackage(Label {
external_repository: None,
path_components,
target_name,
})
| DependencyKey::BazelBuildFile(Label {
external_repository: None,
path_components,
target_name,
}) => {
debug_assert_ne!(target_name, &TargetName::Ellipsis);
if path_components.starts_with(&containing_target.path_components) {
deps.entry((*containing_target).clone())
.or_default()
.insert(dep_key.clone());
}
}
DependencyKey::BazelPackage(Label {
external_repository: Some(_),
path_components: _,
target_name: _,
})
| DependencyKey::BazelBuildFile(Label {
external_repository: Some(_),
path_components: _,
target_name: _,
})
| DependencyKey::Path(_) => {
// None of these could have been associated with a
// `//...` pattern inside the repository itself.
}
key @ DependencyKey::DummyForTesting(_) => {
panic!("Got dummy dependency key: {:?}", key);
}
}
}
}
deps.into_iter()
.map(|(k, v)| {
(
DependencyKey::BazelPackage(k),
DependencyValue::PackageInfo { deps: v },
)
})
.collect()
}