Show 36 quoted lines
> Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
>
>> static const char *get_mode(const char *str, unsigned int *modep)
>> @@ -557,8 +558,13 @@ int tree_entry_interesting(const struct name_entry *entry,
>> int pathlen, baselen = base->len;
>> int never_interesting = -1;
>>
>> - if (!ps || !ps->nr)
>> - return 1;
>> + if (!ps->nr) {
>> + if (!ps->recursive || ps->max_depth == -1)
>> + return 1;
>> + return !!within_depth(base->buf, baselen,
>> + !!S_ISDIR(entry->mode),
>> + ps->max_depth);
>> + }
>
> Back in 1d848f6 (tree_entry_interesting(): allow it to say "everything is
> interesting", 2007-03-21), a new return value "2" was introduced to allow
> this function to tell the caller that all the remaining entries in the
> tree object the caller is feeding the entries to this function _will_
> match. This was to optimize away expensive pathspec matching done by this
> function.
>
> In that version, "no pathspec" case wasn't changed to return 2 but still
> returned 1 ("I tell you that this does not match; call me with the next
> entry"). We could have changed it to return 2, but the overhead was only
> a call to a function that checks the number of pathspecs and was not so
> bad.
>
> But shouldn't we start returning 2 by now? It is not that returning 1 was
> a more correct thing to do to begin with.
>
> When depth check is in effect, the result depends on the mode of the
> entry, so we cannot short-circuit by returning 2, but at least we should
> do so when (max_depth == -1), no?