Karthik Nayak <karthik.188@xxxxxxxxx> writes: > Patrick Steinhardt <ps@xxxxxx> writes: > >> Implement support for the "blob:none" filter in git-cat-file(1), which >> causes us to omit all blobs. >> >> Signed-off-by: Patrick Steinhardt <ps@xxxxxx> >> --- >> Documentation/git-cat-file.adoc | 2 ++ >> builtin/cat-file.c | 11 ++++++++++- >> t/t1006-cat-file.sh | 33 +++++++++++++++++++++++++++++++-- >> 3 files changed, 43 insertions(+), 3 deletions(-) >> >> diff --git a/Documentation/git-cat-file.adoc b/Documentation/git-cat-file.adoc >> index f7f57b7f538..bb32f715944 100644 >> --- a/Documentation/git-cat-file.adoc >> +++ b/Documentation/git-cat-file.adoc >> @@ -86,6 +86,8 @@ OPTIONS >> Omit objects from the list of printed objects. This can only be used in >> combination with one of the batched modes. The '<filter-spec>' may be >> one of the following: >> ++ >> +The form '--filter=blob:none' omits all blobs. >> >> --path=<path>:: >> For use with `--textconv` or `--filters`, to allow specifying an object >> diff --git a/builtin/cat-file.c b/builtin/cat-file.c >> index 940900d92ad..e783dbbad58 100644 >> --- a/builtin/cat-file.c >> +++ b/builtin/cat-file.c >> @@ -472,7 +472,8 @@ static void batch_object_write(const char *obj_name, >> if (!data->skip_object_info) { >> int ret; >> >> - if (use_mailmap) >> + if (use_mailmap || >> + opt->objects_filter.choice == LOFC_BLOB_NONE) >> data->info.typep = &data->type; >> > > I didn't understand why we need to do this, below we only check for > `data->type`. The only other place we use `data->info.typep` going > forward seems to be `print_object_or_die()`, but that flow is only > followed for `opt->batch_mode == BATCH_MODE_CONTENTS`. We already have > > if (opt->batch_mode == BATCH_MODE_CONTENTS) > data.info.typep = &data.type; > > in `batch_objects()` before this, shouldn't that cover this scenario > too? Maybe we can add a comment with the reasoning > > [snip] After playing around more, I understand now, we set the pointer `data->info.typep` to point to `data->type`, so when the data is parsed in `packed_object_info()` or `oid_object_info_extended()`, that information would be set into `data->type`. So we can skip as needed. All good here!
Attachment:
signature.asc
Description: PGP signature