mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
revlogindex: update DAG hints
Summary: Follow up of D22638454. This makes revlogindex marks its compatible DAG so "all()" fast paths can be used properly. Reviewed By: sfilipco Differential Revision: D22638459 fbshipit-source-id: 074e95b9fccbc486b69a947fec5172662e7dd3b7
This commit is contained in:
parent
a2b44103bd
commit
c68d389d95
@ -814,7 +814,9 @@ impl DagAlgorithm for RevlogIndex {
|
||||
let id = self.vertex_id(name?)?;
|
||||
spans.push(id);
|
||||
}
|
||||
Ok(Set::from_spans_idmap(spans, self.get_snapshot()))
|
||||
let result = Set::from_spans_idmap(spans, self.get_snapshot());
|
||||
result.hints().set_dag(self);
|
||||
Ok(result)
|
||||
}
|
||||
}
|
||||
|
||||
@ -838,7 +840,7 @@ impl DagAlgorithm for RevlogIndex {
|
||||
IdSet::from(Id(0)..=Id(self.len() as u64 - 1))
|
||||
};
|
||||
let result = Set::from_spans_idmap(id_set, self.get_snapshot());
|
||||
result.hints().add_flags(Flags::FULL);
|
||||
result.hints().add_flags(Flags::FULL).set_dag(self);
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
@ -877,8 +879,9 @@ impl DagAlgorithm for RevlogIndex {
|
||||
let map = self.get_snapshot() as Arc<dyn IdConvert + Send + Sync>;
|
||||
let set = Set::from_iter_idmap(iter, map);
|
||||
set.hints()
|
||||
.add_flags(Flags::ID_DESC | Flags::TOPO_DESC | Flags::ANCESTORS);
|
||||
set.hints().set_max_id(max_id);
|
||||
.add_flags(Flags::ID_DESC | Flags::TOPO_DESC | Flags::ANCESTORS)
|
||||
.set_max_id(max_id)
|
||||
.set_dag(self);
|
||||
|
||||
Ok(set)
|
||||
}
|
||||
@ -918,6 +921,7 @@ impl DagAlgorithm for RevlogIndex {
|
||||
|
||||
let idmap = dag;
|
||||
let result = Set::from_spans_idmap(id_spans, idmap);
|
||||
result.hints().set_dag(self);
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
@ -942,8 +946,10 @@ impl DagAlgorithm for RevlogIndex {
|
||||
|
||||
let map = self.get_snapshot() as Arc<dyn IdConvert + Send + Sync>;
|
||||
let set = Set::from_iter_idmap(iter, map);
|
||||
set.hints().add_flags(Flags::ID_ASC);
|
||||
set.hints().set_min_id(min_id);
|
||||
set.hints()
|
||||
.add_flags(Flags::ID_ASC)
|
||||
.set_min_id(min_id)
|
||||
.set_dag(self);
|
||||
Ok(set)
|
||||
}
|
||||
|
||||
@ -968,9 +974,11 @@ impl DagAlgorithm for RevlogIndex {
|
||||
})
|
||||
.map(Ok);
|
||||
let set = Set::from_iter_idmap(iter, self.get_snapshot());
|
||||
set.hints().add_flags(Flags::ID_DESC | Flags::TOPO_DESC);
|
||||
set.hints().set_min_id(min_id);
|
||||
set.hints().set_max_id(max_id);
|
||||
set.hints()
|
||||
.add_flags(Flags::ID_DESC | Flags::TOPO_DESC)
|
||||
.set_min_id(min_id)
|
||||
.set_max_id(max_id)
|
||||
.set_dag(self);
|
||||
Ok(set)
|
||||
}
|
||||
|
||||
@ -1016,7 +1024,9 @@ impl DagAlgorithm for RevlogIndex {
|
||||
let revs: Vec<u32> = id_set.iter().map(|id| id.0 as u32).collect();
|
||||
let gcas = self.gca_revs(&revs, usize::max_value());
|
||||
let spans = IdSet::from_spans(gcas.into_iter().map(|r| Id(r as _)));
|
||||
Ok(Set::from_spans_idmap(spans, self.get_snapshot()))
|
||||
let result = Set::from_spans_idmap(spans, self.get_snapshot());
|
||||
result.hints().set_dag(self);
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
/// Tests if `ancestor` is an ancestor of `descendant`.
|
||||
@ -1080,7 +1090,9 @@ impl DagAlgorithm for RevlogIndex {
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(Set::from_spans_idmap(result_id_set, self.get_snapshot()))
|
||||
let result = Set::from_spans_idmap(result_id_set, self.get_snapshot());
|
||||
result.hints().set_dag(self);
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
/// Calculate the heads of the set.
|
||||
@ -1100,7 +1112,9 @@ impl DagAlgorithm for RevlogIndex {
|
||||
let head_revs: Vec<u32> = head_ids.into_iter().map(|i| i.0 as u32).collect();
|
||||
let result_revs = self.range_revs(&root_revs, &head_revs);
|
||||
let result_id_set = IdSet::from_spans(result_revs.into_iter().map(|r| Id(r as _)));
|
||||
Ok(Set::from_spans_idmap(result_id_set, self.get_snapshot()))
|
||||
let result = Set::from_spans_idmap(result_id_set, self.get_snapshot());
|
||||
result.hints().set_dag(self);
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
/// Calculate `::reachable - ::unreachable`.
|
||||
@ -1170,6 +1184,7 @@ impl DagAlgorithm for RevlogIndex {
|
||||
}
|
||||
|
||||
let result = Set::from_spans_idmap(result, self.get_snapshot());
|
||||
result.hints().set_dag(self);
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
@ -1184,7 +1199,8 @@ impl DagAlgorithm for RevlogIndex {
|
||||
self.phasesets(unreachable_revs, reachable_revs);
|
||||
let only = Set::from_spans_idmap(result_reachable_id_set, self.get_snapshot());
|
||||
let ancestors = Set::from_spans_idmap(result_unreachable_id_set, self.get_snapshot());
|
||||
ancestors.hints().add_flags(Flags::ANCESTORS);
|
||||
ancestors.hints().add_flags(Flags::ANCESTORS).set_dag(self);
|
||||
only.hints().set_dag(self);
|
||||
Ok((only, ancestors))
|
||||
}
|
||||
|
||||
@ -1220,8 +1236,10 @@ impl DagAlgorithm for RevlogIndex {
|
||||
|
||||
let map = self.get_snapshot() as Arc<dyn IdConvert + Send + Sync>;
|
||||
let set = Set::from_iter_idmap(iter, map);
|
||||
set.hints().add_flags(Flags::ID_ASC);
|
||||
set.hints().set_min_id(min_id);
|
||||
set.hints()
|
||||
.add_flags(Flags::ID_ASC)
|
||||
.set_min_id(min_id)
|
||||
.set_dag(self);
|
||||
Ok(set)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user