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

Re: [PATCH v2 1/3] factor out refresh_and_write_cache function

From
Thomas Gummerer <t.gummerer@gmail.com>
Date
Sep 2, 2019, 17:15 UTC
Message-ID
<20190902171539.GB77876@cat>
In-Reply-To
<xmqq8srazipr.fsf@gitster-ct.c.googlers.com>
On 08/30, Junio C Hamano wrote:
Show 17 quoted lines
> Martin Ågren <martin.agren@gmail.com> writes:
> 
> > There's a difference in behavior that I'm not sure about: We used
> > to ignore the return value of `refresh_cache()`, i.e. we didn't care
> > whether it had any errors. I have no idea whether that's safe to do --
> > especially as we go on to write the index. So I don't know whether this
> > patch fixes a bug by introducing the early return. Or if it *introduces*
> > a bug by bailing too aggressively. Do you know more?
> 
> One common reason why refresh_cache() fails is because the index is
> unmerged (i.e. has one or more higher-stage entries).  After an
> attempt to refresh, this would not wrote out the index in such a
> case, which might even be more correct thing to do than the original
> in the original context of "git am" implementation.  The next thing
> that happens after the caller calls this function is to ask
> repo_index_has_changes(), and we'd say "the index is dirty" whether
> the index is written back or not from such a state.

Looking at the other callsites, we seem to do something similar everywhere, and usually fail if the index has unmerged entries. So the refreshed index would only not be written out in the case where there's unmerged entries, and we fail later, which I think is okay.

Show 5 quoted lines
> > The above makes me think that once this new function is in good shape,
> > the commit introducing it could sell it as "this is hard to get right --
> > let's implement it correctly once and for all". ;-)
> 
> Yes, that is a more severe issue.

With this do you mean what you quoted above, or that the lockfile is not rolled back? I agree that the lockfile not being rolled back if 'refresh_cache()' fails is indeed the bigger issue, and I'll fix that in v3. I can also add something like the above to the commit message, just wanted to make sure I'm not missing something subtle in what you quoted above.

Previous: Junio C HamanoNext: Junio C Hamano
Message 15 of 29 in “make sure stash refreshes the index properly”
  1. 0/3 make sure stash refreshes the index properlyThomas Gummerer, Aug 27, 2019
  2. 2/3 merge: use refresh_and_write_cacheThomas Gummerer, Aug 27, 2019
  3. Martin ÅgrenAug 28, 2019
  4. Thomas GummererAug 29, 2019
  5. 3/3 stash: make sure to write refreshed cacheThomas Gummerer, Aug 27, 2019
  6. 1/3 factor out refresh_and_write_cache functionThomas Gummerer, Aug 27, 2019
  7. Martin ÅgrenAug 28, 2019
  8. Thomas GummererAug 29, 2019
  9. 0/3 make sure stash refreshes the index properlyThomas Gummerer, Aug 29, 2019
  10. 2/3 merge: use refresh_and_write_cacheThomas Gummerer, Aug 29, 2019
  11. 3/3 stash: make sure to write refreshed cacheThomas Gummerer, Aug 29, 2019
  12. 1/3 factor out refresh_and_write_cache functionThomas Gummerer, Aug 29, 2019
  13. Martin ÅgrenAug 30, 2019
  14. Junio C HamanoAug 30, 2019
  15. Thomas GummererSep 2, 2019
  16. Junio C HamanoSep 3, 2019
  17. 0/3 make sure stash refreshes the index properlyThomas Gummerer, Sep 3, 2019
  18. 1/3 factor out refresh_and_write_cache functionThomas Gummerer, Sep 3, 2019
  19. Junio C HamanoSep 5, 2019
  20. Thomas GummererSep 6, 2019
  21. Johannes SchindelinSep 11, 2019
  22. Thomas GummererSep 11, 2019
  23. Junio C HamanoSep 12, 2019
  24. 2/3 merge: use refresh_and_write_cacheThomas Gummerer, Sep 3, 2019
  25. 3/3 stash: make sure to write refreshed cacheThomas Gummerer, Sep 3, 2019
  26. 0/3 make sure stash refreshes the index properlyThomas Gummerer, Sep 11, 2019
  27. 1/3 factor out refresh_and_write_cache functionThomas Gummerer, Sep 11, 2019
  28. 2/3 merge: use refresh_and_write_cacheThomas Gummerer, Sep 11, 2019
  29. 3/3 stash: make sure to write refreshed cacheThomas Gummerer, Sep 11, 2019

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.