This allows any arbitrary flags to "grep", and knows about the few special
grep flags that take an argument too.
It also allows some flags for git-ls-files, although their usefulness is
questionable.
With this, something line
git grep -w -1 pattern
works, without the script enumerating every possible flag.
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
---
On Mon, 12 Sep 2005, Linus Torvalds wrote:
We also need special casing for grep flags that take an argument. So the
end result might be something like the following..
diff --git a/git-grep.sh b/git-grep.sh
--- a/git-grep.sh
+++ b/git-grep.sh
@@ -1,25 +1,38 @@
#!/bin/sh
flags=
+git_flags=
while :; do
pattern="$1"
case "$pattern" in
- -i|-I|-a|-E|-H|-h|-l)
- flags="$flags $pattern"
- shift
- ;;
+ # git-ls-file specific flags
+ --others|--exclude=*|--exclude-from=*|--exclude-per-directory=*)
+ git_flags="$git_flags $pattern"
+ shift
+ ;;
+
+ # grep flags with an argument
+ -B|-C|-m)
+ flags="$flags $pattern $2"
+ shift
+ shift
+ ;;
+
+ # grep 'pattern' argument
-e)
- pattern="$2"
- shift
- break
- ;;
+ pattern="$2"
+ shift
+ break
+ ;;
+
+ # We assume everything else is a regular grep pattern
-*)
- echo "unknown flag $pattern" >&2
- exit 1
- ;;
+ flags="$flags $pattern"
+ shift
+ ;;
*)
break
;;
esac
done
shift
-git-ls-files -z "$@" | xargs -0 grep $flags -e "$pattern"
+git-ls-files -z $git_flags "$@" | xargs -0 grep $flags -e "$pattern"