jj-vcs/jj

FR: Use filesets for sparse checkouts

Open

#7,815 opened on Oct 22, 2025

View on GitHub
 (15 comments) (1 reaction) (0 assignees)Rust (1,052 forks)batch import
enhancement🏗️good first issue

Repository metrics

Stars
 (28,830 stars)
PR merge metrics
 (Avg merge 23d 5h) (46 merged PRs in 30d)

Description

After reading the Sparse Patterns V2 design doc I was wondering why we don't use the Filesets DSL to describe paths of a sparse checkout? Is there something I am missing or was that simply not considered as a possibility? (I just did a quick search which revealed nothing, but maybe I missed the argument against it...)

Suppose I have the following files in my working copy:

project1/foo.txt
project1/bar.txt
project2/foo.txt
project2/bar.txt
...
projectN/foo.txt
projectN/bar.txt

Now I want to restrict the checked out files to */foo.txt. Since both the current implementation as well as the Sparse Patterns V2 design doc use prefix-matching only (I.e. no glob-patterns) I really have to list all the files I am interested in:

jj sparse set --clear --add 'project1/foo.txt' --add 'project2/foo.txt' ...
# for the lazy ones:
ls */foo.txt | jj sparse edit --config 'ui.editor="tee"'

However, IMHO a simple jj sparse set 'glob:"*/foo.txt"' would be the better user experience.

Would a contribution with that change be accepted?

Contributor guide