in focus/internals/src/lib/model/repo.rs [706:740]
fn outline_common(
repository: &Repository,
target_set: &HashSet<Target>,
resolution_options: &ResolutionOptions,
app: Arc<App>,
commit_id: Oid,
) -> Result<(PatternSet, ResolutionResult), anyhow::Error> {
let repo_workdir = repository
.workdir()
.ok_or_else(|| anyhow::anyhow!("Repository has no workdir"))?;
let cache_options = CacheOptions::default();
let request = ResolutionRequest {
repo: repo_workdir.to_owned(),
targets: target_set.clone(),
options: resolution_options.clone(),
};
let mut patterns = PatternSet::new();
let resolver = make_routing_resolver()?;
let result = resolver.resolve(&request, &cache_options, app)?;
for path in result.paths.iter() {
let qualified_path = repo_workdir.join(path);
let path = find_closest_directory_with_build_file(repository, commit_id, &qualified_path)
.context("Failed locating closest build file")?
.unwrap_or(qualified_path);
if let Some(path) = treat_path(repo_workdir, &path)? {
patterns.insert(Pattern::Directory {
precedence: LAST,
path,
recursive: true,
});
}
}
Ok((patterns, result))
}