Improve "git grep" flags handling
- From
Linus Torvalds <torvalds@osdl.org>
- Date
- Sep 12, 2005, 22:22 UTC
- Message-ID
- <Pine.LNX.4.58.0509121519310.3266@g5.osdl.org>
- In-Reply-To
- <Pine.LNX.4.58.0509121500400.3266@g5.osdl.org>
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"