summaryrefslogtreecommitdiff
path: root/t/unit-tests/u-oid-array.c
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2025-04-02 13:13:38 +0200
committerJunio C Hamano <gitster@pobox.com>2025-04-07 14:43:50 -0700
commiteb83e4c64b5a3458569593c2ab0c29365f10a82f (patch)
tree1381913e2dba2f62b3deb85810e1b48359d301bc /t/unit-tests/u-oid-array.c
parent1914ae0d706f7811eb9f293ae14ca9eb4f25fcca (diff)
builtin/cat-file: wire up an option to filter objects
In batch mode, git-cat-file(1) enumerates all objects and prints them by iterating through both loose and packed objects. This works without considering their reachability at all, and consequently most options to filter objects as they exist in e.g. git-rev-list(1) are not applicable. In some situations it may still be useful though to filter objects based on properties that are inherent to them. This includes the object size as well as its type. Such a filter already exists in git-rev-list(1) with the `--filter=` command line option. While this option supports a couple of filters that are not applicable to our usecase, some of them are quite a neat fit. Wire up the filter as an option for git-cat-file(1). This allows us to reuse the same syntax as in git-rev-list(1) so that we don't have to reinvent the wheel. For now, we die when any of the filter options has been passed by the user, but they will be wired up in subsequent commits. Further note that the filters that we are about to introduce don't significantly speed up the runtime of git-cat-file(1). While we can skip emitting a lot of objects in case they are uninteresting to us, the majority of time is spent reading the packfile, which is bottlenecked by I/O and not the processor. This will change though once we start to make use of bitmaps, which will allow us to skip reading the whole packfile. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/unit-tests/u-oid-array.c')
0 files changed, 0 insertions, 0 deletions