| #!/bin/sh | |
| # | |
| # Copyright (c) Linus Torvalds, 2005 | |
| # | |
| USAGE='[<option>...] [-e] <pattern> [<path>...]' | |
| SUBDIRECTORY_OK='Yes' | |
| . git-sh-setup | |
| got_pattern () { | |
| if [ -z "$no_more_patterns" ] | |
| then | |
| pattern="$1" no_more_patterns=yes | |
| else | |
| die "git-grep: do not specify more than one pattern" | |
| fi | |
| } | |
| no_more_patterns= | |
| pattern= | |
| flags=() | |
| git_flags=() | |
| while : ; do | |
| case "$1" in | |
| -o|--cached|--deleted|--others|--killed|\ | |
| --ignored|--modified|--exclude=*|\ | |
| --exclude-from=*|\--exclude-per-directory=*) | |
| git_flags=("${git_flags[@]}" "$1") | |
| ;; | |
| -e) | |
| got_pattern "$2" | |
| shift | |
| ;; | |
| -A|-B|-C|-D|-d|-f|-m) | |
| flags=("${flags[@]}" "$1" "$2") | |
| shift | |
| ;; | |
| --) | |
| # The rest are git-ls-files paths | |
| shift | |
| break | |
| ;; | |
| -*) | |
| flags=("${flags[@]}" "$1") | |
| ;; | |
| *) | |
| if [ -z "$no_more_patterns" ] | |
| then | |
| got_pattern "$1" | |
| shift | |
| fi | |
| [ "$1" = -- ] && shift | |
| break | |
| ;; | |
| esac | |
| shift | |
| done | |
| [ "$pattern" ] || { | |
| usage | |
| } | |
| git-ls-files -z "${git_flags[@]}" -- "$@" | | |
| xargs -0 grep "${flags[@]}" -e "$pattern" -- |