ok/jj
1
0
Fork 0
forked from mirrors/jj

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.
This commit is contained in:
Philip Metzger 2024-02-18 18:57:55 +01:00 committed by Philip Metzger
parent c9b3d64ce5
commit 0d9000271e
3 changed files with 13 additions and 5 deletions

View file

@ -1408,9 +1408,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 <conflicted commit>` 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);

View file

@ -95,8 +95,10 @@ pub(crate) fn cmd_status(
// Ancestors with conflicts, excluding the current working copy commit.
let ancestors_conflicts = workspace_command
.attach_revset_evaluator(
RevsetExpression::filter(RevsetFilterPredicate::HasConflict)
.intersection(&wc_revset.parents().ancestors())
wc_revset
.parents()
.ancestors()
.filtered(RevsetFilterPredicate::HasConflict)
.minus(&revset_util::parse_immutable_expression(
&workspace_command.revset_parse_context(),
)?),

View file

@ -353,6 +353,13 @@ impl RevsetExpression {
})
}
/// Filter all commits by `predicate` in `self`.
pub fn filtered(
self: &Rc<RevsetExpression>,
predicate: RevsetFilterPredicate,
) -> Rc<RevsetExpression> {
self.intersection(&RevsetExpression::filter(predicate))
}
/// Commits that are descendants of `self` and ancestors of `heads`, both
/// inclusive.
pub fn dag_range_to(