Skip to content

Commit

Permalink
lib: Add RevsetExpression::filtered().
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
PhilipMetzger committed Jun 20, 2024
1 parent 5988a00 commit dfe547b
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 5 deletions.
5 changes: 2 additions & 3 deletions cli/src/cli_util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
6 changes: 4 additions & 2 deletions cli/src/commands/status.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
)?),
Expand Down
7 changes: 7 additions & 0 deletions lib/src/revset.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down

0 comments on commit dfe547b

Please sign in to comment.