From: Junio C Hamano <gitster@pobox.com>
To: Julian Andres Klode <jak@debian.org>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] hooks/update: Add a hooks.denyunsignedtags option
Date: Mon, 21 Dec 2015 10:13:31 -0800 [thread overview]
Message-ID: <xmqq37uvhdpw.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <1450719124-10558-1-git-send-email-jak@debian.org> (Julian Andres Klode's message of "Mon, 21 Dec 2015 18:32:04 +0100")
Julian Andres Klode <jak@debian.org> writes:
> Introduce an option to deny unsigned tags from entering
> a repository. This is useful in teams where members forget
> to sign their release tags.
>
> It does not actually check whether the signature is actually
> complete or valid, it just checks for the beginning of a
> signature, as further checks would be too involved.
>
> This effectively also denies un-annotated tags, as those
> are unsigned by definition.
>
> Signed-off-by: Julian Andres Klode <jak@debian.org>
> ---
>
> Note: Submitted for review on Sep 12, re-asked on Sep 22, but
> no feedback, so I assume it's good to go,
You assumed wrong. No response merely means that the patch did not
find anybody who is interested enough to even comment on it.
> see http://thread.gmane.org/gmane.comp.version-control.git/277722
> for details
There aren't much details there, but thanks for the pointer. It
gave me a good guess as to why nobody commented on it. You said
"locally fixed" without showing the fixed result and then asked "any
comments?" People didn't have anything to comment on.
Anyway, let's see what we have here.
> Subject: Re: [PATCH] hooks/update: Add a hooks.denyunsignedtags option
See "git log --oneline --no-merges" and notice the local
convention. s/Add/add/;
> @@ -71,7 +75,7 @@ case "$refname","$newrev_type" in
> refs/tags/*,commit)
> # un-annotated tag
> short_refname=${refname##refs/tags/}
> - if [ "$allowunannotated" != "true" ]; then
> + if [ "$allowunannotated" != "true" ] || [ "$denyunsignedtag" = "true" ]; then
Somehow this combination of "allow-unannotated" and "deny-unsigned"
bothers me. Would it make the resulting code and logic more
consistent and easier to follow if this new setting is renamed to
"$allowunsigned", I wonder...
Can we do something with the overly long line, by the way?
> echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
> echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
When $denyunsignedtag is in effect, isn't the user saying that _all_
tags _must_ be signed? In other words, isn't it a configuration error
if allowunannotated and denyunsignedtag are both set to true?
And if you reject that configuration error early, then perhaps you
can even only check allowunannotated here without touching anything
in this hunk, perhaps doing something like this upfront:
allowunannotated=$(git config --bool hooks.allowunannotated || echo false)
allowunsigned=$(git config --bool hooks.allowunsigned || echo true)
case "$allowunannotated,$allowunsigned" in
true,false)
echo >&2 "*** inconsistent setting"
exit 1
esac
Then at this point of the code, if your new condition holds true,
i.e. $allowunsigned is set to "false", $allowunannotated must be
something other than "true", so you do not have to touch the "if".
> @@ -86,6 +90,14 @@ case "$refname","$newrev_type" in
> ;;
> refs/tags/*,tag)
> # annotated tag
> + if [ "$denyunsignedtag" != "true" ] || git cat-file -p $newrev | grep -q 'BEGIN PGP SIGNATURE'; then
> + :
Again, can we do something with the overly long line?
Use of "cat-file -p" is a bad manner in scripts, as we reserve the
right to change what "-p" output looks like purely on human
usability. "cat-file tag", perhaps?
Also,
$ git grep ' PGP '
in our source tells me that we use a bit tighter pattern even when
we are casually trying to see if the thing looks like a PGP signed
payload.
if test "$allowunsigned" = "true" ||
git cat-file "$newrev" |
grep -q '^-----BEGIN PGP SIGNATURE-----$'
then
...
or something?
> + else
> + echo "*** Tag '$refname' is unsigned"
> + echo "*** Unsigned tags are not allowed in this repository." >&2
> + exit 1
> + fi
> +
> if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
> then
> echo "*** Tag '$refname' already exists." >&2
next prev parent reply other threads:[~2015-12-21 18:13 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-21 17:32 [PATCH] hooks/update: Add a hooks.denyunsignedtags option Julian Andres Klode
2015-12-21 18:13 ` Junio C Hamano [this message]
2015-12-21 18:52 ` Junio C Hamano
2015-12-21 19:29 ` Eric Sunshine
-- strict thread matches above, loose matches on Subject: below --
2015-09-12 10:37 Julian Andres Klode
2015-09-12 10:40 ` Julian Andres Klode
2015-09-22 18:42 ` Julian Andres Klode
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=xmqq37uvhdpw.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=jak@debian.org \
/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.