Thread (37 messages) flat view 37 messages, 6 authors, 2021-10-01

Re: [PATCH 5/7] tmp-objdir: new API for creating and removing primary object dirs

From: Jeff King <hidden>
Date: 2021-09-30 07:46:45

On Thu, Sep 30, 2021 at 03:26:42AM -0400, Jeff King wrote:
quoted
quoted
If you remove the tmp_objdir as the primary as soon as you're done with
the merge, but before you run the diff, you might be OK, though.
It has to be after I run the diff, because the diff needs access to
the temporary files to diff against them.
Right, of course. I was too fixated on the object-write part, forgetting
that the whole point of the exercise is to later read them back. :)
Ah, no, I remember what I was trying to say here. The distinction is
between "remove the tmp_objdir" and "remove it as the primary".

I.e., if you do this:

  1. create tmp_objdir

  2. make tmp_objdir primary for writes

  3. run the "merge" half of remerge-diff, writing objects into the
     temporary space

  4. stop having tmp_objdir as the primary; instead make it an alternate

  5. run the diff

  6. remove tmp_objdir totally

Then step 5 can't accidentally write objects into the temporary space,
but it can still read them. So it's not entirely safe, but it's safer,
and it would be a much smaller change.

Some ways it could go wrong:

  - is it possible for the merge code to ever write an object? I kind of
    wonder if we'd ever do any cache-able transformations as part of a
    content-level merge. I don't think we do now, though.

  - in step 5, write_object_file() may still be confused by the presence
    of the to-be-thrown-away objects in the alternate. This is pretty
    unlikely, as it implies that the remerge-diff wrote a blob or tree
    that is byte-identical to something that the diff wants to write.

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help