blob: 349a810cee11df36dda3c8ed4bbca3df58040001 [file] [log] [blame]
Junio C Hamano3f7dfe72007-11-18 22:22:00 -08001#!/bin/sh
2
Ævar Arnfjörð Bjarmasonac3f5a32017-03-24 18:40:57 +00003test_description='branch --contains <commit>, --no-contains <commit> --merged, and --no-merged'
Junio C Hamano3f7dfe72007-11-18 22:22:00 -08004
Johannes Schindelind6c6b102020-11-18 23:44:23 +00005GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
Johannes Schindelin334afbc2020-11-18 23:44:19 +00006export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
7
Junio C Hamano3f7dfe72007-11-18 22:22:00 -08008. ./test-lib.sh
9
10test_expect_success setup '
11
12 >file &&
13 git add file &&
14 test_tick &&
15 git commit -m initial &&
Johannes Schindelin94287e72020-12-17 01:07:02 +000016 git branch -M main &&
Junio C Hamano3f7dfe72007-11-18 22:22:00 -080017 git branch side &&
18
19 echo 1 >file &&
20 test_tick &&
Johannes Schindelin94287e72020-12-17 01:07:02 +000021 git commit -a -m "second on main" &&
Junio C Hamano3f7dfe72007-11-18 22:22:00 -080022
23 git checkout side &&
24 echo 1 >file &&
25 test_tick &&
26 git commit -a -m "second on side" &&
27
Johannes Schindelin94287e72020-12-17 01:07:02 +000028 git merge main
Junio C Hamano3f7dfe72007-11-18 22:22:00 -080029
30'
31
Johannes Schindelin94287e72020-12-17 01:07:02 +000032test_expect_success 'branch --contains=main' '
Junio C Hamano3f7dfe72007-11-18 22:22:00 -080033
Johannes Schindelin94287e72020-12-17 01:07:02 +000034 git branch --contains=main >actual &&
Junio C Hamano3f7dfe72007-11-18 22:22:00 -080035 {
Johannes Schindelin94287e72020-12-17 01:07:02 +000036 echo " main" && echo "* side"
Junio C Hamano3f7dfe72007-11-18 22:22:00 -080037 } >expect &&
Jeff King82ebb0b2008-03-12 17:36:36 -040038 test_cmp expect actual
Junio C Hamano3f7dfe72007-11-18 22:22:00 -080039
40'
41
Johannes Schindelin94287e72020-12-17 01:07:02 +000042test_expect_success 'branch --contains main' '
Junio C Hamano3f7dfe72007-11-18 22:22:00 -080043
Johannes Schindelin94287e72020-12-17 01:07:02 +000044 git branch --contains main >actual &&
Junio C Hamano3f7dfe72007-11-18 22:22:00 -080045 {
Johannes Schindelin94287e72020-12-17 01:07:02 +000046 echo " main" && echo "* side"
Junio C Hamano3f7dfe72007-11-18 22:22:00 -080047 } >expect &&
Jeff King82ebb0b2008-03-12 17:36:36 -040048 test_cmp expect actual
Junio C Hamano3f7dfe72007-11-18 22:22:00 -080049
50'
51
Johannes Schindelin94287e72020-12-17 01:07:02 +000052test_expect_success 'branch --no-contains=main' '
Ævar Arnfjörð Bjarmasonac3f5a32017-03-24 18:40:57 +000053
Johannes Schindelin94287e72020-12-17 01:07:02 +000054 git branch --no-contains=main >actual &&
Ævar Arnfjörð Bjarmasond3c67512018-07-27 17:48:11 +000055 test_must_be_empty actual
Ævar Arnfjörð Bjarmasonac3f5a32017-03-24 18:40:57 +000056
57'
58
Johannes Schindelin94287e72020-12-17 01:07:02 +000059test_expect_success 'branch --no-contains main' '
Ævar Arnfjörð Bjarmasonac3f5a32017-03-24 18:40:57 +000060
Johannes Schindelin94287e72020-12-17 01:07:02 +000061 git branch --no-contains main >actual &&
Ævar Arnfjörð Bjarmasond3c67512018-07-27 17:48:11 +000062 test_must_be_empty actual
Ævar Arnfjörð Bjarmasonac3f5a32017-03-24 18:40:57 +000063
64'
65
Junio C Hamano3f7dfe72007-11-18 22:22:00 -080066test_expect_success 'branch --contains=side' '
67
68 git branch --contains=side >actual &&
69 {
70 echo "* side"
71 } >expect &&
Jeff King82ebb0b2008-03-12 17:36:36 -040072 test_cmp expect actual
Junio C Hamano3f7dfe72007-11-18 22:22:00 -080073
74'
75
Ævar Arnfjörð Bjarmasonac3f5a32017-03-24 18:40:57 +000076test_expect_success 'branch --no-contains=side' '
77
78 git branch --no-contains=side >actual &&
79 {
Johannes Schindelin94287e72020-12-17 01:07:02 +000080 echo " main"
Ævar Arnfjörð Bjarmasonac3f5a32017-03-24 18:40:57 +000081 } >expect &&
82 test_cmp expect actual
83
84'
85
Jeff Kingd0403502013-01-31 01:46:11 -050086test_expect_success 'branch --contains with pattern implies --list' '
87
Johannes Schindelin94287e72020-12-17 01:07:02 +000088 git branch --contains=main main >actual &&
Jeff Kingd0403502013-01-31 01:46:11 -050089 {
Johannes Schindelin94287e72020-12-17 01:07:02 +000090 echo " main"
Jeff Kingd0403502013-01-31 01:46:11 -050091 } >expect &&
92 test_cmp expect actual
93
94'
95
Ævar Arnfjörð Bjarmasonac3f5a32017-03-24 18:40:57 +000096test_expect_success 'branch --no-contains with pattern implies --list' '
97
Johannes Schindelin94287e72020-12-17 01:07:02 +000098 git branch --no-contains=main main >actual &&
Ævar Arnfjörð Bjarmasond3c67512018-07-27 17:48:11 +000099 test_must_be_empty actual
Ævar Arnfjörð Bjarmasonac3f5a32017-03-24 18:40:57 +0000100
101'
102
Lars Hjemlif9fd5212008-04-18 18:30:15 +0200103test_expect_success 'side: branch --merged' '
104
105 git branch --merged >actual &&
106 {
Johannes Schindelin94287e72020-12-17 01:07:02 +0000107 echo " main" &&
Lars Hjemlif9fd5212008-04-18 18:30:15 +0200108 echo "* side"
109 } >expect &&
110 test_cmp expect actual
111
112'
113
Jeff Kingd0403502013-01-31 01:46:11 -0500114test_expect_success 'branch --merged with pattern implies --list' '
115
Johannes Schindelin94287e72020-12-17 01:07:02 +0000116 git branch --merged=side main >actual &&
Jeff Kingd0403502013-01-31 01:46:11 -0500117 {
Johannes Schindelin94287e72020-12-17 01:07:02 +0000118 echo " main"
Jeff Kingd0403502013-01-31 01:46:11 -0500119 } >expect &&
120 test_cmp expect actual
121
122'
123
Lars Hjemlif9fd5212008-04-18 18:30:15 +0200124test_expect_success 'side: branch --no-merged' '
125
126 git branch --no-merged >actual &&
Ævar Arnfjörð Bjarmasond3c67512018-07-27 17:48:11 +0000127 test_must_be_empty actual
Lars Hjemlif9fd5212008-04-18 18:30:15 +0200128
129'
130
Johannes Schindelin94287e72020-12-17 01:07:02 +0000131test_expect_success 'main: branch --merged' '
Lars Hjemlif9fd5212008-04-18 18:30:15 +0200132
Johannes Schindelin94287e72020-12-17 01:07:02 +0000133 git checkout main &&
Lars Hjemlif9fd5212008-04-18 18:30:15 +0200134 git branch --merged >actual &&
135 {
Johannes Schindelin94287e72020-12-17 01:07:02 +0000136 echo "* main"
Lars Hjemlif9fd5212008-04-18 18:30:15 +0200137 } >expect &&
138 test_cmp expect actual
139
140'
141
Johannes Schindelin94287e72020-12-17 01:07:02 +0000142test_expect_success 'main: branch --no-merged' '
Lars Hjemlif9fd5212008-04-18 18:30:15 +0200143
144 git branch --no-merged >actual &&
145 {
146 echo " side"
147 } >expect &&
148 test_cmp expect actual
149
150'
151
Jeff Kingd0403502013-01-31 01:46:11 -0500152test_expect_success 'branch --no-merged with pattern implies --list' '
153
Johannes Schindelin94287e72020-12-17 01:07:02 +0000154 git branch --no-merged=main main >actual &&
Ævar Arnfjörð Bjarmasond3c67512018-07-27 17:48:11 +0000155 test_must_be_empty actual
Jeff Kingd0403502013-01-31 01:46:11 -0500156
157'
158
159test_expect_success 'implicit --list conflicts with modification options' '
160
Johannes Schindelin94287e72020-12-17 01:07:02 +0000161 test_must_fail git branch --contains=main -d &&
162 test_must_fail git branch --contains=main -m foo &&
163 test_must_fail git branch --no-contains=main -d &&
164 test_must_fail git branch --no-contains=main -m foo
Jeff Kingd0403502013-01-31 01:46:11 -0500165
166'
167
Ævar Arnfjörð Bjarmasonb6438272017-03-23 13:05:18 +0000168test_expect_success 'Assert that --contains only works on commits, not trees & blobs' '
Johannes Schindelin94287e72020-12-17 01:07:02 +0000169 test_must_fail git branch --contains main^{tree} &&
Ævar Arnfjörð Bjarmasonb6438272017-03-23 13:05:18 +0000170 blob=$(git hash-object -w --stdin <<-\EOF
171 Some blob
172 EOF
173 ) &&
Ævar Arnfjörð Bjarmasonac3f5a32017-03-24 18:40:57 +0000174 test_must_fail git branch --contains $blob &&
175 test_must_fail git branch --no-contains $blob
Ævar Arnfjörð Bjarmasonb6438272017-03-23 13:05:18 +0000176'
177
Aaron Lipmanb775d812020-09-15 22:08:38 -0400178test_expect_success 'multiple branch --contains' '
Johannes Schindelin94287e72020-12-17 01:07:02 +0000179 git checkout -b side2 main &&
Aaron Lipmanb775d812020-09-15 22:08:38 -0400180 >feature &&
181 git add feature &&
182 git commit -m "add feature" &&
Johannes Schindelin94287e72020-12-17 01:07:02 +0000183 git checkout -b next main &&
Aaron Lipmanb775d812020-09-15 22:08:38 -0400184 git merge side &&
185 git branch --contains side --contains side2 >actual &&
186 cat >expect <<-\EOF &&
187 * next
188 side
189 side2
190 EOF
191 test_cmp expect actual
192'
193
Aaron Lipman21bf9332020-09-15 22:08:40 -0400194test_expect_success 'multiple branch --merged' '
Johannes Schindelin94287e72020-12-17 01:07:02 +0000195 git branch --merged next --merged main >actual &&
Aaron Lipman21bf9332020-09-15 22:08:40 -0400196 cat >expect <<-\EOF &&
Johannes Schindelin94287e72020-12-17 01:07:02 +0000197 main
Aaron Lipman21bf9332020-09-15 22:08:40 -0400198 * next
199 side
200 EOF
201 test_cmp expect actual
202'
203
Aaron Lipmanb775d812020-09-15 22:08:38 -0400204test_expect_success 'multiple branch --no-contains' '
205 git branch --no-contains side --no-contains side2 >actual &&
206 cat >expect <<-\EOF &&
Johannes Schindelin94287e72020-12-17 01:07:02 +0000207 main
Aaron Lipmanb775d812020-09-15 22:08:38 -0400208 EOF
209 test_cmp expect actual
210'
211
Aaron Lipman21bf9332020-09-15 22:08:40 -0400212test_expect_success 'multiple branch --no-merged' '
Johannes Schindelin94287e72020-12-17 01:07:02 +0000213 git branch --no-merged next --no-merged main >actual &&
Aaron Lipman21bf9332020-09-15 22:08:40 -0400214 cat >expect <<-\EOF &&
215 side2
216 EOF
217 test_cmp expect actual
218'
219
Aaron Lipmanb775d812020-09-15 22:08:38 -0400220test_expect_success 'branch --contains combined with --no-contains' '
Johannes Schindelin94287e72020-12-17 01:07:02 +0000221 git checkout -b seen main &&
Aaron Lipmanb775d812020-09-15 22:08:38 -0400222 git merge side &&
223 git merge side2 &&
224 git branch --contains side --no-contains side2 >actual &&
225 cat >expect <<-\EOF &&
226 next
227 side
228 EOF
229 test_cmp expect actual
230'
231
Aaron Lipman21bf9332020-09-15 22:08:40 -0400232test_expect_success 'branch --merged combined with --no-merged' '
233 git branch --merged seen --no-merged next >actual &&
234 cat >expect <<-\EOF &&
235 * seen
236 side2
237 EOF
238 test_cmp expect actual
239'
240
Jeff King8376a702014-09-18 06:49:43 -0400241# We want to set up a case where the walk for the tracking info
242# of one branch crosses the tip of another branch (and make sure
243# that the latter walk does not mess up our flag to see if it was
244# merged).
245#
Johannes Schindelin94287e72020-12-17 01:07:02 +0000246# Here "topic" tracks "main" with one extra commit, and "zzz" points to the
247# same tip as main The name "zzz" must come alphabetically after "topic"
Jeff King8376a702014-09-18 06:49:43 -0400248# as we process them in that order.
Johannes Schindelin94287e72020-12-17 01:07:02 +0000249test_expect_success 'branch --merged with --verbose' '
250 git branch --track topic main &&
Jeff King8376a702014-09-18 06:49:43 -0400251 git branch zzz topic &&
252 git checkout topic &&
253 test_commit foo &&
254 git branch --merged topic >actual &&
255 cat >expect <<-\EOF &&
Johannes Schindelin94287e72020-12-17 01:07:02 +0000256 main
Jeff King8376a702014-09-18 06:49:43 -0400257 * topic
258 zzz
259 EOF
260 test_cmp expect actual &&
261 git branch --verbose --merged topic >actual &&
brian m. carlsona5f61c72019-08-18 19:16:33 +0000262 cat >expect <<-EOF &&
Johannes Schindelin66713e82020-10-23 14:00:05 +0000263 main $(git rev-parse --short main) second on main
264 * topic $(git rev-parse --short topic ) [ahead 1] foo
265 zzz $(git rev-parse --short zzz ) second on main
Jeff King8376a702014-09-18 06:49:43 -0400266 EOF
Ævar Arnfjörð Bjarmason1108cea2021-02-11 02:53:53 +0100267 test_cmp expect actual
Jeff King8376a702014-09-18 06:49:43 -0400268'
269
Junio C Hamano3f7dfe72007-11-18 22:22:00 -0800270test_done