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

[PATCH v8 0/5] [GSoC] remove_subtree(): reimplement using iterators

From
Daniel Ferreira <bnmvco@gmail.com>
Date
Apr 6, 2017, 01:39 UTC
Message-ID
<1491442767-54068-1-git-send-email-bnmvco@gmail.com>

This is the seventh version of a patch series that implements the GSoC microproject of converting a recursive call to readdir() to use dir_iterator.

v1: https://public-inbox.org/git/CAGZ79kZwT-9mHTiOJ5CEjk2wDFkn6+NcogjX0=vjhsAh16ANYg@mail.gmail.com/T/#t v2: https://public-inbox.org/git/CACsJy8Dxh-QPBBLfaFWPAWUsbA9GVXA7x+mXLjEvYKhk1zOpig@mail.gmail.com/T/#t v3: https://public-inbox.org/git/CAGZ79kYtpmURSQWPumobA=e3JBFjKhWCdv_LPhKCd71ZRwMovA@mail.gmail.com/T/#t v4: https://public-inbox.org/git/1490747533-89143-1-git-send-email-bnmvco@gmail.com/T/#e437a63e0c22c00c69b5d92977c9b438ed2b9fd3a v5: https://public-inbox.org/git/1490844730-47634-1-git-send-email-bnmvco@gmail.com/T/#m2323f15e45de699f2e09364f40a62e17047cf453 v6: https://public-inbox.org/git/1491107726-21504-1-git-send-email-bnmvco@gmail.com/T/#t v7: https://public-inbox.org/git/1491163388-41255-1-git-send-email-bnmvco@gmail.com/T/#t

Travis CI build: https://travis-ci.org/theiostream/git/jobs/219111182

In this version, I applied pretty much all suggestions Michael and Stefan had for the patch.

Michael, regarding the patch you sent for parsing the arguments on the test-dir-iterator helper, I did not squash because it'd generate too many merge conflicts. I just preferred add your code manually. Let me know how I can properly credit you for it.

The only "controversial" part of this code is how I ended up caching the result of lstat() on the dir_iterator_level struct. Having to handle the case of the root directory ended up making set_iterator_data() way more complicated (having to handle the case of level->stat not being set by push_dir_level()), as well as required the introduction of st_is_set member in the level struct. This issue would be solved if we could lstat() the root dir on dir_iterator_begin() and possibly return an error there. Regardless, I appreciate other suggestions to make this less complex.

Daniel Ferreira (5):
  dir_iterator: add tests for dir_iterator API
  remove_subtree(): test removing nested directories
  dir_iterator: add helpers to dir_iterator_advance
  dir_iterator: refactor state machine model
  remove_subtree(): reimplement using iterators
 Makefile                        |   1 +
 dir-iterator.c                  | 247 +++++++++++++++++++++++++++++-----------
 dir-iterator.h                  |  35 ++++--
 entry.c                         |  39 +++----
 refs/files-backend.c            |   2 +-
 t/helper/.gitignore             |   1 +
 t/helper/test-dir-iterator.c    |  48 ++++++++
 t/t0065-dir-iterator.sh         |  93 +++++++++++++++
 t/t2000-checkout-cache-clash.sh |  11 ++
 9 files changed, 373 insertions(+), 104 deletions(-)
 create mode 100644 t/helper/test-dir-iterator.c
 create mode 100755 t/t0065-dir-iterator.sh

-- 2.7.4 (Apple Git-66)

Next: Daniel Ferreira
Message 1 of 11 in “[GSoC] remove_subtree(): reimplement using iterators”
  1. 0/5 [GSoC] remove_subtree(): reimplement using iteratorsDaniel Ferreira, Apr 6, 2017
  2. 1/5 dir_iterator: add tests for dir_iterator APIDaniel Ferreira, Apr 6, 2017
  3. Stefan BellerApr 13, 2017
  4. 2/5 remove_subtree(): test removing nested directoriesDaniel Ferreira, Apr 6, 2017
  5. 4/5 dir_iterator: refactor state machine modelDaniel Ferreira, Apr 6, 2017
  6. Michael HaggertyApr 17, 2017
  7. 3/5 dir_iterator: add helpers to dir_iterator_advanceDaniel Ferreira, Apr 6, 2017
  8. 5/5 remove_subtree(): reimplement using iteratorsDaniel Ferreira, Apr 6, 2017
  9. Daniel Ferreira (theiostream)Apr 13, 2017
  10. Stefan BellerApr 13, 2017
  11. Michael HaggertyApr 17, 2017

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.