GIT 1.0.0
[gitweb.git] / git-grep.sh
index c77a2d0067246092aa0ab38f74b885ed8b51d116..2ed8e955d6c44da7bd15342aac64de997f0f4bf4 100755 (executable)
@@ -1,25 +1,50 @@
 #!/bin/sh
-flags=
-while :; do
-  pattern="$1"
-  case "$pattern" in
-  -i|-I|-a|-E|-H|-h|-l)
-    flags="$flags $pattern"
-    shift
-    ;;
-  -e)
-    pattern="$2"
-    shift
-    break
-    ;;
-  -*)
-    echo "unknown flag $pattern" >&2
-    exit 1
-    ;;
-  *)
-    break
-    ;;
-  esac
+#
+# Copyright (c) Linus Torvalds, 2005
+#
+
+USAGE='<option>... <pattern> <path>...'
+SUBDIRECTORY_OK='Yes'
+. git-sh-setup
+
+pattern=
+flags=()
+git_flags=()
+while : ; do
+       case "$1" in
+       --cached|--deleted|--others|--killed|\
+       --ignored|--exclude=*|\
+       --exclude-from=*|\--exclude-per-directory=*)
+               git_flags=("${git_flags[@]}" "$1")
+               ;;
+       -e)
+               pattern="$2"
+               shift
+               ;;
+       -A|-B|-C|-D|-d|-f|-m)
+               flags=("${flags[@]}" "$1" "$2")
+               shift
+               ;;
+       --)
+               # The rest are git-ls-files paths (or flags)
+               shift
+               break
+               ;;
+       -*)
+               flags=("${flags[@]}" "$1")
+               ;;
+       *)
+               if [ -z "$pattern" ]; then
+                       pattern="$1"
+                       shift
+               fi
+               break
+               ;;
+       esac
+       shift
 done
-shift
-git-ls-files -z "$@" | xargs -0 grep $flags -e "$pattern"
+[ "$pattern" ] || {
+       usage
+}
+git-ls-files -z "${git_flags[@]}" "$@" |
+       xargs -0 grep "${flags[@]}" -e "$pattern"