From d7ea1d5bd7d9908f84e39983b00e919baaf96814 Mon Sep 17 00:00:00 2001 From: Philip Metzger Date: Sun, 18 Feb 2024 18:57:55 +0100 Subject: [PATCH] lib: Add `RevsetExpression::filtered()`. This allows users to easily filter a commit range by conflicts, which will be needed for `next/prev` further down in the next commit. Users which benefit from it were also migrated. --- cli/src/cli_util.rs | 5 ++--- lib/src/revset.rs | 7 +++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/cli/src/cli_util.rs b/cli/src/cli_util.rs index 18aad423fc1..d7ef071108e 100644 --- a/cli/src/cli_util.rs +++ b/cli/src/cli_util.rs @@ -1418,9 +1418,8 @@ See https://github.com/martinvonz/jj/blob/main/docs/working-copy.md#stale-workin // are millions of commits added to the repo, assuming the revset engine can // efficiently skip non-conflicting commits. Filter out empty commits mostly so // `jj new ` doesn't result in a message about new conflicts. - let conflicts = RevsetExpression::filter(RevsetFilterPredicate::HasConflict).intersection( - &RevsetExpression::filter(RevsetFilterPredicate::File(FilesetExpression::all())), - ); + let conflicts = RevsetExpression::filter(RevsetFilterPredicate::HasConflict) + .filtered(RevsetFilterPredicate::File(FilesetExpression::all())); let removed_conflicts_expr = new_heads.range(&old_heads).intersection(&conflicts); let added_conflicts_expr = old_heads.range(&new_heads).intersection(&conflicts); diff --git a/lib/src/revset.rs b/lib/src/revset.rs index ff5d86a9974..dbbdb22dc8c 100644 --- a/lib/src/revset.rs +++ b/lib/src/revset.rs @@ -356,6 +356,13 @@ impl RevsetExpression { }) } + /// Filter all commits by `predicate` in `self`. + pub fn filtered( + self: &Rc, + predicate: RevsetFilterPredicate, + ) -> Rc { + self.intersection(&RevsetExpression::filter(predicate)) + } /// Commits that are descendants of `self` and ancestors of `heads`, both /// inclusive. pub fn dag_range_to(