fn spawn_phabricator_query_thread()

in focus/operations/src/selection.rs [496:526]


fn spawn_phabricator_query_thread(tx: SkimItemSender, sparse_repo_path: PathBuf) {
    fn inner(tx: SkimItemSender, sparse_repo_path: PathBuf) -> Result<()> {
        let repo = git2::Repository::open(sparse_repo_path)?;
        let head_ref = repo.head()?;
        let head_tree = head_ref.peel_to_tree()?;

        let paths = query_phabricator_for_recently_touched_paths()?;

        // The order might be meaningful (e.g. most recent paths listed first),
        // so traverse paths in order rather than collecting into a `HashSet`
        // immediately.
        let mut seen_items = HashSet::new();
        for path in paths {
            if let Some(item) =
                suggest_skim_item_from_path(SkimSource::Phabricator, &head_tree, &path)
            {
                if seen_items.insert(item.clone()) {
                    tx.send(Arc::new(item))?;
                }
            }
        }

        Ok(())
    }

    thread::spawn(move || {
        if let Err(err) = inner(tx, sparse_repo_path) {
            info!(?err, "Error while querying Phabricator");
        }
    });
}