Junio C Hamano <gitster@xxxxxxxxx> writes: > Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> writes: > ... > As I already said, I do not think notes is a good match as a tool to do > this. > >> matters is that "git push" and "git pull" would JustWork(tm), and >> check the signature if one exists, without having to cut-and-paste >> data that simply shouldn't be visible to the user. >> >> I abhor the interface Ingo suggested, for example.... > > Some cut-and-paste (or piping the e-mail to a command) would be necessary > evil, though, as you would have GPG keys from more than one trusted person > in your keyring, and when you are responding to a pull-request from person > A, finding a valid commit signed by person B should not be a success, but > at least should raise a warning. So here is a quick hack that does not involve cut-and-paste (it depends on the signed-commit topic in 'next'). $ git pull --require-signature would trigger signature verification and stops you after fetching but before merging. git-pull.sh | 25 ++++++++++++++++++++++++- 1 files changed, 24 insertions(+), 1 deletions(-) diff --git a/git-pull.sh b/git-pull.sh index 9868a0b..f3b4c93 100755 --- a/git-pull.sh +++ b/git-pull.sh @@ -39,7 +39,7 @@ test -z "$(git ls-files -u)" || die_conflict test -f "$GIT_DIR/MERGE_HEAD" && die_merge strategy_args= diffstat= no_commit= squash= no_ff= ff_only= -log_arg= verbosity= progress= recurse_submodules= +log_arg= verbosity= progress= recurse_submodules= must_be_signed= merge_args= curr_branch=$(git symbolic-ref -q HEAD) curr_branch_short="${curr_branch#refs/heads/}" @@ -60,6 +60,8 @@ do diffstat=--no-stat ;; --stat|--summary) diffstat=--stat ;; + --require-signature) + must_be_signed=yes ;; --log|--no-log) log_arg=$1 ;; --no-c|--no-co|--no-com|--no-comm|--no-commi|--no-commit) @@ -208,6 +210,27 @@ orig_head=$(git rev-parse -q --verify HEAD) git fetch $verbosity $progress $dry_run $recurse_submodules --update-head-ok "$@" || exit 1 test -z "$dry_run" || exit 0 +if test -n "$must_be_signed" +then + signature=$(git show -s --format='%G?' FETCH_HEAD) + case "$signature" in + G) + case "$verbosity" in + *' '-v*) + git show -s --show-signature FETCH_HEAD ;; + esac + ;; + B) + echo >&2 "Bad signature on the tip commit" + exit 1 + ;; + *) + echo >&2 "Tip commit must be signed" + exit 1 + ;; + fi +fi + curr_head=$(git rev-parse -q --verify HEAD) if test -n "$orig_head" && test "$curr_head" != "$orig_head" then -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html