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

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

Previous: Derrick StoleeNext: Derrick Stolee
Message 6 of 26 in “Lazy-load trees when reading commit-graph”
  1. 0/3 Lazy-load trees when reading commit-graphDerrick Stolee, Apr 3, 2018
  2. 1/3 commit: create get_commit_tree() methodDerrick Stolee, Apr 3, 2018
  3. 3/3 commit-graph: lazy-load treesDerrick Stolee, Apr 3, 2018
  4. Stefan BellerApr 3, 2018
  5. Derrick StoleeApr 3, 2018
  6. Stefan BellerApr 3, 2018
  7. 2/3 treewide: use get_commit_tree() for tree accessDerrick Stolee, Apr 3, 2018
  8. Derrick StoleeApr 3, 2018
  9. Jeff KingApr 3, 2018
  10. Derrick StoleeApr 3, 2018
  11. Jeff KingApr 3, 2018
  12. Derrick StoleeApr 4, 2018
  13. 0/4 Lazy-load trees when reading commit-graphDerrick Stolee, Apr 6, 2018
  14. 2/4 commit: create get_commit_tree() methodDerrick Stolee, Apr 6, 2018
  15. 1/4 treewide: rename tree to maybe_treeDerrick Stolee, Apr 6, 2018
  16. 3/4 treewide: replace maybe_tree with accessor methodsDerrick Stolee, Apr 6, 2018
  17. 4/4 commit-graph: lazy-load trees for commitsDerrick Stolee, Apr 6, 2018
  18. Jeff KingApr 6, 2018
  19. Derrick StoleeApr 6, 2018
  20. Stefan BellerApr 6, 2018
  21. Junio C HamanoApr 8, 2018
  22. Derrick StoleeApr 9, 2018
  23. Stefan BellerApr 9, 2018
  24. Jakub NarebskiApr 7, 2018
  25. Derrick StoleeApr 8, 2018
  26. Jakub NarebskiApr 11, 2018

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.