Re: [PATCH 07/23] expire_reflog(): use a lock_file for rewriting the reflog file
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Dec 9, 2014, 18:47 UTC
- Message-ID
- <xmqqfvcomzib.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <54857871.5090805@alum.mit.edu>
Michael Haggerty <mhagger@alum.mit.edu> writes:
Show 13 quoted lines
> This isn't documented very well. I thought I saw a comment somewhere in > the code that stated it explicitly, but I can't find it now. In any > case, my understanding of the locking protocol for reflogs is: > > The reflog for "$refname", which is stored at > "$GIT_DIR/logs/$refname", is locked by holding > "$GIT_DIR/refs/$refname.lock", *even if the corresponding > reference is packed*. > > This implies that readers, who don't pay attention to locks, have to be > prepared for the possibility that the reflog is in the middle of an > update and that the last line is incomplete. This is handled by > show_one_reflog_ent(), which discards incomplete lines.
Interesting, as I think I saw Peff did something around that area recently.
I have some more thought around the "transaction" in general, but it will be in a separate message.
Thanks.