Re: [PATCH 8/8] reflog_expire(): lock symbolic refs themselves, not their referent
- From
Stefan Beller <sbeller@google.com>
- Date
- Feb 11, 2015, 00:49 UTC
- Message-ID
- <CAGZ79kaBGAOt-R1=mSG5H-5p=2UWjZEesktVwQcDAWFC-OW2Eg@mail.gmail.com>
- In-Reply-To
- <1423473164-6011-9-git-send-email-mhagger@alum.mit.edu>
On Mon, Feb 9, 2015 at 1:12 AM, Michael Haggerty <mhagger@alum.mit.edu> wrote:
> When processing the reflog of a symbolic ref, hold the lock on the > symbolic reference itself, not on the reference that it points to.
I am not sure if that makes sense. So when expiring HEAD, you want to have a .git/HEAD.lock file instead of a .git/refs/heads/master.lock file?
What would happen if there is a concurrent modification to the master branch?
Show 22 quoted lines
>
> Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
> ---
> refs.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/refs.c b/refs.c
> index 1b2a497..3fcf342 100644
> --- a/refs.c
> +++ b/refs.c
> @@ -4037,7 +4037,7 @@ int reflog_expire(const char *refname, const unsigned char *sha1,
> * reference itself, plus we might need to update the
> * reference if --updateref was specified:
> */
> - lock = lock_ref_sha1_basic(refname, sha1, NULL, 0, &type);
> + lock = lock_ref_sha1_basic(refname, sha1, NULL, REF_NODEREF, &type);
> if (!lock)
> return error("cannot lock ref '%s'", refname);
> if (!reflog_exists(refname)) {
> --
> 2.1.4
>