add bcs.sh (Bad Code Search)
fixes #22. GitOrigin-RevId: f13bee397fc4bfc957f07cb89d1766ee55ae0415
This commit is contained in:
parent
4a7cc839a0
commit
2789c0d1b4
62
tools/scripts/bcs.sh
Normal file
62
tools/scripts/bcs.sh
Normal file
@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Bad Code Search, with syntax highlighting.
|
||||
#
|
||||
# Sample usage:
|
||||
# bcs.sh --file Lines.*cs Vector3
|
||||
# bcs.sh -i new vector3
|
||||
|
||||
# https://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash
|
||||
POSITIONAL=()
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
key="$1"
|
||||
|
||||
case $key in
|
||||
-f|--file)
|
||||
FILE="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
-i|--ignore-case)
|
||||
GREP_FLAGS="-i"
|
||||
shift # past argument
|
||||
;;
|
||||
*) # unknown option
|
||||
POSITIONAL+=("$1") # save it in an array for later
|
||||
shift # past argument
|
||||
;;
|
||||
esac
|
||||
done
|
||||
set -- "${POSITIONAL[@]}" # restore positional parameters
|
||||
|
||||
if [[ -z $@ ]]; then
|
||||
echo 'Usage: bcs.sh [-i] [-f/--file FILE_PATTERN] QUERY'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# highlight(1) sticks some ANSI cruft into the output.
|
||||
# We just turn spaces into "match anything", which kinda ignores the cruft.
|
||||
QUERY=`echo $@ | sed -e "s/ /.*/g"`
|
||||
|
||||
if [[ -n $FILE ]]; then
|
||||
files=$(git ls-tree -r master --name-only | grep "$FILE")
|
||||
if [[ -z $files ]]; then
|
||||
echo "no files matched"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
for file in `grep -l $GREP_FLAGS "$QUERY" $files`;
|
||||
do
|
||||
echo $file:
|
||||
highlight --force --line-numbers -O xterm256 --stdout $file | \
|
||||
grep -C 5 $GREP_FLAGS "$QUERY" --label=$file | perl -pne s%^--\$%$file:%
|
||||
done
|
||||
else
|
||||
for file in `grep -l $GREP_FLAGS "$QUERY" $(git ls-tree -r master --name-only)`
|
||||
do
|
||||
echo $file:
|
||||
highlight --force --line-numbers -O xterm256 --stdout $file | \
|
||||
grep -C 5 $GREP_FLAGS "$QUERY" --label=$file | perl -pne s%^--\$%$file:%
|
||||
done
|
||||
fi
|
Loading…
Reference in New Issue
Block a user