]> git.ipfire.org Git - thirdparty/git.git/blob - t/t3201-branch-contains.sh
Merge branch 'ks/doc-checkout-previous'
[thirdparty/git.git] / t / t3201-branch-contains.sh
1 #!/bin/sh
2
3 test_description='branch --contains <commit>, --no-contains <commit> --merged, and --no-merged'
4
5 . ./test-lib.sh
6
7 test_expect_success setup '
8
9 >file &&
10 git add file &&
11 test_tick &&
12 git commit -m initial &&
13 git branch side &&
14
15 echo 1 >file &&
16 test_tick &&
17 git commit -a -m "second on master" &&
18
19 git checkout side &&
20 echo 1 >file &&
21 test_tick &&
22 git commit -a -m "second on side" &&
23
24 git merge master
25
26 '
27
28 test_expect_success 'branch --contains=master' '
29
30 git branch --contains=master >actual &&
31 {
32 echo " master" && echo "* side"
33 } >expect &&
34 test_cmp expect actual
35
36 '
37
38 test_expect_success 'branch --contains master' '
39
40 git branch --contains master >actual &&
41 {
42 echo " master" && echo "* side"
43 } >expect &&
44 test_cmp expect actual
45
46 '
47
48 test_expect_success 'branch --no-contains=master' '
49
50 git branch --no-contains=master >actual &&
51 >expect &&
52 test_cmp expect actual
53
54 '
55
56 test_expect_success 'branch --no-contains master' '
57
58 git branch --no-contains master >actual &&
59 >expect &&
60 test_cmp expect actual
61
62 '
63
64 test_expect_success 'branch --contains=side' '
65
66 git branch --contains=side >actual &&
67 {
68 echo "* side"
69 } >expect &&
70 test_cmp expect actual
71
72 '
73
74 test_expect_success 'branch --no-contains=side' '
75
76 git branch --no-contains=side >actual &&
77 {
78 echo " master"
79 } >expect &&
80 test_cmp expect actual
81
82 '
83
84 test_expect_success 'branch --contains with pattern implies --list' '
85
86 git branch --contains=master master >actual &&
87 {
88 echo " master"
89 } >expect &&
90 test_cmp expect actual
91
92 '
93
94 test_expect_success 'branch --no-contains with pattern implies --list' '
95
96 git branch --no-contains=master master >actual &&
97 >expect &&
98 test_cmp expect actual
99
100 '
101
102 test_expect_success 'side: branch --merged' '
103
104 git branch --merged >actual &&
105 {
106 echo " master" &&
107 echo "* side"
108 } >expect &&
109 test_cmp expect actual
110
111 '
112
113 test_expect_success 'branch --merged with pattern implies --list' '
114
115 git branch --merged=side master >actual &&
116 {
117 echo " master"
118 } >expect &&
119 test_cmp expect actual
120
121 '
122
123 test_expect_success 'side: branch --no-merged' '
124
125 git branch --no-merged >actual &&
126 >expect &&
127 test_cmp expect actual
128
129 '
130
131 test_expect_success 'master: branch --merged' '
132
133 git checkout master &&
134 git branch --merged >actual &&
135 {
136 echo "* master"
137 } >expect &&
138 test_cmp expect actual
139
140 '
141
142 test_expect_success 'master: branch --no-merged' '
143
144 git branch --no-merged >actual &&
145 {
146 echo " side"
147 } >expect &&
148 test_cmp expect actual
149
150 '
151
152 test_expect_success 'branch --no-merged with pattern implies --list' '
153
154 git branch --no-merged=master master >actual &&
155 >expect &&
156 test_cmp expect actual
157
158 '
159
160 test_expect_success 'implicit --list conflicts with modification options' '
161
162 test_must_fail git branch --contains=master -d &&
163 test_must_fail git branch --contains=master -m foo &&
164 test_must_fail git branch --no-contains=master -d &&
165 test_must_fail git branch --no-contains=master -m foo
166
167 '
168
169 test_expect_success 'Assert that --contains only works on commits, not trees & blobs' '
170 test_must_fail git branch --contains master^{tree} &&
171 blob=$(git hash-object -w --stdin <<-\EOF
172 Some blob
173 EOF
174 ) &&
175 test_must_fail git branch --contains $blob &&
176 test_must_fail git branch --no-contains $blob
177 '
178
179 # We want to set up a case where the walk for the tracking info
180 # of one branch crosses the tip of another branch (and make sure
181 # that the latter walk does not mess up our flag to see if it was
182 # merged).
183 #
184 # Here "topic" tracks "master" with one extra commit, and "zzz" points to the
185 # same tip as master The name "zzz" must come alphabetically after "topic"
186 # as we process them in that order.
187 test_expect_success 'branch --merged with --verbose' '
188 git branch --track topic master &&
189 git branch zzz topic &&
190 git checkout topic &&
191 test_commit foo &&
192 git branch --merged topic >actual &&
193 cat >expect <<-\EOF &&
194 master
195 * topic
196 zzz
197 EOF
198 test_cmp expect actual &&
199 git branch --verbose --merged topic >actual &&
200 cat >expect <<-\EOF &&
201 master c77a0a9 second on master
202 * topic 2c939f4 [ahead 1] foo
203 zzz c77a0a9 second on master
204 EOF
205 test_i18ncmp expect actual
206 '
207
208 test_expect_success 'branch --contains combined with --no-contains' '
209 git branch --contains zzz --no-contains topic >actual &&
210 cat >expect <<-\EOF &&
211 master
212 side
213 zzz
214 EOF
215 test_cmp expect actual
216
217 '
218
219 test_done