1#!/bin/sh 2 3test_description='log --grep/--author/--regexp-ignore-case/-S/-G' 4. ./test-lib.sh 5 6test_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 37test_log_icase () { 38 test_log $@ --regexp-ignore-case 39 test_log $@ -i 40} 41 42test_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 58test_log expect_initial --grep initial 59test_log expect_nomatch --grep InItial 60test_log_icase expect_initial --grep InItial 61test_log_icase expect_nomatch --grep initail 62 63test_log expect_second --author Person 64test_log expect_nomatch --author person 65test_log_icase expect_second --author person 66test_log_icase expect_nomatch --author spreon 67 68test_log expect_nomatch -G picked 69test_log expect_second -G Picked 70test_log_icase expect_nomatch -G pickle 71test_log_icase expect_second -G picked 72 73test_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 79test_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 86test_log expect_nomatch -S picked 87test_log expect_second -S Picked 88test_log_icase expect_second -S picked 89test_log_icase expect_nomatch -S pickle 90 91test_log expect_nomatch -S p.cked --pickaxe-regex 92test_log expect_second -S P.cked --pickaxe-regex 93test_log_icase expect_second -S p.cked --pickaxe-regex 94test_log_icase expect_nomatch -S p.ckle --pickaxe-regex 95 96test_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 102test_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 109test_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 122test_expect_success 'log -G ignores binary files' ' 123 git log -Ga >log && 124 test_must_be_empty log 125' 126 127test_expect_success 'log -G looks into binary files with -a' ' 128 git log -a -Ga >log && 129 test_cmp log full-log 130' 131 132test_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 139test_expect_success 'log -S looks into binary files' ' 140 git log -Sa >log && 141 test_cmp log full-log 142' 143 144test_done 145