Hi Shikher,
I'm not familiar with push certs, but I did notice some general issues
in the sample hook. I hope they're helpful.
Shikher Verma wrote:
index 000000000..b4366e43f
--- /dev/null
+++ b/templates/hooks--post-receive.sample
+#!/bin/sh
...
+if test -z GIT_PUSH_CERT ; then
+ exit 0
+fi
The $ is missing from GIT_PUSH_CERT. test -z GIT_PUSH_CERT will
always be false. :)
The variable should also be quoted. Not all sh implementations accept
a missing argument to test -z, as bash does.
More minor, Documentation/CodingGuidelines suggests placing 'then' on
a new line:
if test -z "$GIT_PUSH_CERT"
then
exit 0
fi
(There is plenty of code that doesn't follow that, so I don't know how
strong that preference is.)
This could also be written as:
test -z "$GIT_PUSH_CERT" && exit 0
I don't know if there's any general preference to shorten it in git's
code or not.
+push_cert=$(git cat-file -p $GIT_PUSH_CERT)
Very minor: there's an extra space before the variable here.
(I also noticed the tests which use $GIT_PUSH_CERT, like t5534, use
'cat-file blob ...' rather than 'cat-file -p ...'. I don't know if
that's much safer/better than letting cat-file guess the object type
in the hook. I have no idea if there's a chance that "$GIT_PUSH_CERT"
has some unexpected, non-blob object type.)
+while read oval nval ref
+do
+ # Verify that the ref update matches that in push certificate.
+ if [[ $push_cert == *$oval" "$nval" "$ref* ]]; then
[[ isn't portable across all the sh implementations git strives to
support, as far as I know.
The minor point about 'then' on new line is applicable here too. It
would also better match the outer 'while' loop.
+ # add the push cert as note (namespaced pushcerts) to nval.
+ git notes --ref=pushcerts add -m "$push_cert" $nval -f
+ fi
+done
--
Todd
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Learn from the mistakes of others--you can never live long enough to
make them all yourself.
-- John Luther