1#!/bin/sh
2#
3# Copyright (c) Linus Torvalds, 2005
4#
5
6USAGE='[<option>...] [-e] <pattern> [<path>...]'
7SUBDIRECTORY_OK='Yes'
8. git-sh-setup
9
10got_pattern () {
11 if [ -z "$no_more_patterns" ]
12 then
13 pattern="$1" no_more_patterns=yes
14 else
15 die "git-grep: do not specify more than one pattern"
16 fi
17}
18
19no_more_patterns=
20pattern=
21flags=()
22git_flags=()
23while : ; do
24 case "$1" in
25 -o|--cached|--deleted|--others|--killed|\
26 --ignored|--modified|--exclude=*|\
27 --exclude-from=*|\--exclude-per-directory=*)
28 git_flags=("${git_flags[@]}" "$1")
29 ;;
30 -e)
31 got_pattern "$2"
32 shift
33 ;;
34 -A|-B|-C|-D|-d|-f|-m)
35 flags=("${flags[@]}" "$1" "$2")
36 shift
37 ;;
38 --)
39 # The rest are git-ls-files paths
40 shift
41 break
42 ;;
43 -*)
44 flags=("${flags[@]}" "$1")
45 ;;
46 *)
47 if [ -z "$no_more_patterns" ]
48 then
49 got_pattern "$1"
50 shift
51 fi
52 [ "$1" = -- ] && shift
53 break
54 ;;
55 esac
56 shift
57done
58[ "$pattern" ] || {
59 usage
60}
61git-ls-files -z "${git_flags[@]}" -- "$@" |
62 xargs -0 grep "${flags[@]}" -e "$pattern" --