Merge branch 'sb/z-is-gnutar-ism' into maint
[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_done