From: Michael Haggerty <mhagger@alum.mit.edu>
To: Stefan Beller <sbeller@google.com>
Cc: Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>,
"git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: [PATCH 01/13] delete_ref(): move declaration to refs.h
Date: Tue, 09 Jun 2015 12:10:57 +0200 [thread overview]
Message-ID: <5576BBB1.5020903@alum.mit.edu> (raw)
In-Reply-To: <CAGZ79kYy3zUezRzAG3Uo7bDbLgJ7srj3F1k-ama1C44ZdbHr=Q@mail.gmail.com>
On 06/08/2015 06:43 PM, Stefan Beller wrote:
> On Mon, Jun 8, 2015 at 4:45 AM, Michael Haggerty <mhagger@alum.mit.edu> wrote:
>> [...]
>> +/*
>> + * Delete the specified reference. If old_sha1 is non-NULL and not
>> + * NULL_SHA1, then verify that the current value of the reference is
>> + * old_sha1 before deleting it.
>
> And here I wondered what the distinction between NULL and non-NULL,
> but NULL_SHA1
> is and digging into the code, there is none. (As you can also see in
> this patch above with
> (old_sha1 && !is_null_sha1(old_sha1)) ? old_sha1 : NULL,
> but when digging deeper, the !is_null_sha1(old_sha1) is an arbitrary
> limitation (i.e.
> ref_transaction_delete and ref_transaction_update don't differ between
> those two cases.)
>
> The distinction comes in at lock_ref_sha1_basic, where I think we may
> want to get rid of
> the is_null_sha1 check and depend on NULL/non-NULL as the difference
> for valid and invalid
> sha1's?
I'm having a little trouble understanding your comment.
The convention for ref_transaction_update() and friends is that
* old_sha1 == NULL
We don't care whether the reference existed prior to the
update, nor what its value was.
* *old_sha1 is NULL_SHA1
(by which I mean that old_sha1 points at 20 zero bytes; I hope
that's clear even though NULL_SHA1 is not actually defined
anywhere): The reference must *not* have existed prior to the
update.
* old_sha1 has some other value
The reference must have had that value prior to the update.
lock_ref_sha1_basic() distinguishes between { NULL vs. NULL_SHA1 vs.
other values } in the same way that ref_transaction_update() does.
The delete_ref() function doesn't follow the same convention. It treats
NULL and NULL_SHA1 identically, as "don't care".
It probably makes sense to change delete_ref() use the same convention
as ref_transaction_update(), but there are quite a few callers and I
didn't have the energy to review them all as part of this patch series.
So I left it unchanged and just documented the status quo better.
> That said, do we want to add another sentence to the doc here saying
> non-NULL and not
> NULL_SHA1 are treated the same or is it clear enough?
> With or without this question addressed:
> Reviewed-by: Stefan Beller <sbeller@google.com>
In set notation,
"non-NULL" =
"non-NULL and not NULL_SHA1" ∪
"non-NULL and equal to NULL_SHA1"
The latter two are *not* treated the same, so I don't see how we can
claim that "non-NULL" and "not NULL_SHA1" are treated the same. I must
be misunderstanding you.
Would it help if I changed the comment to
Delete the specified reference. If old_sha1 is non-NULL and not
NULL_SHA1, then verify that the current value of the reference is
old_sha1 before deleting it. If old_sha1 is NULL or NULL_SHA1,
delete the reference it it exists, regardless of its old value.
?
Michael
--
Michael Haggerty
mhagger@alum.mit.edu
next prev parent reply other threads:[~2015-06-09 10:11 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-08 11:45 [PATCH 00/13] Improve "refs" module encapsulation Michael Haggerty
2015-06-08 11:45 ` [PATCH 01/13] delete_ref(): move declaration to refs.h Michael Haggerty
2015-06-08 16:43 ` Stefan Beller
2015-06-09 10:10 ` Michael Haggerty [this message]
2015-06-09 16:42 ` Stefan Beller
2015-06-13 14:30 ` Michael Haggerty
2015-06-08 11:45 ` [PATCH 02/13] remove_branches(): remove temporary Michael Haggerty
2015-06-08 16:45 ` Stefan Beller
2015-06-08 11:45 ` [PATCH 03/13] delete_ref(): handle special case more explicitly Michael Haggerty
2015-06-08 16:48 ` Stefan Beller
2015-06-09 10:17 ` Michael Haggerty
2015-06-08 11:45 ` [PATCH 04/13] delete_refs(): new function for the refs API Michael Haggerty
2015-06-08 11:45 ` [PATCH 05/13] delete_refs(): improve error message Michael Haggerty
2015-06-09 18:47 ` Junio C Hamano
2015-06-08 11:45 ` [PATCH 06/13] delete_refs(): convert error message to lower case Michael Haggerty
2015-06-08 16:51 ` Stefan Beller
2015-06-09 10:23 ` Michael Haggerty
2015-06-08 11:45 ` [PATCH 07/13] prune_remote(): use delete_refs() Michael Haggerty
2015-06-08 16:57 ` Stefan Beller
2015-06-08 17:12 ` Jeff King
2015-06-09 10:50 ` Michael Haggerty
2015-06-09 11:53 ` Jeff King
2015-06-08 11:45 ` [PATCH 08/13] repack_without_refs(): make function private Michael Haggerty
2015-06-08 11:45 ` [PATCH 09/13] initial_ref_transaction_commit(): function for initial ref creation Michael Haggerty
2015-06-08 11:45 ` [PATCH 10/13] refs: remove some functions from the module's public interface Michael Haggerty
2015-06-08 11:45 ` [PATCH 11/13] initial_ref_transaction_commit(): check for duplicate refs Michael Haggerty
2015-06-08 11:45 ` [PATCH 12/13] initial_ref_transaction_commit(): check for ref D/F conflicts Michael Haggerty
2015-06-08 11:45 ` [PATCH 13/13] refs: move the remaining ref module declarations to refs.h Michael Haggerty
2015-06-08 17:03 ` [PATCH 00/13] Improve "refs" module encapsulation Stefan Beller
2015-06-09 18:47 ` Junio C Hamano
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=5576BBB1.5020903@alum.mit.edu \
--to=mhagger@alum.mit.edu \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).