From: Junio C Hamano <gitster@pobox.com>
To: "Kyle J. McKay" <mackyle@gmail.com>
Cc: Git mailing list <git@vger.kernel.org>,
Scott Chacon <schacon@gmail.com>,
Johan Herland <johan@herland.net>, Jeff King <peff@peff.net>
Subject: Re: [PATCH v2 2/2] t/t3308-notes-merge.sh: succeed with relaxed notes refs
Date: Tue, 06 Jan 2015 10:25:56 -0800 [thread overview]
Message-ID: <xmqqtx03pxzf.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <F6072C48-FA50-4F9D-AD26-0B4C4DD64B91@gmail.com> (Kyle J. McKay's message of "Tue, 6 Jan 2015 04:27:34 -0800")
"Kyle J. McKay" <mackyle@gmail.com> writes:
> So despite the name of the test, the actual tree contents do not seem
> to be examined.
Yes, but the thing is, thanks to refs/notes restriction, there is no
need to do such examination [*1*].
Note that it is an entirely different matter when you deliberately
violate the expectation using plumbing (e.g. update-ref). Users of
plumbing commands are expected to know what they are doing, so the
level of safety we need to give them can be much lower than Porcelain
commands such as 'git notes'.
But when you stick to Porcelain commands, it is very hard to mix
refs/notes/* with refs/heads/* and refs/remotes/* by mistake. You
have to really work on it by doing something unusual to have a non
commit in refs/heads/*, a commit in refs/notes/*, or a regular
non-note commit in refs/notes/*.
Once you lift the existing restriction, that easy safety goes away,
so the burden of giving a reasonable safety in some other way falls
on the one who is dropping refs/notes restriction.
That is exactly what I meant by that the existing safety pays price
of not being able to store notes outside refs/notes, which may be
too high a price to pay.
>> Although I am not fundamentally against allowing to store notes
>> outside refs/notes/, it is different from "anywhere is fine".
>> Can't we do this widening in a less damaging way?
>
> Without arbitrarily restricting where notes can be stored it seems to
> me the only option would be to have the notes machinery actually
> inspect the tree of any existing notes ref it's passed.
As I said earlier (assuming you read footnotes before you read a new
paragraph), the ship has already sailed.
Obvious two sensible ways forward are to do a blacklist (i.e. allow
anywhere except for known non-notes namespaces like refs/heads/) or
do a whitelist (i.e. allow refs/<some-known-space> in addition to
refs/notes) of the namespace, and the latter is vastly preferrable
than the former, because you can practically *never* crawl back a
namespace once you give it to the general public, even if you later
find it a grave error to open it too widely and need a more
controlled access [*2*]. And the name of the game for a software
that can be relied for a long haul is to avoid painting ourselves in
a corner that we cannot get out of.
If we add refs/remote-notes/* to the whitelist now, and if later it
turns out to be not so ideal and we would prefer another layout for
remotes, e.g. refs/remotesNew/*/{heads,notes,tags}/, we can add
refs/remotesNew/*/notes/ to the whitelist _without_ breaking those
who have already started using refs/remote-notes/*. That is why
I said whitelist is preferrable than blacklist.
[Footnote]
*1* I actually do not think a tree examination would help very much
here. IIRC, somebody decided long time ago that it would be a
good idea to be able to store a path that is not a fanned-out
40-hex in a notes tree and 'git notes merge' would accept such a
notes-tree. Although I doubt that the resulting notes-tree
produced by 'notes merge' is carefully designed one (as opposed
to whatever the implementation happens to do) with sensible
semantics, people may already be relying on it.
*2* The above 'notes-tree can store non fanned-out 40-hex' is a good
example why you need to start strict and loosen only when it
becomes necessary. Despite that even Git itself does not use
that "facility" to do anything useful AFAIK, only because we
started with a loose variant that allows arbitrary garbage, we
cannot retroactively tighten the definition of what a notes-tree
should look like without risking to break practice of other
people.
next prev parent reply other threads:[~2015-01-06 18:26 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-06 8:03 [PATCH v2 0/2] Accept any notes ref Kyle J. McKay
2015-01-06 8:03 ` [PATCH v2 1/2] notes: accept any ref Kyle J. McKay
2015-01-06 8:03 ` [PATCH v2 2/2] t/t3308-notes-merge.sh: succeed with relaxed notes refs Kyle J. McKay
2015-01-06 10:20 ` Junio C Hamano
2015-01-06 12:27 ` Kyle J. McKay
2015-01-06 18:25 ` Junio C Hamano [this message]
2015-01-06 23:29 ` Kyle J. McKay
2015-01-06 23:54 ` Junio C Hamano
2015-01-07 1:27 ` Kyle J. McKay
2015-01-07 0:28 ` Johan Herland
2015-01-07 1:51 ` Kyle J. McKay
2015-01-07 16:14 ` Junio C Hamano
2015-01-07 1:19 ` Johan Herland
2015-01-07 1:19 ` Jeff King
2015-01-07 16:03 ` Junio C Hamano
2015-01-08 10:31 ` Jeff King
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=xmqqtx03pxzf.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=johan@herland.net \
--cc=mackyle@gmail.com \
--cc=peff@peff.net \
--cc=schacon@gmail.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.