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

Re: [PATCH v4 0/8] rev-list: implement object type filter

From
Patrick Steinhardt <ps@pks.im>
Date
Apr 14, 2021, 11:59 UTC
Message-ID
<YHbZNL0gzw0+1k5h@ncase>
In-Reply-To
<xmqqfsztlwxb.fsf@gitster.g>
On Tue, Apr 13, 2021 at 02:03:12PM -0700, Junio C Hamano wrote:
Show 34 quoted lines
> Jeff King <peff@peff.net> writes:
> 
> > Thanks. I have no more nits to pick. The only question left for me is
> > the big one of "do we like this with --filter, or should it be some kind
> > of rev-list option", as discussed in:
> >
> >   https://lore.kernel.org/git/YHB7R8hVRt+V+i2W@coredump.intra.peff.net/
> 
> I do agree that adding "--blobs", "--trees", and "--tags" options to
> the "--objects" (and implicit --commits) to rev-list parameters is a
> lot more in line with the original design by Linus when we added
> "--objects" (vs not giving it).  We even internally have had the "do
> we show trees?" "do we show blobs?" separate bits from the very
> beginning of the "--objects" feature at 9de48752 (git-rev-list: add
> option to list all objects (not just commits), 2005-06-24), which
> was extended to cover tags at 3c90f03d (Prepare git-rev-list for
> tracking tag objects too, 2005-06-29).  The basic design principle
> hasn't changed when the code was reorganized to be closer to the
> current shape at ae563542 (First cut at libifying revlist
> generation, 2006-02-25).
> 
> But back then, we didn't have mechanisms to filter rev-list output
> using other criteria, which brought us the umbrella notation to use
> "--filter=...", so as a notation, it might be OK, provided if
> 
> 	git rev-list \
> 	    --filter=object:type=tag \
> 	    --filter=object:type=commit \
> 	    --filter=object:type=tree \
> 	    --filter=object:type=blob "$@ther args"
> 
> is an equivalent to existing
> 
> 	git rev-list --objects "$@ther args"

Filters are currently AND filters, so specifying them multiple times would cause us to print nothing. And I don't think we should treat object:type filters any different compared to the other filters, because that could limit our ability to iterate in the future where we may want to add OR filters.

I initially said that I didn't want to add `object:type=tag,commit` filters as a way to say that all types which are either a tag or commit should be printed because I thought that having the ability to combine filters with an OR instead of an AND would be the better design here. But on the other hand, there is no reason we cannot have both, and it would implement your above usecase, even though syntax is different.

Show 10 quoted lines
> I however have to wonder why this need so much code (in other words,
> why do we need more than just adding something similar to this block
> in the revision.c machinery:
> 
> 	} else if (!strcmp(arg, "--objects")) {
> 		revs->tag_objects = 1;
> 		revs->tree_objects = 1;
> 		revs->blob_objects = 1;
> 
> that flips <type>_objects member bits?) though.

So if we make this part of the rev machinery, I guess your idea is that we can just put the logic into `show_object()`? That would indeed be a lot simpler to implement with a lot less code. But on the other hand, it's also less efficient: we cannot stop walking down the graph like we can with the current design when e.g. saying "Only give me {tags,commits,trees}". And with bitmap indices, we can even skip all objects of a certain type at once, without having to load the object, right inside the filtering logic. If this was part of `show_object()`, we wouldn't be able to do so (easily).

Anyway, this is assuming that I'm not misinterpreting what you mean by your above comment. So please let me know if I misunderstood.

Patrick
Previous: Junio C HamanoNext: Junio C Hamano
Message 80 of 97 in “rev-parse: implement object type filter”
  1. 0/7 rev-parse: implement object type filterPatrick Steinhardt, Mar 1, 2021
  2. 3/7 list-objects: support filtering by tag and commitPatrick Steinhardt, Mar 1, 2021
  3. 4/7 list-objects: implement object type filterPatrick Steinhardt, Mar 1, 2021
  4. 1/7 revision: mark commit parents as NOT_USER_GIVENPatrick Steinhardt, Mar 1, 2021
  5. 2/7 list-objects: move tag processing into its own functionPatrick Steinhardt, Mar 1, 2021
  6. 6/7 pack-bitmap: implement combined filterPatrick Steinhardt, Mar 1, 2021
  7. 5/7 pack-bitmap: implement object type filterPatrick Steinhardt, Mar 1, 2021
  8. 7/7 rev-list: allow filtering of provided itemsPatrick Steinhardt, Mar 1, 2021
  9. Jeff KingMar 10, 2021
  10. Patrick SteinhardtMar 11, 2021
  11. Jeff KingMar 11, 2021
  12. Patrick SteinhardtMar 15, 2021
  13. Taylor BlauMar 10, 2021
  14. Jeff KingMar 10, 2021
  15. Patrick SteinhardtMar 11, 2021
  16. Jeff KingMar 11, 2021
  17. 0/8 rev-parse: implement object type filterPatrick Steinhardt, Mar 15, 2021
  18. 1/8 uploadpack.txt: document implication of `uploadpackfilter.allow`Patrick Steinhardt, Mar 15, 2021
  19. Jeff KingApr 6, 2021
  20. 2/8 revision: mark commit parents as NOT_USER_GIVENPatrick Steinhardt, Mar 15, 2021
  21. Jeff KingApr 6, 2021
  22. Patrick SteinhardtApr 9, 2021
  23. 4/8 list-objects: support filtering by tag and commitPatrick Steinhardt, Mar 15, 2021
  24. 3/8 list-objects: move tag processing into its own functionPatrick Steinhardt, Mar 15, 2021
  25. Jeff KingApr 6, 2021
  26. 5/8 list-objects: implement object type filterPatrick Steinhardt, Mar 15, 2021
  27. Jeff KingApr 6, 2021
  28. 7/8 pack-bitmap: implement combined filterPatrick Steinhardt, Mar 15, 2021
  29. Jeff KingApr 6, 2021
  30. Patrick SteinhardtApr 9, 2021
  31. Jeff KingApr 9, 2021
  32. Patrick SteinhardtApr 9, 2021
  33. Jeff KingApr 9, 2021
  34. 8/8 rev-list: allow filtering of provided itemsPatrick Steinhardt, Mar 15, 2021
  35. Jeff KingApr 6, 2021
  36. Patrick SteinhardtApr 9, 2021
  37. Jeff KingApr 9, 2021
  38. 6/8 pack-bitmap: implement object type filterPatrick Steinhardt, Mar 15, 2021
  39. Jeff KingApr 6, 2021
  40. Junio C HamanoMar 20, 2021
  41. Jeff KingApr 6, 2021
  42. Patrick SteinhardtApr 9, 2021
  43. Jeff KingApr 9, 2021
  44. 0/8 rev-parse: implement object type filterPatrick Steinhardt, Apr 9, 2021
  45. 1/8 uploadpack.txt: document implication of `uploadpackfilter.allow`Patrick Steinhardt, Apr 9, 2021
  46. 2/8 revision: mark commit parents as NOT_USER_GIVENPatrick Steinhardt, Apr 9, 2021
  47. 3/8 list-objects: move tag processing into its own functionPatrick Steinhardt, Apr 9, 2021
  48. 4/8 list-objects: support filtering by tag and commitPatrick Steinhardt, Apr 9, 2021
  49. Junio C HamanoApr 11, 2021
  50. 5/8 list-objects: implement object type filterPatrick Steinhardt, Apr 9, 2021
  51. 6/8 pack-bitmap: implement object type filterPatrick Steinhardt, Apr 9, 2021
  52. 7/8 pack-bitmap: implement combined filterPatrick Steinhardt, Apr 9, 2021
  53. 8/8 rev-list: allow filtering of provided itemsPatrick Steinhardt, Apr 9, 2021
  54. 8/8 rev-list: allow filtering of provided itemsPatrick Steinhardt, Apr 9, 2021
  55. Philip OakleyApr 9, 2021
  56. Patrick SteinhardtApr 12, 2021
  57. Junio C HamanoApr 11, 2021
  58. Patrick SteinhardtApr 12, 2021
  59. 0/8 rev-list: implement object type filterPatrick Steinhardt, Apr 12, 2021
  60. 1/8 uploadpack.txt: document implication of `uploadpackfilter.allow`Patrick Steinhardt, Apr 12, 2021
  61. 2/8 revision: mark commit parents as NOT_USER_GIVENPatrick Steinhardt, Apr 12, 2021
  62. 3/8 list-objects: move tag processing into its own functionPatrick Steinhardt, Apr 12, 2021
  63. 4/8 list-objects: support filtering by tag and commitPatrick Steinhardt, Apr 12, 2021
  64. 5/8 list-objects: implement object type filterPatrick Steinhardt, Apr 12, 2021
  65. Ævar Arnfjörð BjarmasonApr 13, 2021
  66. Andreas SchwabApr 13, 2021
  67. Patrick SteinhardtApr 14, 2021
  68. 6/8 pack-bitmap: implement object type filterPatrick Steinhardt, Apr 12, 2021
  69. 7/8 pack-bitmap: implement combined filterPatrick Steinhardt, Apr 12, 2021
  70. 8/8 rev-list: allow filtering of provided itemsPatrick Steinhardt, Apr 12, 2021
  71. Jeff KingApr 13, 2021
  72. Patrick SteinhardtApr 13, 2021
  73. Jeff KingApr 15, 2021
  74. Junio C HamanoApr 16, 2021
  75. Junio C HamanoApr 16, 2021
  76. Ramsay JonesApr 17, 2021
  77. Jeff KingApr 17, 2021
  78. Junio C HamanoApr 17, 2021
  79. Junio C HamanoApr 13, 2021
  80. Patrick SteinhardtApr 14, 2021
  81. Junio C HamanoApr 14, 2021
  82. Jeff KingApr 15, 2021
  83. Junio C HamanoApr 15, 2021
  84. Junio C HamanoApr 15, 2021
  85. Jeff KingApr 17, 2021
  86. 0/8 rev-list: implement object type filterPatrick Steinhardt, Apr 19, 2021
  87. 1/8 uploadpack.txt: document implication of `uploadpackfilter.allow`Patrick Steinhardt, Apr 19, 2021
  88. 2/8 revision: mark commit parents as NOT_USER_GIVENPatrick Steinhardt, Apr 19, 2021
  89. 3/8 list-objects: move tag processing into its own functionPatrick Steinhardt, Apr 19, 2021
  90. 4/8 list-objects: support filtering by tag and commitPatrick Steinhardt, Apr 19, 2021
  91. 5/8 list-objects: implement object type filterPatrick Steinhardt, Apr 19, 2021
  92. 7/8 pack-bitmap: implement combined filterPatrick Steinhardt, Apr 19, 2021
  93. 6/8 pack-bitmap: implement object type filterPatrick Steinhardt, Apr 19, 2021
  94. 8/8 rev-list: allow filtering of provided itemsPatrick Steinhardt, Apr 19, 2021
  95. Junio C HamanoApr 19, 2021
  96. Jeff KingApr 23, 2021
  97. Junio C HamanoApr 28, 2021

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.