for-each-ref: add '--contains' option
[git] / t / t6302-for-each-ref-filter.sh
1 #!/bin/sh
2
3 test_description='test for-each-refs usage of ref-filter APIs'
4
5 . ./test-lib.sh
6 . "$TEST_DIRECTORY"/lib-gpg.sh
7
8 if ! test_have_prereq GPG
9 then
10         skip_all="skipping for-each-ref tests, GPG not available"
11         test_done
12 fi
13
14 test_expect_success 'setup some history and refs' '
15         test_commit one &&
16         test_commit two &&
17         test_commit three &&
18         git checkout -b side &&
19         test_commit four &&
20         git tag -s -m "A signed tag message" signed-tag &&
21         git tag -s -m "Annonated doubly" double-tag signed-tag &&
22         git checkout master &&
23         git update-ref refs/odd/spot master
24 '
25
26 test_expect_success 'filtering with --points-at' '
27         cat >expect <<-\EOF &&
28         refs/heads/master
29         refs/odd/spot
30         refs/tags/three
31         EOF
32         git for-each-ref --format="%(refname)" --points-at=master >actual &&
33         test_cmp expect actual
34 '
35
36 test_expect_success 'check signed tags with --points-at' '
37         sed -e "s/Z$//" >expect <<-\EOF &&
38         refs/heads/side Z
39         refs/tags/four Z
40         refs/tags/signed-tag four
41         EOF
42         git for-each-ref --format="%(refname) %(*subject)" --points-at=side >actual &&
43         test_cmp expect actual
44 '
45
46 test_expect_success 'filtering with --merged' '
47         cat >expect <<-\EOF &&
48         refs/heads/master
49         refs/odd/spot
50         refs/tags/one
51         refs/tags/three
52         refs/tags/two
53         EOF
54         git for-each-ref --format="%(refname)" --merged=master >actual &&
55         test_cmp expect actual
56 '
57
58 test_expect_success 'filtering with --no-merged' '
59         cat >expect <<-\EOF &&
60         refs/heads/side
61         refs/tags/double-tag
62         refs/tags/four
63         refs/tags/signed-tag
64         EOF
65         git for-each-ref --format="%(refname)" --no-merged=master >actual &&
66         test_cmp expect actual
67 '
68
69 test_expect_success 'filtering with --contains' '
70         cat >expect <<-\EOF &&
71         refs/heads/master
72         refs/heads/side
73         refs/odd/spot
74         refs/tags/double-tag
75         refs/tags/four
76         refs/tags/signed-tag
77         refs/tags/three
78         refs/tags/two
79         EOF
80         git for-each-ref --format="%(refname)" --contains=two >actual &&
81         test_cmp expect actual
82 '
83
84 test_done