Code

[PATCH] Add "git grep" helper
authorLinus Torvalds <torvalds@osdl.org>
Mon, 12 Sep 2005 19:06:10 +0000 (12:06 -0700)
committerJunio C Hamano <junkio@cox.net>
Mon, 12 Sep 2005 20:20:03 +0000 (13:20 -0700)
Very convenient shorthand for

git-ls-files [file-patterns] | xargs grep <pattern>

which I tend to do all the time.

Yes, it's trivial, but it's really nice. I can do

git grep '\<some_variable\>' arch/i386 include/asm-i386

and it does exactly what you'd think it does. And since it just uses the
normal git-ls-files file patterns, you can do things like

git grep something 'include/*.h'

and it will search all header files under the include/ subdirectory.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Makefile
git-grep.sh [new file with mode: 0755]

index 5b028b1d9482b1299b912e81d3d9b2e428b7eda8..9c2bdd642bd7b3e142512f1b71780273351ca514 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -76,7 +76,7 @@ SCRIPT_SH = \
        git-tag.sh git-verify-tag.sh git-whatchanged.sh git.sh \
        git-applymbox.sh git-applypatch.sh \
        git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \
-       git-merge-resolve.sh
+       git-merge-resolve.sh git-grep.sh
 
 SCRIPT_PERL = \
        git-archimport.perl git-cvsimport.perl git-relink.perl \
diff --git a/git-grep.sh b/git-grep.sh
new file mode 100755 (executable)
index 0000000..db2296c
--- /dev/null
@@ -0,0 +1,20 @@
+#!/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
+done
+shift
+git-ls-files -z "$@" | xargs -0 grep $flags "$pattern"