Re: [GSoC][PATCH v5 3/7] dir-iterator: add flags parameter to dir_iterator_begin
- From
Matheus Tavares Bernardino <matheus.bernardino@usp.br>
- Date
- Apr 10, 2019, 20:24 UTC
- Message-ID
- <CAHd-oW7yPj5Ons3kfdEHtFgowc=F=2BD9EvU+fJbHe9=UXhx1g@mail.gmail.com>
- In-Reply-To
- <20190331181209.GT32487@hank.intra.tgummerer.com>
Hi, Thomas
Sorry for the late reply, but now that I submitted my GSoC proposal I can finally come back to this series.
On Sun, Mar 31, 2019 at 3:12 PM Thomas Gummerer <t.gummerer@gmail.com> wrote:
Show 45 quoted lines
>
> On 03/30, Matheus Tavares wrote:
> > Add the possibility of giving flags to dir_iterator_begin to initialize
> > a dir-iterator with special options.
> >
> > Currently possible flags are DIR_ITERATOR_PEDANTIC, which makes
> > dir_iterator_advance abort immediately in the case of an error while
> > trying to fetch next entry; and DIR_ITERATOR_FOLLOW_SYMLINKS, which
> > makes the iteration follow symlinks to directories and include its
> > contents in the iteration. These new flags will be used in a subsequent
> > patch.
> >
> > Also adjust refs/files-backend.c to the new dir_iterator_begin
> > signature.
> >
> > Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br>
> > ---
> > dir-iterator.c | 28 +++++++++++++++++++++++++---
> > dir-iterator.h | 39 +++++++++++++++++++++++++++++++++------
> > refs/files-backend.c | 2 +-
> > 3 files changed, 59 insertions(+), 10 deletions(-)
> >
> > diff --git a/dir-iterator.c b/dir-iterator.c
> > index f2dcd82fde..17aca8ea41 100644
> > --- a/dir-iterator.c
> > +++ b/dir-iterator.c
> > @@ -48,12 +48,16 @@ struct dir_iterator_int {
> > * that will be included in this iteration.
> > */
> > struct dir_iterator_level *levels;
> > +
> > + /* Combination of flags for this dir-iterator */
> > + unsigned flags;
> > };
> >
> > int dir_iterator_advance(struct dir_iterator *dir_iterator)
> > {
> > struct dir_iterator_int *iter =
> > (struct dir_iterator_int *)dir_iterator;
> > + int ret;
>
> Minor nit: I'd define this variable closer to where it is actually
> used, inside the second 'while(1)' loop in this function. That would
> make it clearer that it's only used there and not in other places in
> the function as well, which I had first expected when I read this.Right, thanks.
Show 15 quoted lines
> > 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.
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...
Also CC-ed Michael in case he has some input