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

Re: [PATCH v2 4/5] fetch: teach independent negotiation (no packfile)

From
Junio C Hamano <gitster@pobox.com>
Date
May 6, 2021, 02:12 UTC
Message-ID
<xmqqbl9o1ugy.fsf@gitster.g>
In-Reply-To
<9f650594-c8a6-4d89-2686-49de48aabb62@gmail.com>
Derrick Stolee <stolee@gmail.com> writes:
Show 14 quoted lines
>> Moving to lookup_object() made me look around, but at this point the
>> object in question (which comes from the negotiation_tips) has been
>> instantiated, so it is OK.
>> 
>>     Side note. The big difference between lookup and parse is what
>>     happens when this process hasn't seen the object yet---the
>>     former will just return NULL instead of instantiating the
>>     in-core copy; for that reason, it is easier on the readers to
>>     use parse_object() if we know we want an in-core object *and*
>>     when we use it we want to see it parsed already).
>
> Please forgive my incorrect recommendation here. I was expecting
> lookup_object() to behave like lookup_commit(), which creates the
> object if it is not already in the cached set.

It is not wrong per-se to recommend or use lookup_object() in this case, as long as who recommends or uses the function is certain that the object should already exist in-core.

But it is just that the lookup_object() is often not what the caller wants to use; it is a very rare use case for a caller to be able to say "I am OK for you to return NULL to me for this object, even if it is in our object store, when we do not yet have it in-core". The only exception is the implementation of lookup_<type>() helpers, where they handle "not loaded yet" answer from lookup_object() with create_object() and always return usable in-core object to the caller.

So the sole practical use case for lookup_object() outside the lookup_<type>() implementation becomes "I am 100% sure that an object with this object name has already been loaded in-core, so please let me access it", which may be optimized for a wrong case (because most of the API pass in-core objects, not object names, around). I am not sure if this particular API strangeness can be remedied, though.

Thanks.
Previous: Derrick StoleeNext: Derrick Stolee
Message 31 of 33 in “Push negotiation”
  1. 0/6 Push negotiationJonathan Tan, Apr 9, 2021
  2. 1/6 fetch-pack: buffer object-format with other argsJonathan Tan, Apr 9, 2021
  3. Junio C HamanoApr 9, 2021
  4. Jonathan TanApr 9, 2021
  5. 2/6 fetch-pack: refactor process_acks()Jonathan Tan, Apr 9, 2021
  6. Junio C HamanoApr 9, 2021
  7. Derrick StoleeMay 3, 2021
  8. 3/6 fetch-pack: refactor add_haves()Jonathan Tan, Apr 9, 2021
  9. Junio C HamanoApr 9, 2021
  10. 4/6 fetch-pack: refactor command and capability writeJonathan Tan, Apr 9, 2021
  11. Junio C HamanoApr 9, 2021
  12. 5/6 fetch: teach independent negotiation (no packfile)Jonathan Tan, Apr 9, 2021
  13. Junio C HamanoApr 9, 2021
  14. Jonathan TanApr 9, 2021
  15. Derrick StoleeMay 3, 2021
  16. Derrick StoleeMay 3, 2021
  17. Jonathan TanMay 3, 2021
  18. 6/6 send-pack: support push negotiationJonathan Tan, Apr 9, 2021
  19. Derrick StoleeMay 3, 2021
  20. Jonathan TanMay 3, 2021
  21. Derrick StoleeMay 4, 2021
  22. Junio C HamanoApr 30, 2021
  23. Derrick StoleeApr 30, 2021
  24. 0/5 Push negotiationJonathan Tan, May 4, 2021
  25. 1/5 fetch-pack: refactor process_acks()Jonathan Tan, May 4, 2021
  26. 2/5 fetch-pack: refactor add_haves()Jonathan Tan, May 4, 2021
  27. 3/5 fetch-pack: refactor command and capability writeJonathan Tan, May 4, 2021
  28. 4/5 fetch: teach independent negotiation (no packfile)Jonathan Tan, May 4, 2021
  29. Junio C HamanoMay 5, 2021
  30. Derrick StoleeMay 5, 2021
  31. Junio C HamanoMay 6, 2021
  32. Derrick StoleeMay 5, 2021
  33. 5/5 send-pack: support push negotiationJonathan Tan, May 4, 2021

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.