git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/9] builtin/cat-file: wire up an option to filter objects

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 28, 2025, 17:44 UTC
Message-ID
<xmqqikou2ccn.fsf@gitster.g>
In-Reply-To
<Z8GVKLee75GDG2S4@pks.im>
Patrick Steinhardt <ps@pks.im> writes:
Show 15 quoted lines
>> > Note that we don't use the same `--filter=` name fo the option as we use
>> > 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`.
>> 
>> I'm not sure I agree. I would rather have consistency in various
>> commands. Because `--filters` doesn't accept an argument, so I would say
>> having both `--filters` and `--filter=` is fine. I see in various places
>> we already use `OPT_PARSE_LIST_OBJECTS_FILTER` which defines the option
>> as `--filter=`, so it's pretty standard for several commands. I'd
>> prefer git-cat-file(1) to follow that as well. But that's my 2 cents.
>
> I'll wait for a third party to chime in as a tie breaker here :) I'm not
> feeling overly strong about it, but still think that it's just too easy
> to get wrong when those options are so extremely similarly named.

$ git grep '^[^a-z]*--filter' Documentation/ Documentation/config/gc.adoc: `--filter=<filter-spec>` option of linkgit:git-repack[1]. Documentation/git-cat-file.adoc:--filters:: Documentation/git-cat-file.adoc: `--filters`. Documentation/git-clone.adoc: [--filter=<filter-spec>] [--also-filter-submodules]] [--] <repository> Documentation/git-clone.adoc:`--filter=<filter-spec>`:: Documentation/git-clone.adoc: `--filter=blob:limit=<size>` will filter out all blobs of size Documentation/git-pack-objects.adoc:--filter=<filter-spec>:: Documentation/git-repack.adoc:--filter=<filter-spec>:: Documentation/git-repack.adoc:--filter-to=<dir>:: Documentation/rev-list-options.adoc:--filter=<filter-spec>:: Documentation/rev-list-options.adoc:--filter-provided-objects:: Documentation/rev-list-options.adoc:--filter-print-omitted::

The above does makes it look that whoever called their invention "--filters" when they added it to "cat-file" wasn't paying attention to make things consistent, but that is not the case. The word "filter" in the context of existing feature set of "cat-file" has ALWAYS refered to the act of applying the "smudge" filter chain to externalize an internal "clean" blob object contents for the working tree representation. We should thank that somebody for not using and squatting on a shorter and sweeter "--filter" ;-)

"cat-file" should call the feature "--filter=<filter-spec>" like everybody else does, or the feature should not be added to "cat-file" at all. Unless we are willing to rename "--filter=" options for _all_ existing commands to "--object-filter=", that is.

In retrospect, such a longer and more explicit name may have been nicer. But given that all users of the "--filter=<filter-spec>" are about object transfer, it is understandable that we didn't invoke deliberate redundancy when naming the option. Historically, "cat-file" has always been "give me the contents of the object I name", and never about "I may ask about many objects but do not answer requests for objects chosen by these criteria", so it also is understandable that we didn't redundantly say "--contents-filter", too.

Am I third-party enough?
Previous: Patrick SteinhardtNext: Patrick Steinhardt
Message 9 of 44 in “builtin/cat-file: allow filtering objects in batch mode”
  1. 0/9 builtin/cat-file: allow filtering objects in batch modePatrick Steinhardt, Feb 21, 2025
  2. 1/9 builtin/cat-file: rename variable that tracks usagePatrick Steinhardt, Feb 21, 2025
  3. 3/9 builtin/cat-file: support "blob:none" objects filterPatrick Steinhardt, Feb 21, 2025
  4. Toon ClaesFeb 26, 2025
  5. Karthik NayakFeb 27, 2025
  6. 2/9 builtin/cat-file: wire up an option to filter objectsPatrick Steinhardt, Feb 21, 2025
  7. Toon ClaesFeb 26, 2025
  8. Patrick SteinhardtFeb 28, 2025
  9. Junio C HamanoFeb 28, 2025
  10. Patrick SteinhardtMar 3, 2025
  11. Karthik NayakFeb 27, 2025
  12. 4/9 builtin/cat-file: support "blob:limit=" objects filterPatrick Steinhardt, Feb 21, 2025
  13. 5/9 builtin/cat-file: support "object:type=" objects filterPatrick Steinhardt, Feb 21, 2025
  14. Toon ClaesFeb 26, 2025
  15. Patrick SteinhardtFeb 28, 2025
  16. 6/9 pack-bitmap: expose function to iterate over bitmapped objectsPatrick Steinhardt, Feb 21, 2025
  17. Junio C HamanoFeb 24, 2025
  18. Patrick SteinhardtFeb 25, 2025
  19. Junio C HamanoFeb 25, 2025
  20. Taylor BlauFeb 27, 2025
  21. Patrick SteinhardtFeb 28, 2025
  22. Taylor BlauFeb 27, 2025
  23. Junio C HamanoFeb 27, 2025
  24. Taylor BlauFeb 27, 2025
  25. 8/9 builtin/cat-file: deduplicate logic to iterate over all objectsPatrick Steinhardt, Feb 21, 2025
  26. 7/9 pack-bitmap: introduce function to check whether a pack is bitmappedPatrick Steinhardt, Feb 21, 2025
  27. Taylor BlauFeb 27, 2025
  28. 9/9 builtin/cat-file: use bitmaps to efficiently filter by object typePatrick Steinhardt, Feb 21, 2025
  29. Karthik NayakFeb 27, 2025
  30. Taylor BlauFeb 27, 2025
  31. 00/11 builtin/cat-file: allow filtering objects in batch modePatrick Steinhardt, Apr 2, 2025
  32. 01/11 builtin/cat-file: rename variable that tracks usagePatrick Steinhardt, Apr 2, 2025
  33. 02/11 builtin/cat-file: introduce function to report object statusPatrick Steinhardt, Apr 2, 2025
  34. 03/11 builtin/cat-file: wire up an option to filter objectsPatrick Steinhardt, Apr 2, 2025
  35. 04/11 builtin/cat-file: support "blob:none" objects filterPatrick Steinhardt, Apr 2, 2025
  36. 05/11 builtin/cat-file: support "blob:limit=" objects filterPatrick Steinhardt, Apr 2, 2025
  37. 06/11 builtin/cat-file: support "object:type=" objects filterPatrick Steinhardt, Apr 2, 2025
  38. 07/11 pack-bitmap: allow passing payloads to `show_reachable_fn()`Patrick Steinhardt, Apr 2, 2025
  39. 08/11 pack-bitmap: add function to iterate over filtered bitmapped objectsPatrick Steinhardt, Apr 2, 2025
  40. 09/11 pack-bitmap: introduce function to check whether a pack is bitmappedPatrick Steinhardt, Apr 2, 2025
  41. 10/11 builtin/cat-file: deduplicate logic to iterate over all objectsPatrick Steinhardt, Apr 2, 2025
  42. 11/11 builtin/cat-file: use bitmaps to efficiently filter by object typePatrick Steinhardt, Apr 2, 2025
  43. Karthik NayakApr 3, 2025
  44. Junio C HamanoApr 8, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.