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