зеркало из https://github.com/microsoft/git.git
Improve "git grep" flags handling
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. [jc: this is the version Linus sent out after I showed him a barf-o-meter test version that avoids shell arrays. He must have typed this version blindly, since he said: I'm not barfing, but that's probably because my brain just shut down and is desperately trying to gouge my eyes out with a spoon. I slightly fixed it to catch the remaining arguments meant to be given git-ls-files.] Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
4e48fe3f1c
Коммит
5d9d831a51
64
git-grep.sh
64
git-grep.sh
|
@ -1,25 +1,43 @@
|
|||
#!/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
|
||||
#
|
||||
|
||||
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"
|
||||
git-ls-files -z "${git_flags[@]}" "$@" |
|
||||
xargs -0 grep "${flags[@]}" "$pattern"
|
||||
|
|
Загрузка…
Ссылка в новой задаче