mirror of
https://github.com/git/git.git
synced 2024-11-23 18:05:29 +08:00
1ca57bea4a
In `get_replay_opts()`, we override the `gpg_sign` field that already got populated by `sequencer_init_config()` in case the user has "commit.gpgsign" set in their config. This creates a memory leak because we overwrite the previously assigned value, which may have already pointed to an allocated string. Let's plug the memory leak by freeing the value before we overwrite it. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
125 lines
3.3 KiB
Bash
Executable File
125 lines
3.3 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2020 Doan Tran Cong Danh
|
|
#
|
|
|
|
test_description='test rebase --[no-]gpg-sign'
|
|
|
|
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
|
. ./test-lib.sh
|
|
. "$TEST_DIRECTORY/lib-rebase.sh"
|
|
. "$TEST_DIRECTORY/lib-gpg.sh"
|
|
|
|
if ! test_have_prereq GPG
|
|
then
|
|
skip_all='skip all test rebase --[no-]gpg-sign, gpg not available'
|
|
test_done
|
|
fi
|
|
|
|
test_rebase_gpg_sign () {
|
|
local must_fail= will=will fake_editor=
|
|
if test "x$1" = "x!"
|
|
then
|
|
must_fail=test_must_fail
|
|
will="won't"
|
|
shift
|
|
fi
|
|
conf=$1
|
|
shift
|
|
test_expect_success "rebase $* with commit.gpgsign=$conf $will sign commit" "
|
|
git reset two &&
|
|
git config commit.gpgsign $conf &&
|
|
set_fake_editor &&
|
|
FAKE_LINES='r 1 p 2' git rebase --force-rebase --root $* &&
|
|
$must_fail git verify-commit HEAD^ &&
|
|
$must_fail git verify-commit HEAD
|
|
"
|
|
}
|
|
|
|
test_expect_success 'setup' '
|
|
test_commit one &&
|
|
test_commit two &&
|
|
test_must_fail git verify-commit HEAD &&
|
|
test_must_fail git verify-commit HEAD^
|
|
'
|
|
|
|
test_expect_success 'setup: merge commit' '
|
|
test_commit fork-point &&
|
|
git switch -c side &&
|
|
test_commit three &&
|
|
git switch main &&
|
|
git merge --no-ff side &&
|
|
git tag merged
|
|
'
|
|
|
|
test_rebase_gpg_sign ! false
|
|
test_rebase_gpg_sign true
|
|
test_rebase_gpg_sign ! true --no-gpg-sign
|
|
test_rebase_gpg_sign ! true --gpg-sign --no-gpg-sign
|
|
test_rebase_gpg_sign false --no-gpg-sign --gpg-sign
|
|
test_rebase_gpg_sign true -i
|
|
test_rebase_gpg_sign ! true -i --no-gpg-sign
|
|
test_rebase_gpg_sign ! true -i --gpg-sign --no-gpg-sign
|
|
test_rebase_gpg_sign false -i --no-gpg-sign --gpg-sign
|
|
|
|
test_expect_success 'rebase -r, merge strategy, --gpg-sign will sign commit' '
|
|
git reset --hard merged &&
|
|
test_unconfig commit.gpgsign &&
|
|
git rebase -fr --gpg-sign -s resolve --root &&
|
|
git verify-commit HEAD
|
|
'
|
|
|
|
test_expect_success 'rebase -r, merge strategy, commit.gpgsign=true will sign commit' '
|
|
git reset --hard merged &&
|
|
git config commit.gpgsign true &&
|
|
git rebase -fr -s resolve --root &&
|
|
git verify-commit HEAD
|
|
'
|
|
|
|
test_expect_success 'rebase -r, merge strategy, commit.gpgsign=false --gpg-sign will sign commit' '
|
|
git reset --hard merged &&
|
|
git config commit.gpgsign false &&
|
|
git rebase -fr --gpg-sign -s resolve --root &&
|
|
git verify-commit HEAD
|
|
'
|
|
|
|
test_expect_success "rebase -r, merge strategy, commit.gpgsign=true --no-gpg-sign won't sign commit" '
|
|
git reset --hard merged &&
|
|
git config commit.gpgsign true &&
|
|
git rebase -fr --no-gpg-sign -s resolve --root &&
|
|
test_must_fail git verify-commit HEAD
|
|
'
|
|
|
|
test_expect_success 'rebase -r --gpg-sign will sign commit' '
|
|
git reset --hard merged &&
|
|
test_unconfig commit.gpgsign &&
|
|
git rebase -fr --gpg-sign --root &&
|
|
git verify-commit HEAD
|
|
'
|
|
|
|
test_expect_success 'rebase -r with commit.gpgsign=true will sign commit' '
|
|
git reset --hard merged &&
|
|
git config commit.gpgsign true &&
|
|
git rebase -fr --root &&
|
|
git verify-commit HEAD
|
|
'
|
|
|
|
test_expect_success 'rebase -r --gpg-sign with commit.gpgsign=false will sign commit' '
|
|
git reset --hard merged &&
|
|
git config commit.gpgsign false &&
|
|
git rebase -fr --gpg-sign --root &&
|
|
git verify-commit HEAD
|
|
'
|
|
|
|
test_expect_success "rebase -r --no-gpg-sign with commit.gpgsign=true won't sign commit" '
|
|
git reset --hard merged &&
|
|
git config commit.gpgsign true &&
|
|
git rebase -fr --no-gpg-sign --root &&
|
|
test_must_fail git verify-commit HEAD
|
|
'
|
|
|
|
test_done
|