git-commit-vandalism/builtin
William Sprent 00408adeac builtin/sparse-checkout: add check-rules command
There exists no direct way to interrogate git about which paths are
matched by a given set of sparsity rules. It is possible to get this
information from git, but it includes checking out the commit that
contains the paths, applying the sparse checkout patterns and then using
something like 'git ls-files -t' to check if the skip worktree bit is
set. This works in some case, but there are cases where it is awkward or
infeasible to generate a checkout for this purpose.

Exposing the pattern matching of sparse checkout enables more tooling to
be built and avoids a situation where tools that want to reason about
sparse checkouts start containing parallel implementation of the rules.
To accommodate this, add a 'check-rules' subcommand to the
'sparse-checkout' builtin along the lines of the 'git check-ignore' and
'git check-attr' commands. The new command accepts a list of paths on
stdin and outputs just the ones the match the sparse checkout.

To allow for use in a bare repository and to allow for interrogating
about other patterns than the current ones, include a '--rules-file'
option which allows the caller to explicitly pass sparse checkout rules
in the format accepted by 'sparse-checkout set --stdin'.

To allow for reuse of the handling of input patterns for the
'--rules-file' flag, modify 'add_patterns_from_input()' to be able to
read from a 'FILE' instead of just stdin.

To allow for reuse of the logic which decides whether or not rules
should be interpreted as cone-mode patterns, split that part out of
'update_modes()' such that can be called without modifying the config.

An alternative could have been to create a new 'check-sparsity' command.
However, placing it under 'sparse-checkout' allows for a) more easily
re-using the sparse checkout pattern matching and cone/non-code mode
handling, and b) keeps the documentation for the command next to the
experimental warning and the cone-mode discussion.

Signed-off-by: William Sprent <williams@unity3d.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2023-03-27 10:51:12 -07:00
..
add.c add API: remove run_add_interactive() wrapper function 2023-02-06 15:03:34 -08:00
am.c Merge branch 'jc/gpg-lazy-init' 2023-03-17 14:03:10 -07:00
annotate.c
apply.c
archive.c parse-options: consistently allocate memory in fix_filename() 2023-03-06 13:14:45 -08:00
bisect.c Merge branch 'rj/bisect-already-used-branch' 2023-03-19 15:03:11 -07:00
blame.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
branch.c Merge branch 'rj/branch-copy-and-rename' into maint-2.39 2023-02-14 14:15:55 -08:00
bugreport.c built-ins: use free() not UNLEAK() if trivial, rm dead code 2022-11-21 12:32:48 +09:00
bundle.c Merge branch 'jk/bundle-use-dash-for-stdfiles' 2023-03-19 15:03:12 -07:00
cat-file.c Merge branch 'jk/unused-post-2.39-part2' 2023-03-17 14:03:09 -07:00
check-attr.c attr: add flag --source to work with tree-ish 2023-01-14 08:49:55 -08:00
check-ignore.c cocci: apply "pending" index-compatibility to some "builtin/*.c" 2022-11-21 12:06:15 +09:00
check-mailmap.c ident.h: move ident-related declarations out of cache.h 2023-02-23 17:25:29 -08:00
check-ref-format.c
checkout--worker.c alloc.h: move ALLOC_GROW() functions from cache.h 2023-02-23 17:25:28 -08:00
checkout-index.c cocci: apply "pending" index-compatibility to some "builtin/*.c" 2022-11-21 12:06:15 +09:00
checkout.c Merge branch 'jk/bundle-use-dash-for-stdfiles' 2023-03-19 15:03:12 -07:00
clean.c Merge branch 'ab/various-leak-fixes' 2023-02-22 14:55:45 -08:00
clone.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
column.c
commit-graph.c replace-object.h: move read_replace_refs declaration from cache.h to here 2023-02-23 17:25:30 -08:00
commit-tree.c Merge branch 'jc/gpg-lazy-init' 2023-03-17 14:03:10 -07:00
commit.c Merge branch 'jc/gpg-lazy-init' 2023-03-17 14:03:10 -07:00
config.c ident.h: move ident-related declarations out of cache.h 2023-02-23 17:25:29 -08:00
count-objects.c for_each_object: mark unused callback parameters 2023-02-24 09:13:31 -08:00
credential-cache--daemon.c Merge branch 'en/header-cleanup' 2023-03-17 14:03:09 -07:00
credential-cache.c
credential-store.c
credential.c
describe.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
diagnose.c Merge branch 'ab/doc-synopsis-and-cmd-usage' 2022-10-28 11:26:54 -07:00
diff-files.c cocci: apply "pending" index-compatibility to some "builtin/*.c" 2022-11-21 12:06:15 +09:00
diff-index.c cocci: apply "pending" index-compatibility to some "builtin/*.c" 2022-11-21 12:06:15 +09:00
diff-tree.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
diff.c Merge branch 'ab/various-leak-fixes' 2022-12-14 15:55:46 +09:00
difftool.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
fast-export.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
fast-import.c Merge branch 'jk/unused-post-2.39-part2' 2023-03-17 14:03:09 -07:00
fetch-pack.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
fetch.c Merge branch 'ew/fetch-no-write-fetch-head-fix' 2023-03-19 15:03:13 -07:00
fmt-merge-msg.c
for-each-ref.c
for-each-repo.c for-each-repo: interpolate repo path arguments 2022-11-14 22:39:25 -05:00
fsck.c Merge branch 'jk/unused-post-2.39-part2' 2023-03-17 14:03:09 -07:00
fsmonitor--daemon.c alloc.h: move ALLOC_GROW() functions from cache.h 2023-02-23 17:25:28 -08:00
gc.c Merge branch 'jk/unused-post-2.39-part2' 2023-03-17 14:03:09 -07:00
get-tar-commit-id.c
grep.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
hash-object.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
help.c Merge branch 'ab/doc-synopsis-and-cmd-usage' 2022-10-28 11:26:54 -07:00
hook.c hook: support a --to-stdin=<path> option 2023-02-08 12:50:03 -08:00
index-pack.c replace-object.h: move read_replace_refs declaration from cache.h to here 2023-02-23 17:25:30 -08:00
init-db.c doc txt & -h consistency: add missing options 2022-10-13 09:32:57 -07:00
interpret-trailers.c doc txt & -h consistency: add missing options 2022-10-13 09:32:57 -07:00
log.c Merge branch 'jk/format-patch-ignore-noprefix' 2023-03-21 14:18:55 -07:00
ls-files.c Merge branch 'aj/ls-files-format-fix' 2023-03-21 14:18:55 -07:00
ls-remote.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
ls-tree.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
mailinfo.c
mailsplit.c
merge-base.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
merge-file.c
merge-index.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
merge-ours.c cocci: apply "pending" index-compatibility to some "builtin/*.c" 2022-11-21 12:06:15 +09:00
merge-recursive.c
merge-tree.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
merge.c Merge branch 'jc/gpg-lazy-init' 2023-03-17 14:03:10 -07:00
mktag.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
mktree.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
multi-pack-index.c multi-pack-index: avoid writing to global in option callback 2022-10-06 09:56:51 -07:00
mv.c alloc.h: move ALLOC_GROW() functions from cache.h 2023-02-23 17:25:28 -08:00
name-rev.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
notes.c Merge branch 'jk/unused-post-2.39-part2' 2023-03-17 14:03:09 -07:00
pack-objects.c Merge branch 'jk/unused-post-2.39-part2' 2023-03-17 14:03:09 -07:00
pack-redundant.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
pack-refs.c doc txt & -h consistency: add missing options and labels 2022-10-13 09:32:56 -07:00
patch-id.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
prune-packed.c
prune.c Merge branch 'jk/unused-post-2.39-part2' 2023-03-17 14:03:09 -07:00
pull.c Merge branch 'jc/gpg-lazy-init' 2023-03-17 14:03:10 -07:00
push.c Merge branch 'jc/gpg-lazy-init' 2023-03-17 14:03:10 -07:00
range-diff.c diff: factor out add_diff_options() 2022-12-02 08:25:29 +09:00
read-tree.c Merge branch 'en/header-cleanup' 2023-03-17 14:03:09 -07:00
rebase.c Merge branch 'jk/format-patch-ignore-noprefix' 2023-03-21 14:18:55 -07:00
receive-pack.c Merge branch 'ps/receive-pack-unlock-before-die' 2023-03-21 14:18:55 -07:00
reflog.c refs: unify parse_worktree_ref() and ref_type() 2022-09-19 11:11:11 -07:00
remote-ext.c convert trivial uses of strncmp() to skip_prefix() 2023-01-08 10:34:37 +09:00
remote-fd.c convert trivial uses of strncmp() to starts_with() 2023-01-08 10:34:35 +09:00
remote.c Merge branch 'rs/no-more-run-command-v' 2022-11-08 17:15:12 -05:00
repack.c Merge branch 'jk/unused-post-2.39-part2' 2023-03-17 14:03:09 -07:00
replace.c replace-object.h: move read_replace_refs declaration from cache.h to here 2023-02-23 17:25:30 -08:00
rerere.c diff: mark unused parameters in callbacks 2022-12-13 22:16:23 +09:00
reset.c Merge branch 'jk/bundle-use-dash-for-stdfiles' 2023-03-19 15:03:12 -07:00
rev-list.c Merge branch 'ew/fetch-hiderefs' 2023-03-17 14:03:10 -07:00
rev-parse.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
revert.c alloc.h: move ALLOC_GROW() functions from cache.h 2023-02-23 17:25:28 -08:00
rm.c alloc.h: move ALLOC_GROW() functions from cache.h 2023-02-23 17:25:28 -08:00
send-pack.c Merge branch 'jc/gpg-lazy-init' 2023-03-17 14:03:10 -07:00
shortlog.c shortlog: implement --group=committer in terms of --group=<format> 2022-10-24 14:48:05 -07:00
show-branch.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
show-index.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
show-ref.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
sparse-checkout.c builtin/sparse-checkout: add check-rules command 2023-03-27 10:51:12 -07:00
stash.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
stripspace.c
submodule--helper.c Merge branch 'jk/unused-post-2.39-part2' 2023-03-17 14:03:09 -07:00
symbolic-ref.c Merge branch 'ab/doc-synopsis-and-cmd-usage' 2022-10-28 11:26:54 -07:00
tag.c Merge branch 'jk/bundle-use-dash-for-stdfiles' 2023-03-19 15:03:12 -07:00
unpack-file.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
unpack-objects.c replace-object.h: move read_replace_refs declaration from cache.h to here 2023-02-23 17:25:30 -08:00
update-index.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
update-ref.c
update-server-info.c doc txt & -h consistency: add missing options and labels 2022-10-13 09:32:56 -07:00
upload-archive.c doc txt & -h consistency: fix mismatching labels 2022-10-13 09:32:56 -07:00
upload-pack.c replace-object.h: move read_replace_refs declaration from cache.h to here 2023-02-23 17:25:30 -08:00
var.c ident.h: move ident-related declarations out of cache.h 2023-02-23 17:25:29 -08:00
verify-commit.c drop pure pass-through config callbacks 2023-02-27 08:00:39 -08:00
verify-pack.c doc txt & -h consistency: add or fix optional "--" syntax 2022-10-13 09:32:56 -07:00
verify-tag.c drop pure pass-through config callbacks 2023-02-27 08:00:39 -08:00
worktree.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00
write-tree.c cache.h: remove dependence on hex.h; make other files include it explicitly 2023-02-23 17:25:29 -08:00