You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1000 B
62 lines
1000 B
#!/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" --
|
|
|