| Linus Torvalds | f22cc3f | 2005-09-12 19:06:10 | [diff] [blame] | 1 | #!/bin/sh |
| Linus Torvalds | 5d9d831 | 2005-09-12 23:46:53 | [diff] [blame] | 2 | # |
| 3 | # Copyright (c) Linus Torvalds, 2005 | ||||
| 4 | # | ||||
| 5 | |||||
| Junio C Hamano | 5b2bcc7 | 2006-01-20 23:00:12 | [diff] [blame] | 6 | USAGE='[<option>...] [-e] <pattern> [<path>...]' |
| freku045@student.liu.se | 806f36d | 2005-12-13 22:30:31 | [diff] [blame] | 7 | SUBDIRECTORY_OK='Yes' |
| 8 | . git-sh-setup | ||||
| 9 | |||||
| Junio C Hamano | 5b2bcc7 | 2006-01-20 23:00:12 | [diff] [blame] | 10 | got_pattern () { |
| 11 | if [ -z "$no_more_patterns" ] | ||||
| 12 | then | ||||
| 13 | pattern="$1" no_more_patterns=yes | ||||
| 14 | else | ||||
| 15 | die "git-grep: do not specify more than one pattern" | ||||
| 16 | fi | ||||
| 17 | } | ||||
| 18 | |||||
| 19 | no_more_patterns= | ||||
| Linus Torvalds | 5d9d831 | 2005-09-12 23:46:53 | [diff] [blame] | 20 | pattern= |
| 21 | flags=() | ||||
| 22 | git_flags=() | ||||
| 23 | while : ; do | ||||
| 24 | case "$1" in | ||||
| Junio C Hamano | 5b2bcc7 | 2006-01-20 23:00:12 | [diff] [blame] | 25 | -o|--cached|--deleted|--others|--killed|\ |
| 26 | --ignored|--modified|--exclude=*|\ | ||||
| Linus Torvalds | 5d9d831 | 2005-09-12 23:46:53 | [diff] [blame] | 27 | --exclude-from=*|\--exclude-per-directory=*) |
| 28 | git_flags=("${git_flags[@]}" "$1") | ||||
| 29 | ;; | ||||
| 30 | -e) | ||||
| Junio C Hamano | 5b2bcc7 | 2006-01-20 23:00:12 | [diff] [blame] | 31 | got_pattern "$2" |
| Linus Torvalds | 5d9d831 | 2005-09-12 23:46:53 | [diff] [blame] | 32 | shift |
| 33 | ;; | ||||
| 34 | -A|-B|-C|-D|-d|-f|-m) | ||||
| 35 | flags=("${flags[@]}" "$1" "$2") | ||||
| 36 | shift | ||||
| 37 | ;; | ||||
| 38 | --) | ||||
| Junio C Hamano | 5b2bcc7 | 2006-01-20 23:00:12 | [diff] [blame] | 39 | # The rest are git-ls-files paths |
| Linus Torvalds | 5d9d831 | 2005-09-12 23:46:53 | [diff] [blame] | 40 | shift |
| 41 | break | ||||
| 42 | ;; | ||||
| 43 | -*) | ||||
| 44 | flags=("${flags[@]}" "$1") | ||||
| 45 | ;; | ||||
| 46 | *) | ||||
| Junio C Hamano | 5b2bcc7 | 2006-01-20 23:00:12 | [diff] [blame] | 47 | if [ -z "$no_more_patterns" ] |
| 48 | then | ||||
| 49 | got_pattern "$1" | ||||
| Linus Torvalds | 5d9d831 | 2005-09-12 23:46:53 | [diff] [blame] | 50 | shift |
| 51 | fi | ||||
| Junio C Hamano | 5b2bcc7 | 2006-01-20 23:00:12 | [diff] [blame] | 52 | [ "$1" = -- ] && shift |
| Linus Torvalds | 5d9d831 | 2005-09-12 23:46:53 | [diff] [blame] | 53 | break |
| 54 | ;; | ||||
| 55 | esac | ||||
| 56 | shift | ||||
| Linus Torvalds | f22cc3f | 2005-09-12 19:06:10 | [diff] [blame] | 57 | done |
| Linus Torvalds | c0c35d5 | 2005-11-16 17:38:46 | [diff] [blame] | 58 | [ "$pattern" ] || { |
| freku045@student.liu.se | 806f36d | 2005-12-13 22:30:31 | [diff] [blame] | 59 | usage |
| Linus Torvalds | c0c35d5 | 2005-11-16 17:38:46 | [diff] [blame] | 60 | } |
| Junio C Hamano | 5b2bcc7 | 2006-01-20 23:00:12 | [diff] [blame] | 61 | git-ls-files -z "${git_flags[@]}" -- "$@" | |
| 62 | xargs -0 grep "${flags[@]}" -e "$pattern" -- | ||||