# HG changeset patch # User pacien # Date 1639149902 -3600 # Node ID 791f5d5f7a96430ac7deb64b7b61769b19de60ff # Parent 35ebe6f824be12a6ac7f78b63a28748faf2e3306 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 diff -r 35ebe6f824be -r 791f5d5f7a96 rust/hg-core/src/ancestors.rs --- 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 { - graph: G, - containsiter: AncestorsIterator, - initrevs: Vec, - stoprev: Revision, - inclusive: bool, -} - pub struct MissingAncestors { graph: G, bases: HashSet, @@ -165,49 +156,6 @@ } } -impl LazyAncestors { - pub fn new( - graph: G, - initrevs: impl IntoIterator, - stoprev: Revision, - inclusive: bool, - ) -> Result { - let v: Vec = 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 { - self.containsiter.contains(rev) - } - - pub fn is_empty(&self) -> bool { - self.containsiter.is_empty() - } - - pub fn iter(&self) -> AncestorsIterator { - // 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 MissingAncestors { pub fn new(graph: G, bases: impl IntoIterator) -> 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 = 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 = 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 = diff -r 35ebe6f824be -r 791f5d5f7a96 rust/hg-core/src/lib.rs --- 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;