63 lines
		
	
	
		
			1000 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			63 lines
		
	
	
		
			1000 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| #
 | |
| # Copyright (c) Linus Torvalds, 2005
 | |
| #
 | |
| 
 | |
| USAGE='[<option>...] [-e] <pattern> [<path>...]'
 | |
| SUBDIRECTORY_OK='Yes'
 | |
| . git-sh-setup
 | |
| 
 | |
| got_pattern () {
 | |
| 	if [ -z "$no_more_patterns" ]
 | |
| 	then
 | |
| 		pattern="$1" no_more_patterns=yes
 | |
| 	else
 | |
| 		die "git-grep: do not specify more than one pattern"
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| no_more_patterns=
 | |
| pattern=
 | |
| flags=()
 | |
| git_flags=()
 | |
| while : ; do
 | |
| 	case "$1" in
 | |
| 	-o|--cached|--deleted|--others|--killed|\
 | |
| 	--ignored|--modified|--exclude=*|\
 | |
| 	--exclude-from=*|\--exclude-per-directory=*)
 | |
| 		git_flags=("${git_flags[@]}" "$1")
 | |
| 		;;
 | |
| 	-e)
 | |
| 		got_pattern "$2"
 | |
| 		shift
 | |
| 		;;
 | |
| 	-A|-B|-C|-D|-d|-f|-m)
 | |
| 		flags=("${flags[@]}" "$1" "$2")
 | |
| 		shift
 | |
| 		;;
 | |
| 	--)
 | |
| 		# The rest are git-ls-files paths
 | |
| 		shift
 | |
| 		break
 | |
| 		;;
 | |
| 	-*)
 | |
| 		flags=("${flags[@]}" "$1")
 | |
| 		;;
 | |
| 	*)
 | |
| 		if [ -z "$no_more_patterns" ]
 | |
| 		then
 | |
| 			got_pattern "$1"
 | |
| 			shift
 | |
| 		fi
 | |
| 		[ "$1" = -- ] && shift
 | |
| 		break
 | |
| 		;;
 | |
| 	esac
 | |
| 	shift
 | |
| done
 | |
| [ "$pattern" ] || {
 | |
| 	usage
 | |
| }
 | |
| git-ls-files -z "${git_flags[@]}" -- "$@" |
 | |
| 	xargs -0 grep "${flags[@]}" -e "$pattern" --
 |