Patrick Steinhardt <ps@xxxxxx> 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]
Attachment:
signature.asc
Description: PGP signature