Re: [PATCH v3 07/12] unpack-trees: stop recursing into sparse directories
- From
Derrick Stolee <stolee@gmail.com>
- Date
- May 18, 2021, 19:20 UTC
- Message-ID
- <e583fe80-4872-0e2b-622f-8288d2b18bd0@gmail.com>
- In-Reply-To
- <CABPp-BEdWMnzUay9R_GnbiWzuddrFMu87DLmCz4_s8HaBsrYQQ@mail.gmail.com>
On 5/17/2021 10:06 PM, Elijah Newren wrote:
Show 49 quoted lines
> Sorry, I spoke too soon...
>
> On Mon, May 17, 2021 at 7:03 PM Elijah Newren <newren@gmail.com> wrote:
>>
>>> diff --git a/unpack-trees.c b/unpack-trees.c
>>> index ef6a2b1c951c..703b0bdc9dfd 100644
>>> --- a/unpack-trees.c
>>> +++ b/unpack-trees.c
>>> @@ -1261,6 +1261,7 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
>>> struct cache_entry *src[MAX_UNPACK_TREES + 1] = { NULL, };
>>> struct unpack_trees_options *o = info->data;
>>> const struct name_entry *p = names;
>>> + unsigned unpack_tree = 1;
>
> Here, you set unpack_tree to 1.
>
>>>
>>> /* Find first entry with a real name (we could use "mask" too) */
>>> while (!p->mode)
>>> @@ -1307,7 +1308,8 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
>>> }
>>> }
>>>
>>> - if (unpack_nondirectories(n, mask, dirmask, src, names, info) < 0)
>>> + if (unpack_tree &&
>
> You check it's value here...
>
>>> + unpack_nondirectories(n, mask, dirmask, src, names, info) < 0)
>>> return -1;
>>>
>>> if (o->merge && src[0]) {
>>> @@ -1337,7 +1339,8 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
>>> }
>>> }
>>>
>>> - if (traverse_trees_recursive(n, dirmask, mask & ~dirmask,
>>> + if (unpack_tree &&
> ...and here....
>
>>> + traverse_trees_recursive(n, dirmask, mask & ~dirmask,
>>> names, info) < 0)
>>> return -1;
>>> return mask;
>
> but you never set unpack_tree to 0, so this is wasted effort and you
> always recurse. The previous iteration had a case where it'd set
> unpack_tree to 0 in a certain case, but you deleted that code in this
> version. Why?It appears that the changes to unpack-trees.c are no longer relevant, and instead the changes to diff-lib.c (which were already out of place) should instead be the focus. In fact, those changes to diff-lib.c can be simplified and moved to path 10, so I will do that.
Thanks, -Stolee