t / t7002-grep.shon commit Merge branch 'uk/rev-parse-parse-opt' (5cacf3d)
   1#!/bin/sh
   2#
   3# Copyright (c) 2006 Junio C Hamano
   4#
   5
   6test_description='git grep various.
   7'
   8
   9. ./test-lib.sh
  10
  11test_expect_success setup '
  12        {
  13                echo foo mmap bar
  14                echo foo_mmap bar
  15                echo foo_mmap bar mmap
  16                echo foo mmap bar_mmap
  17                echo foo_mmap bar mmap baz
  18        } >file &&
  19        echo ww w >w &&
  20        echo x x xx x >x &&
  21        echo y yy >y &&
  22        echo zzz > z &&
  23        mkdir t &&
  24        echo test >t/t &&
  25        git add file w x y z t/t &&
  26        test_tick &&
  27        git commit -m initial
  28'
  29
  30test_expect_success 'grep should not segfault with a bad input' '
  31        test_must_fail git grep "("
  32'
  33
  34for H in HEAD ''
  35do
  36        case "$H" in
  37        HEAD)   HC='HEAD:' L='HEAD' ;;
  38        '')     HC= L='in working tree' ;;
  39        esac
  40
  41        test_expect_success "grep -w $L" '
  42                {
  43                        echo ${HC}file:1:foo mmap bar
  44                        echo ${HC}file:3:foo_mmap bar mmap
  45                        echo ${HC}file:4:foo mmap bar_mmap
  46                        echo ${HC}file:5:foo_mmap bar mmap baz
  47                } >expected &&
  48                git grep -n -w -e mmap $H >actual &&
  49                diff expected actual
  50        '
  51
  52        test_expect_success "grep -w $L (w)" '
  53                : >expected &&
  54                ! git grep -n -w -e "^w" >actual &&
  55                test_cmp expected actual
  56        '
  57
  58        test_expect_success "grep -w $L (x)" '
  59                {
  60                        echo ${HC}x:1:x x xx x
  61                } >expected &&
  62                git grep -n -w -e "x xx* x" $H >actual &&
  63                diff expected actual
  64        '
  65
  66        test_expect_success "grep -w $L (y-1)" '
  67                {
  68                        echo ${HC}y:1:y yy
  69                } >expected &&
  70                git grep -n -w -e "^y" $H >actual &&
  71                diff expected actual
  72        '
  73
  74        test_expect_success "grep -w $L (y-2)" '
  75                : >expected &&
  76                if git grep -n -w -e "^y y" $H >actual
  77                then
  78                        echo should not have matched
  79                        cat actual
  80                        false
  81                else
  82                        diff expected actual
  83                fi
  84        '
  85
  86        test_expect_success "grep -w $L (z)" '
  87                : >expected &&
  88                if git grep -n -w -e "^z" $H >actual
  89                then
  90                        echo should not have matched
  91                        cat actual
  92                        false
  93                else
  94                        diff expected actual
  95                fi
  96        '
  97
  98        test_expect_success "grep $L (t-1)" '
  99                echo "${HC}t/t:1:test" >expected &&
 100                git grep -n -e test $H >actual &&
 101                diff expected actual
 102        '
 103
 104        test_expect_success "grep $L (t-2)" '
 105                echo "${HC}t:1:test" >expected &&
 106                (
 107                        cd t &&
 108                        git grep -n -e test $H
 109                ) >actual &&
 110                diff expected actual
 111        '
 112
 113        test_expect_success "grep $L (t-3)" '
 114                echo "${HC}t/t:1:test" >expected &&
 115                (
 116                        cd t &&
 117                        git grep --full-name -n -e test $H
 118                ) >actual &&
 119                diff expected actual
 120        '
 121
 122        test_expect_success "grep -c $L (no /dev/null)" '
 123                ! git grep -c test $H | grep /dev/null
 124        '
 125
 126done
 127
 128cat >expected <<EOF
 129file:foo mmap bar_mmap
 130EOF
 131
 132test_expect_success 'grep -e A --and -e B' '
 133        git grep -e "foo mmap" --and -e bar_mmap >actual &&
 134        test_cmp expected actual
 135'
 136
 137cat >expected <<EOF
 138file:foo_mmap bar mmap
 139file:foo_mmap bar mmap baz
 140EOF
 141
 142
 143test_expect_success 'grep ( -e A --or -e B ) --and -e B' '
 144        git grep \( -e foo_ --or -e baz \) \
 145                --and -e " mmap" >actual &&
 146        test_cmp expected actual
 147'
 148
 149cat >expected <<EOF
 150file:foo mmap bar
 151EOF
 152
 153test_expect_success 'grep -e A --and --not -e B' '
 154        git grep -e "foo mmap" --and --not -e bar_mmap >actual &&
 155        test_cmp expected actual
 156'
 157
 158test_expect_success 'log grep setup' '
 159        echo a >>file &&
 160        test_tick &&
 161        GIT_AUTHOR_NAME="With * Asterisk" \
 162        GIT_AUTHOR_EMAIL="xyzzy@frotz.com" \
 163        git commit -a -m "second" &&
 164
 165        echo a >>file &&
 166        test_tick &&
 167        git commit -a -m "third"
 168
 169'
 170
 171test_expect_success 'log grep (1)' '
 172        git log --author=author --pretty=tformat:%s >actual &&
 173        ( echo third ; echo initial ) >expect &&
 174        test_cmp expect actual
 175'
 176
 177test_expect_success 'log grep (2)' '
 178        git log --author=" * " -F --pretty=tformat:%s >actual &&
 179        ( echo second ) >expect &&
 180        test_cmp expect actual
 181'
 182
 183test_expect_success 'log grep (3)' '
 184        git log --author="^A U" --pretty=tformat:%s >actual &&
 185        ( echo third ; echo initial ) >expect &&
 186        test_cmp expect actual
 187'
 188
 189test_expect_success 'log grep (4)' '
 190        git log --author="frotz\.com>$" --pretty=tformat:%s >actual &&
 191        ( echo second ) >expect &&
 192        test_cmp expect actual
 193'
 194
 195test_expect_success 'log grep (5)' '
 196        git log --author=Thor -F --grep=Thu --pretty=tformat:%s >actual &&
 197        ( echo third ; echo initial ) >expect &&
 198        test_cmp expect actual
 199'
 200
 201test_expect_success 'log grep (6)' '
 202        git log --author=-0700  --pretty=tformat:%s >actual &&
 203        >expect &&
 204        test_cmp expect actual
 205'
 206
 207test_expect_success 'grep with CE_VALID file' '
 208        git update-index --assume-unchanged t/t &&
 209        rm t/t &&
 210        test "$(git grep --no-ext-grep t)" = "t/t:test" &&
 211        git update-index --no-assume-unchanged t/t &&
 212        git checkout t/t
 213'
 214
 215test_done