summaryrefslogtreecommitdiff
path: root/t/t3435-rebase-gpg-sign.sh
blob: ec1076685802221f4ba89c75aa09b1283c48e2a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/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-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_failure 'rebase -p --no-gpg-sign override commit.gpgsign' '
	git reset --hard merged &&
	git config commit.gpgsign true &&
	git rebase -p --no-gpg-sign --onto=one fork-point main &&
	test_must_fail git verify-commit HEAD
'
 
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