summary refs log tree commit diff
path: root/xlocate
blob: 1b3efff494c6d25299b7b8d2ac42b3193f0bb6d1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/sh
# xlocate [-u | PATTERN] - locate files in all XBPS packages

: ${XLOCATE_DB:=~/.cache/xlocate.db}

xupdatedb() {
	echo "xlocate: reindexing database..." 1>&2
	xbps-query -Ro '*' |
		sed 's/ *([^)]*)$//; s|: ||;' |
		/usr/libexec/frcode >"$XLOCATE_DB"
}

if [ "$1" = -u ]; then
	xupdatedb
	exit $?
fi

if [ -e "$XLOCATE_DB" ]; then
	if find /var/db/xbps/ -name '*repodata' -newer "$XLOCATE_DB" | grep -q .; then
		xupdatedb
	fi
	rx=
	case "$1" in
		# Just . is unlikely to be a regex here...
		*[*+\\\[\]]*) rx=-r;;
	esac
	# XXX also matches template in package name.
	locate $rx -d "$XLOCATE_DB" "$1" |
		sed 's|^\([^/]*\)-[^-/]*/|\1\t/|'
else
	xbps-query --regex -Ro "$@" |
		sed 's/ *([^)]*)$//; s/^\([^ ]*\)-[^-]*: /\1\t/'
fi