summaryrefslogtreecommitdiff
path: root/t/t3406-rebase-message.sh
blob: d17b450e811cc0f13ab94ac76e288f782e897d64 (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
131
132
133
134
135
136
137
138
139
140
141
#!/bin/sh
 
test_description='messages from rebase operation'
 
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
. ./test-lib.sh
 
test_expect_success 'setup' '
	test_commit O fileO &&
	test_commit X fileX &&
	test_commit A fileA &&
	test_commit B fileB &&
	test_commit Y fileY &&
 
	git checkout -b topic O &&
	git cherry-pick A B &&
	test_commit Z fileZ &&
	git tag start
'
 
test_expect_success 'rebase -m' '
	git rebase -m main >actual &&
	test_must_be_empty actual
'
 
test_expect_success 'rebase against main twice' '
	git rebase --apply main >out &&
	test_i18ngrep "Current branch topic is up to date" out
'
 
test_expect_success 'rebase against main twice with --force' '
	git rebase --force-rebase --apply main >out &&
	test_i18ngrep "Current branch topic is up to date, rebase forced" out
'
 
test_expect_success 'rebase against main twice from another branch' '
	git checkout topic^ &&
	git rebase --apply main topic >out &&
	test_i18ngrep "Current branch topic is up to date" out
'
 
test_expect_success 'rebase fast-forward to main' '
	git checkout topic^ &&
	git rebase --apply topic >out &&
	test_i18ngrep "Fast-forwarded HEAD to topic" out
'
 
test_expect_success 'rebase --stat' '
	git reset --hard start &&
	git rebase --stat main >diffstat.txt &&
	grep "^ fileX |  *1 +$" diffstat.txt
'
 
test_expect_success 'rebase w/config rebase.stat' '
	git reset --hard start &&
	git config rebase.stat true &&
	git rebase main >diffstat.txt &&
	grep "^ fileX |  *1 +$" diffstat.txt
'
 
test_expect_success 'rebase -n overrides config rebase.stat config' '
	git reset --hard start &&
	git config rebase.stat true &&
	git rebase -n main >diffstat.txt &&
	! grep "^ fileX |  *1 +$" diffstat.txt
'
 
test_expect_success 'rebase --onto outputs the invalid ref' '
	test_must_fail git rebase --onto invalid-ref HEAD HEAD 2>err &&
	test_i18ngrep "invalid-ref" err
'
 
test_expect_success 'error out early upon -C<n> or --whitespace=<bad>' '
	test_must_fail git rebase -Cnot-a-number HEAD 2>err &&
	test_i18ngrep "numerical value" err &&
	test_must_fail git rebase --whitespace=bad HEAD 2>err &&
	test_i18ngrep "Invalid whitespace option" err
'
 
test_expect_success 'GIT_REFLOG_ACTION' '
	git checkout start &&
	test_commit reflog-onto &&
	git checkout -b reflog-topic start &&
	test_commit reflog-to-rebase &&
 
	git rebase reflog-onto &&
	git log -g --format=%gs -3 >actual &&
	cat >expect <<-\EOF &&
	rebase (finish): returning to refs/heads/reflog-topic
	rebase (pick): reflog-to-rebase
	rebase (start): checkout reflog-onto
	EOF
	test_cmp expect actual &&
 
	git checkout -b reflog-prefix reflog-to-rebase &&
	GIT_REFLOG_ACTION=change-the-reflog git rebase reflog-onto &&
	git log -g --format=%gs -3 >actual &&
	cat >expect <<-\EOF &&
	change-the-reflog (finish): returning to refs/heads/reflog-prefix
	change-the-reflog (pick): reflog-to-rebase
	change-the-reflog (start): checkout reflog-onto
	EOF
	test_cmp expect actual
'
 
test_expect_success 'rebase --apply reflog' '
	git checkout -b reflog-apply start &&
	old_head_reflog="$(git log -g --format=%gs -1 HEAD)" &&
 
	git rebase --apply Y &&
 
	git log -g --format=%gs -4 HEAD >actual &&
	cat >expect <<-EOF &&
	rebase finished: returning to refs/heads/reflog-apply
	rebase: Z
	rebase: checkout Y
	$old_head_reflog
	EOF
	test_cmp expect actual &&
 
	git log -g --format=%gs -2 reflog-apply >actual &&
	cat >expect <<-EOF &&
	rebase finished: refs/heads/reflog-apply onto $(git rev-parse Y)
	branch: Created from start
	EOF
	test_cmp expect actual
'
 
test_expect_success 'rebase -i onto unrelated history' '
	git init unrelated &&
	test_commit -C unrelated 1 &&
	git -C unrelated remote add -f origin "$PWD" &&
	git -C unrelated branch --set-upstream-to=origin/main &&
	git -C unrelated -c core.editor=true rebase -i -v --stat >actual &&
	test_i18ngrep "Changes to " actual &&
	test_i18ngrep "5 files changed" actual
'
 
test_done