Re: [PATCH 3/3] commit-graph: lazy-load trees
- From
Stefan Beller <sbeller@google.com>
- Date
- Apr 3, 2018, 18:37 UTC
- Message-ID
- <CAGZ79kZTbDFBcw1MJeYyc_Ge1ZGZzRMVG7dhXEt9MjM9YAcTVA@mail.gmail.com>
- In-Reply-To
- <aa3340e8-dbd9-7cf7-1711-a6f675bf6b8c@gmail.com>
Show 11 quoted lines
>>> +/* >>> + * For performance reasons, a commit loaded from the graph does not >>> + * have a tree loaded until trying to consume it for the first time. >> >> That is the theme of this series/patch, but do we need to write it down >> into the codebase? I'd be inclined to omit this part and only go with: >> >> Load the root tree of a commit and return the tree. > > > OK.
This was just a suggestion, others may want to chime in on the terseness.
Show 22 quoted lines
>
>>
>>> struct tree *get_commit_tree(const struct commit *commit)
>>> {
>>> - return commit->tree;
>>> + if (commit->tree || !commit->object.parsed)
>>
>> I understand to return the tree from the commit
>> when we have the tree in the commit object (the first
>> part).
>>
>> But 'when we have not (yet) parsed the commit object',
>> we also just return its tree? Could you explain the
>> second part of the condition?
>> Is that for commits that are not part of the commit graph?
>> (But then why does it need to be negated?)
>
>
> Some callers check the value of 'commit->tree' without a guarantee that the
> commit was parsed. In this case, the way to preserve the existing behavior
> is to continue returning NULL. If I remove the "|| !commit->object.parsed"
> then the BUG("commit has NULL tree, but was not loaded from commit-graph")Oh. That totally makes sense now. I should have more coffee (got up extra early to see a dentist before going into work)
Show 9 quoted lines
> is hit in these two tests: > > t6012-rev-list-simplify.sh > t6110-rev-list-sparse.sh > > I prefer to keep the BUG() statement and instead use this if statement. If > someone has more clarity on why this is a good existing behavior, then > please chime in. >
I would also keep the BUG statement; I am unsure if we'd want to have a comment explaining the situation, or if it is obvious enough and I was just not focused enough.
This totally makes sense now and I'd keep the code as is.
Thanks, Stefan