negative-refspec: fix segfault on : refspec
[git] / t / t3435-rebase-gpg-sign.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2020 Doan Tran Cong Danh
4 #
5
6 test_description='test rebase --[no-]gpg-sign'
7
8 . ./test-lib.sh
9 . "$TEST_DIRECTORY/lib-rebase.sh"
10 . "$TEST_DIRECTORY/lib-gpg.sh"
11
12 if ! test_have_prereq GPG
13 then
14         skip_all='skip all test rebase --[no-]gpg-sign, gpg not available'
15         test_done
16 fi
17
18 test_rebase_gpg_sign () {
19         local must_fail= will=will fake_editor=
20         if test "x$1" = "x!"
21         then
22                 must_fail=test_must_fail
23                 will="won't"
24                 shift
25         fi
26         conf=$1
27         shift
28         test_expect_success "rebase $* with commit.gpgsign=$conf $will sign commit" "
29                 git reset two &&
30                 git config commit.gpgsign $conf &&
31                 set_fake_editor &&
32                 FAKE_LINES='r 1 p 2' git rebase --force-rebase --root $* &&
33                 $must_fail git verify-commit HEAD^ &&
34                 $must_fail git verify-commit HEAD
35         "
36 }
37
38 test_expect_success 'setup' '
39         test_commit one &&
40         test_commit two &&
41         test_must_fail git verify-commit HEAD &&
42         test_must_fail git verify-commit HEAD^
43 '
44
45 test_expect_success 'setup: merge commit' '
46         test_commit fork-point &&
47         git switch -c side &&
48         test_commit three &&
49         git switch master &&
50         git merge --no-ff side &&
51         git tag merged
52 '
53
54 test_rebase_gpg_sign ! false
55 test_rebase_gpg_sign   true
56 test_rebase_gpg_sign ! true  --no-gpg-sign
57 test_rebase_gpg_sign ! true  --gpg-sign --no-gpg-sign
58 test_rebase_gpg_sign   false --no-gpg-sign --gpg-sign
59 test_rebase_gpg_sign   true  -i
60 test_rebase_gpg_sign ! true  -i --no-gpg-sign
61 test_rebase_gpg_sign ! true  -i --gpg-sign --no-gpg-sign
62 test_rebase_gpg_sign   false -i --no-gpg-sign --gpg-sign
63
64 test_expect_failure 'rebase -p --no-gpg-sign override commit.gpgsign' '
65         git reset --hard merged &&
66         git config commit.gpgsign true &&
67         git rebase -p --no-gpg-sign --onto=one fork-point master &&
68         test_must_fail git verify-commit HEAD
69 '
70
71 test_done