Mercurial > hg
changeset 48520:791f5d5f7a96
hg-core: dedup LazyAncestors Iterator impl
… Which has been moved to the vcsgraph crate.
AncestorsIterator cannot yet be removed because it is still being used in
hg-core.
Differential Revision: https://phab.mercurial-scm.org/D11948
author | pacien <pacien.trangirard@pacien.net> |
---|---|
date | Fri, 10 Dec 2021 16:25:02 +0100 |
parents | 35ebe6f824be |
children | 823e906d879d |
files | rust/hg-core/src/ancestors.rs rust/hg-core/src/lib.rs |
diffstat | 2 files changed, 1 insertions(+), 86 deletions(-) [+] |
line wrap: on
line diff
--- a/rust/hg-core/src/ancestors.rs Tue Nov 16 18:54:05 2021 +0100 +++ b/rust/hg-core/src/ancestors.rs Fri Dec 10 16:25:02 2021 +0100 @@ -26,15 +26,6 @@ stoprev: Revision, } -/// Lazy ancestors set, backed by AncestorsIterator -pub struct LazyAncestors<G: Graph + Clone> { - graph: G, - containsiter: AncestorsIterator<G>, - initrevs: Vec<Revision>, - stoprev: Revision, - inclusive: bool, -} - pub struct MissingAncestors<G: Graph> { graph: G, bases: HashSet<Revision>, @@ -165,49 +156,6 @@ } } -impl<G: Graph + Clone> LazyAncestors<G> { - pub fn new( - graph: G, - initrevs: impl IntoIterator<Item = Revision>, - stoprev: Revision, - inclusive: bool, - ) -> Result<Self, GraphError> { - let v: Vec<Revision> = initrevs.into_iter().collect(); - Ok(LazyAncestors { - graph: graph.clone(), - containsiter: AncestorsIterator::new( - graph, - v.iter().cloned(), - stoprev, - inclusive, - )?, - initrevs: v, - stoprev, - inclusive, - }) - } - - pub fn contains(&mut self, rev: Revision) -> Result<bool, GraphError> { - self.containsiter.contains(rev) - } - - pub fn is_empty(&self) -> bool { - self.containsiter.is_empty() - } - - pub fn iter(&self) -> AncestorsIterator<G> { - // the arguments being the same as for self.containsiter, we know - // for sure that AncestorsIterator constructor can't fail - AncestorsIterator::new( - self.graph.clone(), - self.initrevs.iter().cloned(), - self.stoprev, - self.inclusive, - ) - .unwrap() - } -} - impl<G: Graph> MissingAncestors<G> { pub fn new(graph: G, bases: impl IntoIterator<Item = Revision>) -> Self { let mut created = MissingAncestors { @@ -550,39 +498,6 @@ } #[test] - fn test_lazy_iter_contains() { - let mut lazy = - LazyAncestors::new(SampleGraph, vec![11, 13], 0, false).unwrap(); - - let revs: Vec<Revision> = lazy.iter().map(|r| r.unwrap()).collect(); - // compare with iterator tests on the same initial revisions - assert_eq!(revs, vec![8, 7, 4, 3, 2, 1, 0]); - - // contains() results are correct, unaffected by the fact that - // we consumed entirely an iterator out of lazy - assert_eq!(lazy.contains(2), Ok(true)); - assert_eq!(lazy.contains(9), Ok(false)); - } - - #[test] - fn test_lazy_contains_iter() { - let mut lazy = - LazyAncestors::new(SampleGraph, vec![11, 13], 0, false).unwrap(); // reminder: [8, 7, 4, 3, 2, 1, 0] - - assert_eq!(lazy.contains(2), Ok(true)); - assert_eq!(lazy.contains(6), Ok(false)); - - // after consumption of 2 by the inner iterator, results stay - // consistent - assert_eq!(lazy.contains(2), Ok(true)); - assert_eq!(lazy.contains(5), Ok(false)); - - // iter() still gives us a fresh iterator - let revs: Vec<Revision> = lazy.iter().map(|r| r.unwrap()).collect(); - assert_eq!(revs, vec![8, 7, 4, 3, 2, 1, 0]); - } - - #[test] /// Test constructor, add/get bases and heads fn test_missing_bases() -> Result<(), GraphError> { let mut missing_ancestors =
--- a/rust/hg-core/src/lib.rs Tue Nov 16 18:54:05 2021 +0100 +++ b/rust/hg-core/src/lib.rs Fri Dec 10 16:25:02 2021 +0100 @@ -7,7 +7,7 @@ mod ancestors; pub mod dagops; pub mod errors; -pub use ancestors::{AncestorsIterator, LazyAncestors, MissingAncestors}; +pub use ancestors::{AncestorsIterator, MissingAncestors}; pub mod dirstate; pub mod dirstate_tree; pub mod discovery;