Merge branch 'jc/commit-tree-ignore-commit-gpgsign'

"git commit-tree" plumbing command required the user to always sign
its result when the user sets the commit.gpgsign configuration
variable, which was an ancient mistake.  Rework "git rebase" that
relied on this mistake so that it reads commit.gpgsign and pass (or
not pass) the -S option to "git commit-tree" to keep the end-user
expectation the same, while teaching "git commit-tree" to ignore
the configuration variable.  This will stop requiring the users to
sign commit objects used internally as an implementation detail of
"git stash".

* jc/commit-tree-ignore-commit-gpgsign:
  commit-tree: do not pay attention to commit.gpgsign
This commit is contained in:
Junio C Hamano
2016-05-13 13:18:27 -07:00
4 changed files with 16 additions and 10 deletions

View File

@ -61,8 +61,8 @@ OPTIONS
stuck to the option without a space. stuck to the option without a space.
--no-gpg-sign:: --no-gpg-sign::
Countermand `commit.gpgSign` configuration variable that is Do not GPG-sign commit, to countermand a `--gpg-sign` option
set to force each and every commit to be signed. given earlier on the command line.
Commit Information Commit Information

View File

@ -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); int status = git_gpg_config(var, value, NULL);
if (status) if (status)
return 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); return git_default_config(var, value, cb);
} }

View File

@ -87,7 +87,10 @@ preserve_merges=
autosquash= autosquash=
keep_empty= keep_empty=
test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t 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 () { read_basic_state () {
test -f "$state_dir/head-name" && test -f "$state_dir/head-name" &&

View File

@ -45,12 +45,18 @@ test_expect_success GPG 'create signed commits' '
git tag seventh-signed && git tag seventh-signed &&
echo 8 >file && test_tick && git commit -a -m eighth -SB7227189 && 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' ' 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 do
git verify-commit $commit && git verify-commit $commit &&
git show --pretty=short --show-signature $commit >actual && git show --pretty=short --show-signature $commit >actual &&
@ -60,7 +66,8 @@ test_expect_success GPG 'verify and show signatures' '
done 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 do
test_must_fail git verify-commit $commit && test_must_fail git verify-commit $commit &&
git show --pretty=short --show-signature $commit >actual && git show --pretty=short --show-signature $commit >actual &&