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

RE: [PATCH v2 13/15] dir-iterator: option to iterate dirs in pre-order

From
rsbecker@nexbridge.com <rsbecker@nexbridge.com>
Date
May 18, 2022, 17:47 UTC
Message-ID
<016201d86adf$5a4e1eb0$0eea5c10$@nexbridge.com>
In-Reply-To
<20220518173947.4qabalu6mjmzumen@compass>
On May 18, 2022 1:41 PM, Plato Kiorpelidis wrote:
Show 13 quoted lines
>On 22/05/10 02:07PM, Phillip Wood wrote:
>> Hi Plato
>>
>> On 09/05/2022 18:51, Plato Kiorpelidis wrote:
>> > Introduce a new option to dir-iterator, using dir_iterator_begin()
>> > flags parameter, allowing to control whether or not directories will
>> > be exposed before their contents. In essence, pre-order traversal
>> > over file system entries that are directories.
>> >
>> > This changes the default behavior of the dir-iterator API. Instead
>> > of iterating directories before doing so over their contents, the
>> > new default behavior does not expose directories at all. Iteration
>> > is still performed, however, within directories, iterating over any
other entry.
Show 25 quoted lines
>> > Only directory paths are ignored.
>> >
>> > To iterate over directories in pre-order, reproducing the previous
>> > default behavior, enable the new flag DIR_ITERATOR_DIRS_BEFORE in
>> > the flags parameter of dir_iterator_begin():
>> >    * ignore directories by not setting DIR_ITERATOR_DIRS_BEFORE
>> >    * iterate directories pre-order by enabling
>> > DIR_ITERATOR_DIRS_BEFORE
>> >
>> > Adjust existing callers, in refs/files-backend.c and builtin/clone.c
>> > to enable DIR_ITERATOR_DIRS_BEFORE since these callers require
>> > iteration over directories before doing so over their contents.
>> >
>> > Update t/t0066-dir-iterator.sh and t/helper/test-dir-iterator.c to
>> > test the new iteration scheme, which is the new default behavior,
>> > and the new flag DIR_ITERATOR_DIRS_BEFORE which reproduces the old
>default behavior.
>>
>> It's great that you've split this change out from the next patch. I
>> had not realized when I looked at the last round that all the existing
>> callers require pre-order traversal. Given that is the case I'm
>> finding it hard to see how changing the default behavior to one that
>> no caller is using is an improvement.
>
>Changing the default behavior is required to simplify entry.c
remove_subtree().
>I would have kept dir-iterator's default iteration scheme as is, but how
are we
>going to deal with remove_subtree()? remove_subtree() requires iterating
dirs
>after their contents. We need to find a flag encoding that is a good design
choice
>and serves both existing and remove_subtree(), without limiting future dir-
>iterator customers.
>
>This encoding of flags was heavily discussed in the patch series that my
work is
Show 6 quoted lines
>based on[1], most notably here[2].
>
>[1]: https://lore.kernel.org/git/1493226219-33423-1-git-send-email-
>bnmvco@gmail.com/
>[2]: https://public-inbox.org/git/1751d788-d1f1-1c97-b33b-
>f53dab78ef86@alum.mit.edu/

Could this be a fallback position where nftw() is not available? I am not how broadly nftw() is supported but it appears to do what you are looking for. --Randall

Previous: Plato KiorpelidisNext: Junio C Hamano
Message 25 of 31 in “[GSoC] iterate dirs before or after their contents”
  1. 00/15 [GSoC] iterate dirs before or after their contentsPlato Kiorpelidis, May 9, 2022
  2. 01/15 t0066: refactor dir-iterator testsPlato Kiorpelidis, May 9, 2022
  3. 02/15 t0066: remove dependency between unrelated testsPlato Kiorpelidis, May 9, 2022
  4. 03/15 t0066: shorter expected and actual output file namesPlato Kiorpelidis, May 9, 2022
  5. 04/15 test-dir-iterator: consistently return EXIT_FAILURE or EXIT_SUCCESSPlato Kiorpelidis, May 9, 2022
  6. Junio C HamanoMay 9, 2022
  7. Plato KiorpelidisMay 18, 2022
  8. Junio C HamanoMay 18, 2022
  9. 05/15 test-dir-iterator: print EACCES and ELOOP errno set by dir_iteratorPlato Kiorpelidis, May 9, 2022
  10. 06/15 test-dir-iterator: print errno name set by dir_iterator_advancePlato Kiorpelidis, May 9, 2022
  11. 09/15 t0066: rename test directoriesPlato Kiorpelidis, May 9, 2022
  12. 08/15 t0066: reorder tests from simple to more complexPlato Kiorpelidis, May 9, 2022
  13. 07/15 t0066: better test coverage for dir-iteratorPlato Kiorpelidis, May 9, 2022
  14. 10/15 dir-iterator: refactor dir_iterator_advance()Plato Kiorpelidis, May 9, 2022
  15. Junio C HamanoMay 9, 2022
  16. Plato KiorpelidisMay 18, 2022
  17. Phillip WoodMay 10, 2022
  18. 11/15 dir-iterator: open root dir in dir_iterator_begin()Plato Kiorpelidis, May 9, 2022
  19. 12/15 t0066: rename subtest descriptionsPlato Kiorpelidis, May 9, 2022
  20. 15/15 entry.c: use dir-iterator to avoid explicit dir traversalPlato Kiorpelidis, May 9, 2022
  21. Phillip WoodMay 10, 2022
  22. 13/15 dir-iterator: option to iterate dirs in pre-orderPlato Kiorpelidis, May 9, 2022
  23. Phillip WoodMay 10, 2022
  24. Plato KiorpelidisMay 18, 2022
  25. rsbecker@nexbridge.comMay 18, 2022
  26. Junio C HamanoMay 18, 2022
  27. rsbecker@nexbridge.comMay 18, 2022
  28. 14/15 dir-iterator: option to iterate dirs in post-orderPlato Kiorpelidis, May 9, 2022
  29. Phillip WoodMay 10, 2022
  30. Junio C HamanoMay 10, 2022
  31. Plato KiorpelidisMay 20, 2022

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.