Re: [PATCH 2/9] builtin/cat-file: wire up an option to filter objects
From: Karthik Nayak <hidden>
Date: 2025-02-27 11:20:42
Patrick Steinhardt [off-list ref] writes:
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. Note that we don't use the same `--filter=` name fo the option as we use
s/fo/for
in git-rev-list(1). We already have `--filters`, and having both `--filter=` and `--filters` would be quite confusing. Instead, the new option is called `--objects-filter`. 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.
[snip]
Attachments
- signature.asc [application/pgp-signature] 690 bytes