]> git.ipfire.org Git - thirdparty/git.git/blob - t/t4209-log-pickaxe.sh
path.c: don't call the match function without value in trie_find()
[thirdparty/git.git] / t / t4209-log-pickaxe.sh
1 #!/bin/sh
2
3 test_description='log --grep/--author/--regexp-ignore-case/-S/-G'
4 . ./test-lib.sh
5
6 test_log () {
7 expect=$1
8 kind=$2
9 needle=$3
10 shift 3
11 rest=$@
12
13 case $kind in
14 --*)
15 opt=$kind=$needle
16 ;;
17 *)
18 opt=$kind$needle
19 ;;
20 esac
21 case $expect in
22 expect_nomatch)
23 match=nomatch
24 ;;
25 *)
26 match=match
27 ;;
28 esac
29
30 test_expect_success "log $kind${rest:+ $rest} ($match)" "
31 git log $rest $opt --format=%H >actual &&
32 test_cmp $expect actual
33 "
34 }
35
36 # test -i and --regexp-ignore-case and expect both to behave the same way
37 test_log_icase () {
38 test_log $@ --regexp-ignore-case
39 test_log $@ -i
40 }
41
42 test_expect_success setup '
43 >expect_nomatch &&
44
45 >file &&
46 git add file &&
47 test_tick &&
48 git commit -m initial &&
49 git rev-parse --verify HEAD >expect_initial &&
50
51 echo Picked >file &&
52 git add file &&
53 test_tick &&
54 git commit --author="Another Person <another@example.com>" -m second &&
55 git rev-parse --verify HEAD >expect_second
56 '
57
58 test_log expect_initial --grep initial
59 test_log expect_nomatch --grep InItial
60 test_log_icase expect_initial --grep InItial
61 test_log_icase expect_nomatch --grep initail
62
63 test_log expect_second --author Person
64 test_log expect_nomatch --author person
65 test_log_icase expect_second --author person
66 test_log_icase expect_nomatch --author spreon
67
68 test_log expect_nomatch -G picked
69 test_log expect_second -G Picked
70 test_log_icase expect_nomatch -G pickle
71 test_log_icase expect_second -G picked
72
73 test_expect_success 'log -G --textconv (missing textconv tool)' '
74 echo "* diff=test" >.gitattributes &&
75 test_must_fail git -c diff.test.textconv=missing log -Gfoo &&
76 rm .gitattributes
77 '
78
79 test_expect_success 'log -G --no-textconv (missing textconv tool)' '
80 echo "* diff=test" >.gitattributes &&
81 git -c diff.test.textconv=missing log -Gfoo --no-textconv >actual &&
82 test_cmp expect_nomatch actual &&
83 rm .gitattributes
84 '
85
86 test_log expect_nomatch -S picked
87 test_log expect_second -S Picked
88 test_log_icase expect_second -S picked
89 test_log_icase expect_nomatch -S pickle
90
91 test_log expect_nomatch -S p.cked --pickaxe-regex
92 test_log expect_second -S P.cked --pickaxe-regex
93 test_log_icase expect_second -S p.cked --pickaxe-regex
94 test_log_icase expect_nomatch -S p.ckle --pickaxe-regex
95
96 test_expect_success 'log -S --textconv (missing textconv tool)' '
97 echo "* diff=test" >.gitattributes &&
98 test_must_fail git -c diff.test.textconv=missing log -Sfoo &&
99 rm .gitattributes
100 '
101
102 test_expect_success 'log -S --no-textconv (missing textconv tool)' '
103 echo "* diff=test" >.gitattributes &&
104 git -c diff.test.textconv=missing log -Sfoo --no-textconv >actual &&
105 test_cmp expect_nomatch actual &&
106 rm .gitattributes
107 '
108
109 test_expect_success 'setup log -[GS] binary & --text' '
110 git checkout --orphan GS-binary-and-text &&
111 git read-tree --empty &&
112 printf "a\na\0a\n" >data.bin &&
113 git add data.bin &&
114 git commit -m "create binary file" data.bin &&
115 printf "a\na\0a\n" >>data.bin &&
116 git commit -m "modify binary file" data.bin &&
117 git rm data.bin &&
118 git commit -m "delete binary file" data.bin &&
119 git log >full-log
120 '
121
122 test_expect_success 'log -G ignores binary files' '
123 git log -Ga >log &&
124 test_must_be_empty log
125 '
126
127 test_expect_success 'log -G looks into binary files with -a' '
128 git log -a -Ga >log &&
129 test_cmp log full-log
130 '
131
132 test_expect_success 'log -G looks into binary files with textconv filter' '
133 test_when_finished "rm .gitattributes" &&
134 echo "* diff=bin" >.gitattributes &&
135 git -c diff.bin.textconv=cat log -Ga >log &&
136 test_cmp log full-log
137 '
138
139 test_expect_success 'log -S looks into binary files' '
140 git log -Sa >log &&
141 test_cmp log full-log
142 '
143
144 test_done