From b0a2787c5056ebef690e1c3efae92250cdef824b Mon Sep 17 00:00:00 2001 From: Philip Metzger Date: Thu, 6 Jul 2023 23:57:24 +0200 Subject: [PATCH] revsets: Add `descendants_at` and `ancestors_at` They are needed for `next` and `prev`. They behave symmetrically for parents and children. --- lib/src/revset.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/src/revset.rs b/lib/src/revset.rs index d22bb2d352..770d58360d 100644 --- a/lib/src/revset.rs +++ b/lib/src/revset.rs @@ -430,6 +430,15 @@ impl RevsetExpression { }) } + /// Ancestors of `self`, including `self` until `generation` back. + pub fn ancestors_at(self: &Rc, generation: u64) -> Rc { + Rc::new(RevsetExpression::Ancestors { + heads: self.clone(), + generation: generation..(generation + 1), + is_legacy: false, + }) + } + /// Children of `self`. pub fn children(self: &Rc) -> Rc { Rc::new(RevsetExpression::Descendants { @@ -455,6 +464,15 @@ impl RevsetExpression { }) } + /// Descendants of `self`, including `self` until `generation` ahead. + pub fn descendants_at(self: &Rc, generation: u64) -> Rc { + Rc::new(RevsetExpression::Descendants { + roots: self.clone(), + generation: generation..(generation + 1), + is_legacy: false, + }) + } + /// Commits that are descendants of `self` and ancestors of `heads`, both /// inclusive. pub fn dag_range_to(