]> git.ipfire.org Git - thirdparty/git.git/commit - git-legacy-rebase.sh
commit-tree: do not pay attention to commit.gpgsign
authorJunio C Hamano <gitster@pobox.com>
Mon, 2 May 2016 21:58:45 +0000 (14:58 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 3 May 2016 17:59:25 +0000 (10:59 -0700)
commit6694856153f85cb552cc92d75ddeabf5bdec4f20
tree1229d96d025339cc64e40d1a00359a8d5712b5bf
parent765428699a5381f113d19974720bc91b5bfeaf1d
commit-tree: do not pay attention to commit.gpgsign

ba3c69a9 (commit: teach --gpg-sign option, 2011-10-05) introduced a
"signed commit" by teaching the --[no]-gpg-sign option and the
commit.gpgsign configuration variable to various commands that
create commits.

Teaching these to "git commit" and "git merge", both of which are
end-user facing Porcelain commands, was perfectly fine.  Allowing
the plumbing "git commit-tree" to suddenly change the behaviour to
surprise the scripts by paying attention to commit.gpgsign was not.

Among the in-tree scripts, filter-branch, quiltimport, rebase and
stash are the commands that run "commit-tree".  If any of these
wants to allow users to always sign every single commit, they should
offer their own configuration (e.g. "filterBranch.gpgsign") with an
option to disable signing (e.g. "git filter-branch --no-gpgsign").

Ignoring commit.gpgsign option _obviously_ breaks the backward
compatibility, but it is easy to follow the standard pattern in
scripts to honor whatever configuration variable they choose to
follow.  E.g.

case $(git config --bool commit.gpgsign) in
true) sign=-S ;;
*) sign= ;;
esac &&
git commit-tree $sign ...whatever other args...

Do so to make sure that "git rebase" keeps paying attention to the
configuration variable, which unfortunately is a documented mistake.

Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-commit-tree.txt
builtin/commit-tree.c
git-rebase.sh
t/t7510-signed-commit.sh