]> git.ipfire.org Git - thirdparty/git.git/blob - t/t1419-exclude-refs.sh
Merge branch 'ms/rebase-insnformat-doc-fix' into maint-2.43
[thirdparty/git.git] / t / t1419-exclude-refs.sh
1 #!/bin/sh
2
3 test_description='test exclude_patterns functionality in main ref store'
4
5 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
6 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
7
8 TEST_PASSES_SANITIZE_LEAK=true
9 . ./test-lib.sh
10
11 for_each_ref__exclude () {
12 GIT_TRACE2_PERF=1 test-tool ref-store main \
13 for-each-ref--exclude "$@" >actual.raw
14 cut -d ' ' -f 2 actual.raw
15 }
16
17 for_each_ref () {
18 git for-each-ref --format='%(refname)' "$@"
19 }
20
21 assert_jumps () {
22 local nr="$1"
23 local trace="$2"
24
25 grep -q "name:jumps_made value:$nr$" $trace
26 }
27
28 assert_no_jumps () {
29 ! assert_jumps ".*" "$1"
30 }
31
32 test_expect_success 'setup' '
33 test_commit --no-tag base &&
34 base="$(git rev-parse HEAD)" &&
35
36 for name in foo bar baz quux
37 do
38 for i in 1 2 3
39 do
40 echo "create refs/heads/$name/$i $base" || return 1
41 done || return 1
42 done >in &&
43 echo "delete refs/heads/main" >>in &&
44
45 git update-ref --stdin <in &&
46 git pack-refs --all
47 '
48
49 test_expect_success 'excluded region in middle' '
50 for_each_ref__exclude refs/heads refs/heads/foo >actual 2>perf &&
51 for_each_ref refs/heads/bar refs/heads/baz refs/heads/quux >expect &&
52
53 test_cmp expect actual &&
54 assert_jumps 1 perf
55 '
56
57 test_expect_success 'excluded region at beginning' '
58 for_each_ref__exclude refs/heads refs/heads/bar >actual 2>perf &&
59 for_each_ref refs/heads/baz refs/heads/foo refs/heads/quux >expect &&
60
61 test_cmp expect actual &&
62 assert_jumps 1 perf
63 '
64
65 test_expect_success 'excluded region at end' '
66 for_each_ref__exclude refs/heads refs/heads/quux >actual 2>perf &&
67 for_each_ref refs/heads/foo refs/heads/bar refs/heads/baz >expect &&
68
69 test_cmp expect actual &&
70 assert_jumps 1 perf
71 '
72
73 test_expect_success 'disjoint excluded regions' '
74 for_each_ref__exclude refs/heads refs/heads/bar refs/heads/quux >actual 2>perf &&
75 for_each_ref refs/heads/baz refs/heads/foo >expect &&
76
77 test_cmp expect actual &&
78 assert_jumps 2 perf
79 '
80
81 test_expect_success 'adjacent, non-overlapping excluded regions' '
82 for_each_ref__exclude refs/heads refs/heads/bar refs/heads/baz >actual 2>perf &&
83 for_each_ref refs/heads/foo refs/heads/quux >expect &&
84
85 test_cmp expect actual &&
86 assert_jumps 1 perf
87 '
88
89 test_expect_success 'overlapping excluded regions' '
90 for_each_ref__exclude refs/heads refs/heads/ba refs/heads/baz >actual 2>perf &&
91 for_each_ref refs/heads/foo refs/heads/quux >expect &&
92
93 test_cmp expect actual &&
94 assert_jumps 1 perf
95 '
96
97 test_expect_success 'several overlapping excluded regions' '
98 for_each_ref__exclude refs/heads \
99 refs/heads/bar refs/heads/baz refs/heads/foo >actual 2>perf &&
100 for_each_ref refs/heads/quux >expect &&
101
102 test_cmp expect actual &&
103 assert_jumps 1 perf
104 '
105
106 test_expect_success 'non-matching excluded section' '
107 for_each_ref__exclude refs/heads refs/heads/does/not/exist >actual 2>perf &&
108 for_each_ref >expect &&
109
110 test_cmp expect actual &&
111 assert_no_jumps perf
112 '
113
114 test_expect_success 'meta-characters are discarded' '
115 for_each_ref__exclude refs/heads "refs/heads/ba*" >actual 2>perf &&
116 for_each_ref >expect &&
117
118 test_cmp expect actual &&
119 assert_no_jumps perf
120 '
121
122 test_done