From: Junio C Hamano <junkio@cox.net>
To: Linus Torvalds <torvalds@osdl.org>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: [PATCH] Improve "git grep" flags handling
Date: Mon, 12 Sep 2005 17:51:56 -0700 [thread overview]
Message-ID: <7v64t56b83.fsf_-_@assigned-by-dhcp.cox.net> (raw)
In-Reply-To: <Pine.LNX.4.58.0509121635060.3266@g5.osdl.org> (Linus Torvalds's message of "Mon, 12 Sep 2005 16:46:53 -0700 (PDT)")
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 was the version after I showed Linus a barf-o-meter test
version that avoids shell arrays. The emperor penguin 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>
---
Linus Torvalds <torvalds@osdl.org> writes:
Wouldn't it be _much_ nicer to just do which does use bash
array variables, but dang, it does so for a reason: they
really are very very useful, and they make it _so_ much more
pleasant to do these things..
Thanks, Linus. This is what will go into "master" tonight.
git-grep.sh | 64 ++++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 41 insertions(+), 23 deletions(-)
6df4eef9b10c8de2b9bc3dc769f3a008a1200df7
diff --git a/git-grep.sh b/git-grep.sh
--- a/git-grep.sh
+++ b/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"
next prev parent reply other threads:[~2005-09-13 0:52 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-12 19:06 Add "git grep" helper Linus Torvalds
2005-09-12 20:57 ` Morten Welinder
2005-09-12 21:37 ` Linus Torvalds
2005-09-12 21:45 ` Junio C Hamano
2005-09-12 22:12 ` Linus Torvalds
2005-09-12 22:22 ` Improve "git grep" flags handling Linus Torvalds
2005-09-12 22:37 ` Junio C Hamano
2005-09-12 22:43 ` Linus Torvalds
2005-09-12 23:26 ` Junio C Hamano
2005-09-12 23:46 ` Linus Torvalds
2005-09-12 23:55 ` Junio C Hamano
2005-09-13 0:51 ` Junio C Hamano [this message]
2005-09-13 17:39 ` [PATCH] " Horst von Brand
2005-09-13 17:51 ` Linus Torvalds
2005-09-13 18:53 ` Junio C Hamano
2005-09-13 19:09 ` Linus Torvalds
2005-09-12 22:31 ` Add "git grep" helper Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7v64t56b83.fsf_-_@assigned-by-dhcp.cox.net \
--to=junkio@cox.net \
--cc=git@vger.kernel.org \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.