99 lines
2.4 KiB
Bash
Executable file
99 lines
2.4 KiB
Bash
Executable file
#!/bin/bash
|
|
if ! type -path swish-e > /dev/null 2>&1; then
|
|
cat<<EOF
|
|
This program requires that the 'swish-e' full-text indexer be installed.
|
|
On Debian and Ubuntu systems, you may install it by running
|
|
sudo apt-get install swish-e
|
|
On Ubuntu systems, this requires that the "universe" repository be enabled.
|
|
EOF
|
|
exit 2
|
|
fi
|
|
|
|
case "$0" in
|
|
*/*) MYDIR="${0%/*}" ;;
|
|
*) MYDIR="`type -path $0`"; MYDIR="${MYDIR%/*}"
|
|
esac
|
|
|
|
SRCDIR=$(cd "$MYDIR/../src"; pwd)
|
|
SWISHINDEX="$SRCDIR/.swishindex"
|
|
|
|
function makerelative () {
|
|
python -c '
|
|
import os, sys
|
|
here = os.getcwd()
|
|
parents = [here + "/"]
|
|
while 1:
|
|
next = os.path.dirname(here)
|
|
if next == here: break
|
|
parents.append(next + "/")
|
|
here = next
|
|
for file in sys.stdin.read().split("\0"):
|
|
for i in range(len(parents)):
|
|
p = parents[i]
|
|
if file.startswith(p):
|
|
file1 = os.path.join("../" * i, file[len(p):])
|
|
if len(file1) < len(file): file = file1
|
|
sys.stdout.write(file + "\0")
|
|
'
|
|
}
|
|
|
|
usage () {
|
|
b=${0##*/}
|
|
cat<<EOF
|
|
$b: Search emc2 source code and documentation
|
|
|
|
Usage:
|
|
$b [-R] [-F file-re] swish-pattern [grep-pattern]
|
|
|
|
-R: Rebuild the index. This is equivalent to running 'make swish'
|
|
in the source directory
|
|
|
|
-F: Specify a subset of files to search. This is an extended regular
|
|
expression, not a shell glob. To search all ".c" files, use
|
|
$b -F '\.c$' ...
|
|
|
|
swish-pattern: Specify the pattern to pass to 'swish -w'. See
|
|
"man SWISH-RUN" for more information
|
|
|
|
grep-pattern: Specify the pattern to pass to 'grep'. Each file listed
|
|
by swish is grepped for this pattern, and matching lines are
|
|
printed. By default, $b attempts to turn swish-pattern into
|
|
a grep-pattern, but this only works if swish-pattern is a simple
|
|
word. For more information about grep patterns, see 'man egrep'
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
FORCEREBUILD=""
|
|
while getopts "hRF:" opt
|
|
do
|
|
case "$opt" in
|
|
R) FORCEREBUILD=1 ;;
|
|
F) FILEFILTER="egrep -z -e $OPTARG" ;;
|
|
h|?) usage ;;
|
|
esac
|
|
done
|
|
shift $(($OPTIND-1))
|
|
|
|
if [ "$FORCEREBUILD" -o ! -f "$SWISHINDEX" ]
|
|
then
|
|
make -C "$SRCDIR" swish || exit $?
|
|
if [ $# -eq 0 ]; then exit 0; fi
|
|
fi
|
|
|
|
PAT="$1"; shift
|
|
if [ $# -eq 0 ]; then
|
|
REGEXP="${PAT%%\*}"
|
|
else
|
|
REGEXP="$1"
|
|
fi
|
|
|
|
if ! [ -z "$FILEFILTER" ]; then
|
|
swish-e -f $SWISHINDEX -H0 -x '<swishdocpath>\0' -w "$PAT" \
|
|
| $FILEFILTER | makerelative \
|
|
| xargs -0 egrep -Hnis -e "$REGEXP"
|
|
else
|
|
swish-e -f $SWISHINDEX -H0 -x '<swishdocpath>\0' -w "$PAT" \
|
|
| makerelative \
|
|
| xargs -0 egrep -Hnis -e "$REGEXP"
|
|
fi
|