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

Re: [GSoC][PATCH v5 3/7] dir-iterator: add flags parameter to dir_iterator_begin

From
Thomas Gummerer <t.gummerer@gmail.com>
Date
Apr 24, 2019, 18:36 UTC
Message-ID
<20190424183622.GB2068@hank.intra.tgummerer.com>
In-Reply-To
<CAHd-oW48+cEqSMDFF3PXuOnzUvptM6q5Ba_Zb8gGhqa1bGNwZQ@mail.gmail.com>
On 04/23, Matheus Tavares Bernardino wrote:
Show 51 quoted lines
> On Thu, Apr 11, 2019 at 6:09 PM Thomas Gummerer <t.gummerer@gmail.com> wrote:
> >
> > On 04/10, Matheus Tavares Bernardino wrote:
> > > > > diff --git a/dir-iterator.h b/dir-iterator.h
> > > > > index 970793d07a..93646c3bea 100644
> > > > > --- a/dir-iterator.h
> > > > > +++ b/dir-iterator.h
> > > > > @@ -19,7 +19,7 @@
> > > > >   * A typical iteration looks like this:
> > > > >   *
> > > > >   *     int ok;
> > > > > - *     struct iterator *iter = dir_iterator_begin(path);
> > > > > + *     struct iterator *iter = dir_iterator_begin(path, 0);
> > > >
> > > > Outside of this context, we already mentione errorhandling when
> > > > 'ok != ITER_DONE' in his example.  This still can't happen with the
> > > > way the dir iterator is used here, but it serves as a reminder if
> > > > people are using the DIR_ITERATOR_PEDANTIC flag.  Good.
> > >
> > > This made me think again about the documentation saying that
> > > dir_iterator_abort() and dir_iterator_advance() may return ITER_ERROR,
> > > but the implementation does not containing these possibilities.
> > > (Besides when the pedantic flag is used). Maybe the idea was to make
> > > API-users implement the check for an ITER_ERROR in case dir-iterator
> > > needs to start returning it in the future.
> >
> > Yeah, I think that was the intention.
> >
> > > But do you think such a change in dir-iterator is likely to happen?
> > > Maybe we could just make dir_iterator_abort() be void and remove this
> > > section from documentation. Then, for dir_iterator_advance() users
> > > would only need to check for ITER_ERROR if the pedantic flag was given
> > > at dir-iterator creation...
> >
> > Dunno.  In a world where we have the pedantic flag, I think only
> > returning ITER_ERROR if that flag is given might be what we want to
> > do.  I can't think of a reason why we would want to return ITER_ERROR
> > without the pedantic flag in that case.
> 
> Ok. I began doing the change, but got stuck in a specific decision.
> What I was trying to do is:
> 
> 1) Make dir_iterator_advance() return ITER_ERROR only when the
> pedantic flag is given;
> 2) Make dir_iterator_abort() be void.
> 
> The first change is trivial. But the second is not so easy: Since the
> [only] current API user defines other iterators on top of
> dir-iterator, it would require a somehow big surgery on refs/* to make
> this change. Should I proceed and make the changes at refs/* or should
> I keep dir_iterator_abort() returning int, although it can never fail?

Maybe I'm missing something, but wouldn't this change in refs.c be enough? (Other than actually making dir_iterator_abort not return anything)

	diff --git a/refs/files-backend.c b/refs/files-backend.c
	index 5848f32ef8..81863c3ee0 100644
	--- a/refs/files-backend.c
	+++ b/refs/files-backend.c
	@@ -2125,13 +2125,12 @@ static int files_reflog_iterator_abort(struct ref_iterator *ref_iterator)
	 {
	        struct files_reflog_iterator *iter =
	                (struct files_reflog_iterator *)ref_iterator;
	-       int ok = ITER_DONE;
	 
	        if (iter->dir_iterator)
	-               ok = dir_iterator_abort(iter->dir_iterator);
	+               dir_iterator_abort(iter->dir_iterator);
	 
	        base_ref_iterator_free(ref_iterator);
	-       return ok;
	+       return ITER_DONE;
	 }
	 
	 static struct ref_iterator_vtable files_reflog_iterator_vtable = {

Currently the only thing calling dir_iterator_abort() is files_reflog_iterator_abort() from what I can see, and dir_iterator_abort() always returns ITER_DONE.

That said, I don't know if this is actually worth pursuing. Having it return some value and having the caller check that makes it more future proof, as we won't have to change all the callers in the future if we want to start returning anything other than ITER_DONE. Just leaving it as it is now doesn't actually hurt anybody I think, but may help in the future.

Show 8 quoted lines
> There's also a third option: The only operation that may fail during
> dir_iterator_abort() is closedir(). But even on
> dir_iterator_advance(), I'm treating this error as "non-fatal" in the
> sense that it's not caught by the pedantic flag (although a warning is
> emitted). I did it like this because it doesn't seem like a major
> error during dir iteration... But I could change this and make
> DIR_ITERATOR_PEDANTIC return ITER_ERROR upon closedir() errors for
> both dir-iterator advance() and abort() functions. What do you think?

I think this might be the right way to go. We don't really need an error from closedir, but at the same time if we are being pedantic, maybe it should be an error. I don't have a strong opinion here either way, other than I think it should probably keep returning an int.

Show 10 quoted lines
> > Though I think I would change the example the other way in that case,
> > and pass DIR_ITERATOR_PEDANTIC to 'dir_iterator_begin()', as it would
> > be easy to forget error handling otherwise, even when it is
> > necessary.  I'd rather err on the side of showing too much error
> > handling, than having people forget it and having users run into some
> > odd edge cases in the wild that the tests don't cover.
> 
> Yes, I agree.
> 
> > > Also CC-ed Michael in case he has some input
Previous: Matheus Tavares BernardinoNext: Matheus Tavares Bernardino
Message 61 of 127 in “clone: dir iterator refactoring with tests”
  1. 0/5 clone: dir iterator refactoring with testsMatheus Tavares, Feb 26, 2019
  2. 1/5 dir-iterator: add flags parameter to dir_iterator_beginMatheus Tavares, Feb 26, 2019
  3. Duy NguyenFeb 26, 2019
  4. Matheus Tavares BernardinoFeb 27, 2019
  5. 3/5 clone: copy hidden paths at local cloneMatheus Tavares, Feb 26, 2019
  6. Duy NguyenFeb 26, 2019
  7. 2/5 clone: test for our behavior on odd objects/* contentMatheus Tavares, Feb 26, 2019
  8. 4/5 clone: extract function from copy_or_link_directoryMatheus Tavares, Feb 26, 2019
  9. Duy NguyenFeb 26, 2019
  10. Matheus Tavares BernardinoFeb 27, 2019
  11. Thomas GummererFeb 27, 2019
  12. Matheus Tavares BernardinoFeb 27, 2019
  13. 5/5 clone: use dir-iterator to avoid explicit dir traversalMatheus Tavares, Feb 26, 2019
  14. Ævar Arnfjörð BjarmasonFeb 26, 2019
  15. Duy NguyenFeb 26, 2019
  16. Ævar Arnfjörð BjarmasonFeb 26, 2019
  17. Matheus Tavares BernardinoFeb 27, 2019
  18. Duy NguyenFeb 28, 2019
  19. Ævar Arnfjörð BjarmasonFeb 28, 2019
  20. Ævar Arnfjörð BjarmasonFeb 26, 2019
  21. Duy NguyenFeb 26, 2019
  22. 0/5 clone: dir iterator refactoring with testsÆvar Arnfjörð Bjarmason, Feb 26, 2019
  23. Matheus Tavares BernardinoFeb 26, 2019
  24. [GSoC][PATCH v4 0/7] clone: dir-iterator refactoring with testsMatheus Tavares, Mar 22, 2019
  25. [GSoC][PATCH v4 1/7] clone: test for our behavior on odd objects/* contentMatheus Tavares, Mar 22, 2019
  26. Matheus Tavares BernardinoMar 24, 2019
  27. SZEDER GáborMar 24, 2019
  28. Matheus Tavares BernardinoMar 26, 2019
  29. Thomas GummererMar 28, 2019
  30. Matheus Tavares BernardinoMar 29, 2019
  31. Thomas GummererMar 29, 2019
  32. SZEDER GáborMar 29, 2019
  33. Matheus Tavares BernardinoMar 30, 2019
  34. [GSoC][PATCH v4 2/7] clone: better handle symlinked files at .git/objects/Matheus Tavares, Mar 22, 2019
  35. Thomas GummererMar 28, 2019
  36. Ævar Arnfjörð BjarmasonMar 29, 2019
  37. Thomas GummererMar 29, 2019
  38. Matheus Tavares BernardinoMar 29, 2019
  39. Thomas GummererMar 29, 2019
  40. Matheus Tavares BernardinoMar 30, 2019
  41. Thomas GummererMar 30, 2019
  42. Matheus Tavares BernardinoApr 1, 2019
  43. Johannes SchindelinMar 29, 2019
  44. [GSoC][PATCH v4 3/7] dir-iterator: add flags parameter to dir_iterator_beginMatheus Tavares, Mar 22, 2019
  45. Thomas GummererMar 28, 2019
  46. Matheus Tavares BernardinoMar 29, 2019
  47. [GSoC][PATCH v4 4/7] clone: copy hidden paths at local cloneMatheus Tavares, Mar 22, 2019
  48. [GSoC][PATCH v4 5/7] clone: extract function from copy_or_link_directoryMatheus Tavares, Mar 22, 2019
  49. [GSoC][PATCH v4 6/7] clone: use dir-iterator to avoid explicit dir traversalMatheus Tavares, Mar 22, 2019
  50. [GSoC][PATCH v4 7/7] clone: Replace strcmp by fspathcmpMatheus Tavares, Mar 22, 2019
  51. [GSoC][PATCH v5 0/7] clone: dir-iterator refactoring with testsMatheus Tavares, Mar 30, 2019
  52. [GSoC][PATCH v5 1/7] clone: test for our behavior on odd objects/* contentMatheus Tavares, Mar 30, 2019
  53. [GSoC][PATCH v5 2/7] clone: better handle symlinked files at .git/objects/Matheus Tavares, Mar 30, 2019
  54. Thomas GummererMar 31, 2019
  55. Matheus Tavares BernardinoApr 1, 2019
  56. [GSoC][PATCH v5 3/7] dir-iterator: add flags parameter to dir_iterator_beginMatheus Tavares, Mar 30, 2019
  57. Thomas GummererMar 31, 2019
  58. Matheus Tavares BernardinoApr 10, 2019
  59. Thomas GummererApr 11, 2019
  60. Matheus Tavares BernardinoApr 23, 2019
  61. Thomas GummererApr 24, 2019
  62. Matheus Tavares BernardinoApr 26, 2019
  63. [GSoC][PATCH v5 4/7] clone: copy hidden paths at local cloneMatheus Tavares, Mar 30, 2019
  64. [GSoC][PATCH v5 5/7] clone: extract function from copy_or_link_directoryMatheus Tavares, Mar 30, 2019
  65. [GSoC][PATCH v5 6/7] clone: use dir-iterator to avoid explicit dir traversalMatheus Tavares, Mar 30, 2019
  66. [GSoC][PATCH v5 7/7] clone: replace strcmp by fspathcmpMatheus Tavares, Mar 30, 2019
  67. Thomas GummererMar 31, 2019
  68. Matheus Tavares BernardinoApr 1, 2019
  69. [GSoC][PATCH v6 00/10] clone: dir-iterator refactoring with testsMatheus Tavares, May 2, 2019
  70. [GSoC][PATCH v6 01/10] clone: test for our behavior on odd objects/* contentMatheus Tavares, May 2, 2019
  71. [GSoC][PATCH v6 02/10] clone: better handle symlinked files at .git/objects/Matheus Tavares, May 2, 2019
  72. [GSoC][PATCH v6 03/10] dir-iterator: add tests for dir-iterator APIMatheus Tavares, May 2, 2019
  73. [GSoC][PATCH v6 04/10] dir-iterator: use warning_errno when possibleMatheus Tavares, May 2, 2019
  74. [GSoC][PATCH v6 05/10] dir-iterator: refactor state machine modelMatheus Tavares, May 2, 2019
  75. [GSoC][PATCH v6 06/10] dir-iterator: add flags parameter to dir_iterator_beginMatheus Tavares, May 2, 2019
  76. [GSoC][PATCH v6 07/10] clone: copy hidden paths at local cloneMatheus Tavares, May 2, 2019
  77. [GSoC][PATCH v6 08/10] clone: extract function from copy_or_link_directoryMatheus Tavares, May 2, 2019
  78. [GSoC][PATCH v6 09/10] clone: use dir-iterator to avoid explicit dir traversalMatheus Tavares, May 2, 2019
  79. [GSoC][PATCH v6 10/10] clone: replace strcmp by fspathcmpMatheus Tavares, May 2, 2019
  80. [GSoC][PATCH v7 00/10] clone: dir-iterator refactoring with testsMatheus Tavares, Jun 18, 2019
  81. [GSoC][PATCH v7 01/10] clone: test for our behavior on odd objects/* contentMatheus Tavares, Jun 18, 2019
  82. [GSoC][PATCH v7 02/10] clone: better handle symlinked files at .git/objects/Matheus Tavares, Jun 18, 2019
  83. [GSoC][PATCH v7 03/10] dir-iterator: add tests for dir-iterator APIMatheus Tavares, Jun 18, 2019
  84. [GSoC][PATCH v7 04/10] dir-iterator: use warning_errno when possibleMatheus Tavares, Jun 18, 2019
  85. [GSoC][PATCH v7 05/10] dir-iterator: refactor state machine modelMatheus Tavares, Jun 18, 2019
  86. [GSoC][PATCH v7 06/10] dir-iterator: add flags parameter to dir_iterator_beginMatheus Tavares, Jun 18, 2019
  87. Junio C HamanoJun 25, 2019
  88. Matheus Tavares BernardinoJun 25, 2019
  89. Johannes SchindelinJun 26, 2019
  90. Junio C HamanoJun 26, 2019
  91. Duy NguyenJun 27, 2019
  92. Matheus Tavares BernardinoJun 27, 2019
  93. Johannes SchindelinJun 27, 2019
  94. Matheus Tavares BernardinoJun 27, 2019
  95. Johannes SchindelinJun 28, 2019
  96. Matheus Tavares BernardinoJun 28, 2019
  97. Johannes SchindelinJul 1, 2019
  98. SZEDER GáborJul 3, 2019
  99. Matheus Tavares BernardinoJul 8, 2019
  100. [GSoC][PATCH v7 07/10] clone: copy hidden paths at local cloneMatheus Tavares, Jun 18, 2019
  101. [GSoC][PATCH v7 08/10] clone: extract function from copy_or_link_directoryMatheus Tavares, Jun 18, 2019
  102. [GSoC][PATCH v7 09/10] clone: use dir-iterator to avoid explicit dir traversalMatheus Tavares, Jun 18, 2019
  103. [GSoC][PATCH v7 10/10] clone: replace strcmp by fspathcmpMatheus Tavares, Jun 18, 2019
  104. Matheus Tavares BernardinoJun 19, 2019
  105. Junio C HamanoJun 20, 2019
  106. Matheus Tavares BernardinoJun 21, 2019
  107. [GSoC][PATCH v8 00/10] clone: dir-iterator refactoring with testsMatheus Tavares, Jul 10, 2019
  108. [GSoC][PATCH v8 01/10] clone: test for our behavior on odd objects/* contentMatheus Tavares, Jul 10, 2019
  109. [GSoC][PATCH v8 02/10] clone: better handle symlinked files at .git/objects/Matheus Tavares, Jul 10, 2019
  110. [GSoC][PATCH v8 03/10] dir-iterator: add tests for dir-iterator APIMatheus Tavares, Jul 10, 2019
  111. [GSoC][PATCH v8 04/10] dir-iterator: use warning_errno when possibleMatheus Tavares, Jul 10, 2019
  112. [GSoC][PATCH v8 05/10] dir-iterator: refactor state machine modelMatheus Tavares, Jul 10, 2019
  113. [GSoC][PATCH v8 06/10] dir-iterator: add flags parameter to dir_iterator_beginMatheus Tavares, Jul 10, 2019
  114. [GSoC][PATCH v8 07/10] clone: copy hidden paths at local cloneMatheus Tavares, Jul 10, 2019
  115. [GSoC][PATCH v8 08/10] clone: extract function from copy_or_link_directoryMatheus Tavares, Jul 10, 2019
  116. [GSoC][PATCH v8 09/10] clone: use dir-iterator to avoid explicit dir traversalMatheus Tavares, Jul 10, 2019
  117. [GSoC][PATCH v8 10/10] clone: replace strcmp by fspathcmpMatheus Tavares, Jul 10, 2019
  118. Johannes SchindelinJul 11, 2019
  119. Matheus Tavares BernardinoJul 11, 2019
  120. 1/5 clone: test for our behavior on odd objects/* contentÆvar Arnfjörð Bjarmason, Feb 26, 2019
  121. Matheus Tavares BernardinoFeb 28, 2019
  122. Ævar Arnfjörð BjarmasonMar 1, 2019
  123. Matheus TavaresMar 13, 2019
  124. 2/5 dir-iterator: add flags parameter to dir_iterator_beginÆvar Arnfjörð Bjarmason, Feb 26, 2019
  125. 3/5 clone: copy hidden paths at local cloneÆvar Arnfjörð Bjarmason, Feb 26, 2019
  126. 4/5 clone: extract function from copy_or_link_directoryÆvar Arnfjörð Bjarmason, Feb 26, 2019
  127. 5/5 clone: use dir-iterator to avoid explicit dir traversalÆvar Arnfjörð Bjarmason, Feb 26, 2019

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.