Link Everyday GIT to main documentation tree.
[gitweb.git] / git-grep.sh
index db2296c330c0679c11d308441603171673cac763..44c16130bd93fea8b6f172f1614115801f8df2d9 100755 (executable)
@@ -1,20 +1,47 @@
 #!/bin/sh
-flags=
-while :; do
-  pattern="$1"
-  case "$pattern" in
-  -i|-I|-a|-E|-H|-h|-l)
-    flags="$flags $pattern"
-    shift
-    ;;
-  -*)
-    echo "unknown flag $pattern" >&2
-    exit 1
-    ;;
-  *)
-    break
-    ;;
-  esac
+#
+# Copyright (c) Linus Torvalds, 2005
+#
+
+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 "$pattern"
+[ "$pattern" ] || {
+       echo >&2 "usage: 'git grep <pattern> [pathspec*]'"
+       exit 1
+}
+git-ls-files -z "${git_flags[@]}" "$@" |
+       xargs -0 grep "${flags[@]}" -e "$pattern"