fn outline_common()

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))
}