From: Linus Torvalds Date: Mon, 12 Sep 2005 22:22:44 GMT Subject: Improve "git grep" flags handling Message-ID: In-Reply-To: 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 --- 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"