Git fork
1#!/bin/sh
2
3test_description='test globbing (and noglob) of pathspec limiting'
4
5. ./test-lib.sh
6
7test_expect_success 'create commits with glob characters' '
8 test_commit unrelated bar &&
9 test_commit vanilla foo &&
10 # insert file "f*" in the commit, but in a way that avoids
11 # the name "f*" in the worktree, because it is not allowed
12 # on Windows (the tests below do not depend on the presence
13 # of the file in the worktree)
14 git config core.protectNTFS false &&
15 git update-index --add --cacheinfo 100644 "$(git rev-parse HEAD:foo)" "f*" &&
16 test_tick &&
17 git commit -m star &&
18 test_commit bracket "f[o][o]"
19'
20
21test_expect_success 'vanilla pathspec matches literally' '
22 echo vanilla >expect &&
23 git log --format=%s -- foo >actual &&
24 test_cmp expect actual
25'
26
27test_expect_success 'star pathspec globs' '
28 cat >expect <<-\EOF &&
29 bracket
30 star
31 vanilla
32 EOF
33 git log --format=%s -- "f*" >actual &&
34 test_cmp expect actual
35'
36
37test_expect_success 'star pathspec globs' '
38 cat >expect <<-\EOF &&
39 bracket
40 star
41 vanilla
42 EOF
43 git log --format=%s -- ":(glob)f*" >actual &&
44 test_cmp expect actual
45'
46
47test_expect_success 'bracket pathspec globs and matches literal brackets' '
48 cat >expect <<-\EOF &&
49 bracket
50 vanilla
51 EOF
52 git log --format=%s -- "f[o][o]" >actual &&
53 test_cmp expect actual
54'
55
56test_expect_success 'bracket pathspec globs and matches literal brackets' '
57 cat >expect <<-\EOF &&
58 bracket
59 vanilla
60 EOF
61 git log --format=%s -- ":(glob)f[o][o]" >actual &&
62 test_cmp expect actual
63'
64
65test_expect_success 'no-glob option matches literally (vanilla)' '
66 echo vanilla >expect &&
67 git --literal-pathspecs log --format=%s -- foo >actual &&
68 test_cmp expect actual
69'
70
71test_expect_success 'no-glob option matches literally (vanilla)' '
72 echo vanilla >expect &&
73 git log --format=%s -- ":(literal)foo" >actual &&
74 test_cmp expect actual
75'
76
77test_expect_success 'no-glob option matches literally (star)' '
78 echo star >expect &&
79 git --literal-pathspecs log --format=%s -- "f*" >actual &&
80 test_cmp expect actual
81'
82
83test_expect_success 'no-glob option matches literally (star)' '
84 echo star >expect &&
85 git log --format=%s -- ":(literal)f*" >actual &&
86 test_cmp expect actual
87'
88
89test_expect_success 'no-glob option matches literally (bracket)' '
90 echo bracket >expect &&
91 git --literal-pathspecs log --format=%s -- "f[o][o]" >actual &&
92 test_cmp expect actual
93'
94
95test_expect_success 'no-glob option matches literally (bracket)' '
96 echo bracket >expect &&
97 git log --format=%s -- ":(literal)f[o][o]" >actual &&
98 test_cmp expect actual
99'
100
101test_expect_success 'no-glob option disables :(literal)' '
102 git --literal-pathspecs log --format=%s -- ":(literal)foo" >actual &&
103 test_must_be_empty actual
104'
105
106test_expect_success 'no-glob environment variable works' '
107 echo star >expect &&
108 GIT_LITERAL_PATHSPECS=1 git log --format=%s -- "f*" >actual &&
109 test_cmp expect actual
110'
111
112test_expect_success 'blame takes global pathspec flags' '
113 git --literal-pathspecs blame -- foo &&
114 git --icase-pathspecs blame -- foo &&
115 git --glob-pathspecs blame -- foo &&
116 git --noglob-pathspecs blame -- foo
117'
118
119test_expect_success 'setup xxx/bar' '
120 mkdir xxx &&
121 test_commit xxx xxx/bar
122'
123
124test_expect_success '**/ works with :(glob)' '
125 cat >expect <<-\EOF &&
126 xxx
127 unrelated
128 EOF
129 git log --format=%s -- ":(glob)**/bar" >actual &&
130 test_cmp expect actual
131'
132
133test_expect_success '**/ does not work with --noglob-pathspecs' '
134 git --noglob-pathspecs log --format=%s -- "**/bar" >actual &&
135 test_must_be_empty actual
136'
137
138test_expect_success '**/ works with :(glob) and --noglob-pathspecs' '
139 cat >expect <<-\EOF &&
140 xxx
141 unrelated
142 EOF
143 git --noglob-pathspecs log --format=%s -- ":(glob)**/bar" >actual &&
144 test_cmp expect actual
145'
146
147test_expect_success '**/ works with --glob-pathspecs' '
148 cat >expect <<-\EOF &&
149 xxx
150 unrelated
151 EOF
152 git --glob-pathspecs log --format=%s -- "**/bar" >actual &&
153 test_cmp expect actual
154'
155
156test_expect_success '**/ does not work with :(literal) and --glob-pathspecs' '
157 git --glob-pathspecs log --format=%s -- ":(literal)**/bar" >actual &&
158 test_must_be_empty actual
159'
160
161test_done