revset: reuse reachable dag-range set to calculate roots

This also removes the use of RevsetExpression::connected() API from the
evaluation engine.
This commit is contained in:
Yuya Nishihara 2023-04-06 21:39:12 +09:00
parent 20aa31336e
commit eef6a77aa4

View file

@ -688,11 +688,9 @@ impl<'index, 'heads> EvaluationContext<'index, 'heads> {
.revset_for_commit_ids(&self.composite_index.heads(&mut candidate_ids.iter())))
}
RevsetExpression::Roots(candidates) => {
let connected_set = self.evaluate(&candidates.connected())?;
let filled: HashSet<_> =
connected_set.iter().map(|entry| entry.position()).collect();
let mut index_entries = vec![];
let candidate_set = self.evaluate(candidates)?;
let (_, filled) = self.collect_dag_range(&*candidate_set, &*candidate_set);
let mut index_entries = vec![];
for candidate in candidate_set.iter() {
if !candidate
.parent_positions()