mirror of
https://github.com/git/git.git
synced 2024-11-24 10:26:17 +08:00
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>
This commit is contained in:
parent
765428699a
commit
6694856153
@ -59,8 +59,8 @@ OPTIONS
|
||||
GPG-sign commit.
|
||||
|
||||
--no-gpg-sign::
|
||||
Countermand `commit.gpgSign` configuration variable that is
|
||||
set to force each and every commit to be signed.
|
||||
Do not GPG-sign commit, to countermand a `--gpg-sign` option
|
||||
given earlier on the command line.
|
||||
|
||||
|
||||
Commit Information
|
||||
|
@ -33,10 +33,6 @@ static int commit_tree_config(const char *var, const char *value, void *cb)
|
||||
int status = git_gpg_config(var, value, NULL);
|
||||
if (status)
|
||||
return status;
|
||||
if (!strcmp(var, "commit.gpgsign")) {
|
||||
sign_commit = git_config_bool(var, value) ? "" : NULL;
|
||||
return 0;
|
||||
}
|
||||
return git_default_config(var, value, cb);
|
||||
}
|
||||
|
||||
|
@ -87,7 +87,10 @@ preserve_merges=
|
||||
autosquash=
|
||||
keep_empty=
|
||||
test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t
|
||||
gpg_sign_opt=
|
||||
case "$(git config --bool commit.gpgsign)" in
|
||||
true) gpg_sign_opt=-S ;;
|
||||
*) gpg_sign_opt= ;;
|
||||
esac
|
||||
|
||||
read_basic_state () {
|
||||
test -f "$state_dir/head-name" &&
|
||||
|
@ -45,12 +45,18 @@ test_expect_success GPG 'create signed commits' '
|
||||
git tag seventh-signed &&
|
||||
|
||||
echo 8 >file && test_tick && git commit -a -m eighth -SB7227189 &&
|
||||
git tag eighth-signed-alt
|
||||
git tag eighth-signed-alt &&
|
||||
|
||||
# commit.gpgsign is still on but this must not be signed
|
||||
git tag ninth-unsigned $(echo 9 | git commit-tree HEAD^{tree}) &&
|
||||
# explicit -S of course must sign.
|
||||
git tag tenth-signed $(echo 9 | git commit-tree -S HEAD^{tree})
|
||||
'
|
||||
|
||||
test_expect_success GPG 'verify and show signatures' '
|
||||
(
|
||||
for commit in initial second merge fourth-signed fifth-signed sixth-signed seventh-signed
|
||||
for commit in initial second merge fourth-signed \
|
||||
fifth-signed sixth-signed seventh-signed tenth-signed
|
||||
do
|
||||
git verify-commit $commit &&
|
||||
git show --pretty=short --show-signature $commit >actual &&
|
||||
@ -60,7 +66,8 @@ test_expect_success GPG 'verify and show signatures' '
|
||||
done
|
||||
) &&
|
||||
(
|
||||
for commit in merge^2 fourth-unsigned sixth-unsigned seventh-unsigned
|
||||
for commit in merge^2 fourth-unsigned sixth-unsigned \
|
||||
seventh-unsigned ninth-unsigned
|
||||
do
|
||||
test_must_fail git verify-commit $commit &&
|
||||
git show --pretty=short --show-signature $commit >actual &&
|
||||
|
Loading…
Reference in New Issue
Block a user