From: Junio C Hamano <gitster@pobox.com>
To: Michael Haggerty <mhagger@alum.mit.edu>
Cc: "Stefan Beller" <sbeller@google.com>,
"Ronnie Sahlberg" <ronniesahlberg@gmail.com>,
"Jonathan Nieder" <jrnieder@gmail.com>,
"Nguyễn Thái Ngọc" <pclouds@gmail.com>,
"git@vger.kernel.org" <git@vger.kernel.org>,
"Carlos Martín Nieto" <cmn@elego.de>
Subject: Re: [PATCH 8/8] reflog_expire(): lock symbolic refs themselves, not their referent
Date: Fri, 13 Feb 2015 13:53:08 -0800 [thread overview]
Message-ID: <xmqq3869mqbf.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <54DE5A72.6030106@alum.mit.edu> (Michael Haggerty's message of "Fri, 13 Feb 2015 21:11:30 +0100")
Michael Haggerty <mhagger@alum.mit.edu> writes:
> Now back to the real world. Currently, if R is changed *through* a
> symbolic reference S, then the reflogs for both R and S are updated, but
> not the reflogs for any other symbolic references that might point at R.
> If R is changed directly, then no symref's reflogs are affected, except
> for the special case that HEAD's reflog is changed if it points directly
> at R. This limitation is a hack to avoid having to walk symrefs
> backwards to find any symrefs that might be pointing at R.
Yup.
> It might actually not be extremely expensive to follow symrefs
> backwards. Symbolic references cannot be packed, so we would only have
> to scan the loose references; we could ignore packed refs. But it would
> still be a lot more expensive than just updating one file. I don't know
> that it's worth it, given that symbolic references are used so sparingly.
I personally do not think it is worth it. I further think that it
would be perfectly OK to do one of the following:
- We only maintain reflogs for $GIT_DIR/HEAD; no other symrefs
get their own reflog, and we only check $GIT_DIR/HEAD when
updating refs/heads/* and no other refs for direct reference
(i.e. HEAD -> refs/something/else -> refs/heads/master symref
chain is ignored).
- In addition to the above, we also maintain reflogs for
$GIT_DIR/refs/remotes/*/HEAD but support only when they
directly point into a remote tracking branch in the same
hierarchy. $GIT_DIR/refs/remotes/foo/HEAD that points at
$GIT_DIR/refs/remotes/bar/master is ignored and will get an
undefined behaviour.
> I think that the rule about locks as expressed above can be carried over
> the the real world:
>
> We should hold the locks on exactly those references (symbolic
> or regular) whose reflogs we plan to change. We should acquire all
> of the locks before making any changes.
Sure.
next prev parent reply other threads:[~2015-02-13 21:53 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-09 9:12 [PATCH 0/8] Fix some problems with reflog expiration Michael Haggerty
2015-02-09 9:12 ` [PATCH 1/8] write_ref_sha1(): remove check for lock == NULL Michael Haggerty
2015-02-10 22:52 ` Stefan Beller
2015-02-11 0:06 ` Jeff King
2015-02-09 9:12 ` [PATCH 2/8] write_ref_sha1(): Move write elision test to callers Michael Haggerty
2015-02-12 19:58 ` Junio C Hamano
2015-02-09 9:12 ` [PATCH 3/8] lock_ref_sha1_basic(): do not set force_write for missing references Michael Haggerty
2015-02-10 23:24 ` Stefan Beller
2015-02-11 0:05 ` Jeff King
2015-02-11 0:07 ` Stefan Beller
2015-02-12 12:09 ` Michael Haggerty
2015-02-09 9:12 ` [PATCH 4/8] reflog: fix documentation Michael Haggerty
2015-02-10 23:25 ` Stefan Beller
2015-02-09 9:12 ` [PATCH 5/8] reflog: rearrange the manpage Michael Haggerty
2015-02-10 23:42 ` Stefan Beller
2015-02-12 15:17 ` Michael Haggerty
2015-02-12 20:09 ` Junio C Hamano
2015-02-09 9:12 ` [PATCH 6/8] reflog_expire(): ignore --updateref for symbolic references Michael Haggerty
2015-02-11 0:44 ` Stefan Beller
2015-02-12 16:08 ` Michael Haggerty
2015-02-12 17:04 ` Stefan Beller
2015-02-12 20:16 ` Junio C Hamano
2015-02-12 21:54 ` Jeff King
2015-02-13 14:34 ` Michael Haggerty
2015-02-09 9:12 ` [PATCH 7/8] reflog_expire(): never update a reference to null_sha1 Michael Haggerty
2015-02-09 20:55 ` Eric Sunshine
2015-02-12 11:51 ` Michael Haggerty
2015-02-09 9:12 ` [PATCH 8/8] reflog_expire(): lock symbolic refs themselves, not their referent Michael Haggerty
2015-02-11 0:49 ` Stefan Beller
2015-02-11 22:49 ` Junio C Hamano
2015-02-11 23:25 ` Stefan Beller
2015-02-12 16:52 ` Michael Haggerty
2015-02-12 18:04 ` Stefan Beller
2015-02-13 16:26 ` Michael Haggerty
2015-02-13 17:16 ` Stefan Beller
2015-02-13 18:05 ` Junio C Hamano
2015-02-13 18:21 ` Stefan Beller
2015-02-13 18:26 ` Junio C Hamano
2015-02-13 18:32 ` Stefan Beller
2015-02-13 19:12 ` Junio C Hamano
2015-02-13 20:11 ` Michael Haggerty
2015-02-13 21:53 ` Junio C Hamano [this message]
2015-02-14 5:58 ` Michael Haggerty
2015-02-09 18:57 ` [PATCH 0/8] Fix some problems with reflog expiration Stefan Beller
2015-02-10 23:12 ` [PATCH] refs.c: get rid of force_write flag Stefan Beller
2015-02-12 15:35 ` Michael Haggerty
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqq3869mqbf.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=cmn@elego.de \
--cc=git@vger.kernel.org \
--cc=jrnieder@gmail.com \
--cc=mhagger@alum.mit.edu \
--cc=pclouds@gmail.com \
--cc=ronniesahlberg@gmail.com \
--cc=sbeller@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.